ロードマップ

ゼロからLinuxを学ぶ方法:最初のコマンドからサーバー管理までの計画

更新日: · Skillaria.Top

ゼロからLinuxを学ぶには段階を追うのが最適です。まずターミナルとファイルシステム、次にユーザーと権限、Bashスクリプト、パッケージ、プロセスとsystemd、そしてディスク、ログ、ネットワーク、SSH、サーバーのセキュリティへと進みます。各段階は自分の仮想マシンや安価なVPSで実際に操作して練習し、最終的には自力でサービスを動かすサーバーを構築して守れるようになることが目標です。

ゼロからLinuxを学ぶのは思ったより簡単です。正しい順序で進み、すぐに手を動かせば十分に身につきます。初心者が陥りやすい誤りは、コマンドを打たずに読むだけになることや、プロセスや権限を理解しないままDockerやKubernetesに飛びつくことです。ここでは、9段階の計画を示します。各段階で何を学び、何を練習し、どうなれば完了とみなせるかを説明します。

目安として、1日1時間の学習なら2〜4か月かかりますが、ペースは人によって違います。速さより大切なのは、各段階を終えた後に、自分の手で何かを実際にできることです。

段階0:学習環境を用意する

Linuxは、Linuxの上で学ぶのが一番です。簡単なものから現実に近いものまでの選択肢があります。

  • WindowsのWSL2:数分でUbuntuのターミナルが使えます。コマンドやスクリプトの練習には良いですが、systemdやネットワークの動きは実際のサーバーとは完全には一致しません。
  • 仮想マシン(VirtualBox、VMware、MacのUTM)にUbuntu ServerやDebianを入れる。壊しても影響がなく、スナップショットに戻せます。
  • 安価なVPS:クラウド事業者のパブリックIPを持つ実際のサーバーです。ネットワークとセキュリティの段階には最適な練習場です。

始めるならUbuntu ServerかDebianがおすすめです。ドキュメントや質問への回答が最も多いからです。グラフィカル環境は必要ありません。サーバーはターミナルで管理するので、初日から慣れておきましょう。

段階1:ターミナルとファイルシステム

目標:マウスを使わずに、システム内を自在に移動し、ファイルを扱えるようになること。

  • ナビゲーション:pwd、ls -la、cd、絶対パスと相対パス、~、.、..。
  • ファイル:cp、mv、rm、mkdir -p、touch、cat、less、head、tail -f による閲覧。
  • 検索:find、which、locate。
  • ヘルプ:man と --help。manを読めることは一生役立つスキルです。
  • ディレクトリ構造:/etc、/var/log、/home、/usr、/proc、/dev に何があるか。マウントとinodeとは何か。
  • ターミナルのエディタ:最初は nano、その後ほぼすべてのサーバーにある vim の基本的な操作を学ぶ。

練習:過去1週間に /etc で変更された .conf ファイルをすべて探す(find /etc -name "*.conf" -mtime -7)。/etc/os-release を開いて、システムのバージョンを確認する。/var/log に何が記録されているかを見る。

段階2:ユーザー、グループ、権限

権限はLinuxのセキュリティの基礎であり、「Permission denied」エラーの半分の原因でもあります。

  • ls -l の出力を読む:種類、権限、所有者、グループ。
  • 記号形式と数値形式の chmod、chown、umask。
  • 特殊ビット:SUID、SGID、sticky bit。なぜ /tmp は誰でも書き込めるのに、他人のファイルは削除できないのか。
  • ユーザーとグループ:useradd、usermod -aG、passwd、ファイル /etc/passwd、/etc/shadow、/etc/group。
  • sudo、sudoersのルール、visudo による編集。

練習:2人のユーザーと共有のプロジェクトディレクトリを作成し、2人はファイルを作成できるが、他のユーザーには何も見えないようにする。ヒント:グループ、chmod 2770、そしてグループを継承するためのSGID。

段階3:Bashとテキストツール

管理作業の多くは、テキストの処理です。ログ、設定、コマンドの出力を扱います。この段階で、ターミナルは単なるコマンドの集まりから道具になります。

  • リダイレクトとパイプ:>、>>、2>&1、|、xargs。
  • フィルタ:grep(正規表現を使う)、sort、uniq -c、wc、cut、sed、awk。
  • コンソールでのJSONとHTTP:curl と jq。
  • スクリプト:shebang、変数、引用符、条件 if と [[ ]]、ループ、関数、終了コード、set -euo pipefail。

練習:Webサーバーのログで、リクエストが最も多い10個のIPアドレスを、1行のコマンドで数えてみましょう。

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head

次に、ディレクトリを日付付きのアーカイブにまとめ、7日より古いアーカイブを削除し、エラー時にはゼロ以外の終了コードを返すバックアップスクリプトを書きます。

段階4:パッケージ、環境、スケジューラ

  • パッケージマネージャ:apt update、apt install、apt remove、apt search、dpkg -l。RHEL系では dnf。リポジトリとは何か、署名鍵が何のためにあるのかを理解する。
  • 環境変数:env、export、PATH、ファイル ~/.bashrc、~/.profile、/etc/environment、それぞれがいつ読み込まれるか。
  • スケジュール:crontab -e、5つのフィールドの書式。ターミナルでは動くコマンドがcronで「動かない」理由(環境と PATH が違う)。

練習:nginxをリポジトリからインストールし、自分のスクリプトのディレクトリを PATH に加え、段階3のバックアップスクリプトを毎晩cronで実行して、出力をログに記録する。

段階5:プロセスとsystemd

この段階で、システムの内部で実際に何が起きているかが分かり始めます。

  • プロセス:ps aux、top/htop、PIDとPPID、状態、優先度(nice)、シグナルと kill。
  • 負荷:平均負荷(load average)、メモリとswap(free -h)、「D状態のプロセス」の意味。
  • デバッグ:lsof(プロセスが開いているファイルやポート)、strace(プロセスのシステムコールと、どこで止まっているか)。
  • systemd:ユニット、systemctl status/start/enable、Restart=on-failure を持つ独自のユニットファイル、cronの代わりのタイマー。
  • ログ:journalctl -u、-f、-b、-p err、ローテーション、rsyslog。sysstat(sar、iostat)によるパフォーマンス統計。

練習:小さなアプリケーション(少なくとも python3 -m http.server)を、専用ユーザーで動くsystemdサービスにする。kill -9 でプロセスを終了させ、systemdが再起動したことを確認し、ログに再起動の記録があることを見つける。

段階6:ディスク、LVM、RAID

  • デバイスとパーティション:lsblk、blkid、fdisk または parted、ファイルシステムのext4とXFS、mkfs。
  • マウント:mount、UUIDを使った /etc/fstab、mount -a での確認。
  • 容量:df -h、df -i、du -sh、ディスクを占有しているものを見つける。
  • LVM:物理ボリューム、ボリュームグループ、論理ボリューム、停止せずにパーティションを拡張する。
  • mdadm によるソフトウェアRAID:レベル0、1、5、10の理解。RAIDはバックアップではないという点。

練習:仮想マシンに2台のディスクを追加し、LVMを構築して、論理ボリュームを作成し、fstabでマウントする。その後、lvextend -r で拡張する。

段階7:ネットワーク

  • 診断に必要な範囲のTCP/IP:IP、サブネットマスク、ゲートウェイ、ポート、TCPとUDP。
  • コマンド:ip a、ip r、ss -tlnp、ping、traceroute/mtr、curl -v、nc。
  • DNS:名前解決の仕組み、/etc/hosts、/etc/resolv.conf、dig、resolvectl。
  • ディストリビューションでのネットワーク設定(Ubuntuはnetplan、他ではNetworkManagerなど)。
  • パケットキャプチャ:他の方法で解決しないときの tcpdump。

練習:サーバーで開いているポートごとに、どのプロセスが待ち受けているかを調べる。127.0.0.1 だけで待ち受けているサービスが外部から見えない理由を分析し、それを修正する。

段階8:リモート作業:SSHとファイル転送

  • SSH:鍵(ssh-keygen -t ed25519、ssh-copy-id)、~/.ssh/config、ssh-agent、ポートフォワーディング(ssh -L)、ProxyJump による踏み台サーバー。
  • コピー:scp と rsync -avz --delete。同期においてrsyncが優れている点。
  • ネットワークファイルシステム:Linuxサーバー間のNFS、Windowsとのファイル共有のSMB(Samba)。

練習:VPSへのログインを鍵だけに限定し、~/.ssh/config に短い名前を設定して、rsyncでディレクトリを毎日サーバーに同期する。

段階9:サーバーのセキュリティ

  • ファイアウォール:「許可されていないものはすべて拒否する」という原則。簡単な場合は ufw、内部の動作を理解するには nftables。
  • fail2ban:連続したログイン失敗の後にIPをブロックする。fail2ban-client status sshd で確認。
  • sshdの設定:パスワードログインとroot直接ログインの禁止。
  • セキュリティアップデートと自動インストール(DebianとUbuntuのunattended-upgrades)。
  • GPG:パッケージやファイルの署名の検証、バックアップの暗号化。

練習:ファイアウォールで22、80、443番だけを開放し、fail2banを有効にする。1日後にそのステータスを見て、何個のアドレスがブロックされたかを確認する。

総合プロジェクト:サーバーを一から組み立てる

本当にLinuxを学んだかどうかを確かめる最善の方法は、ヒントなしでゼロからサーバーを組み立てることです。

  1. 新しいVPS。sudoを使える自分のユーザーを作り、SSH鍵でログインし、パスワードとrootログインを無効にする。
  2. ファイアウォールとfail2ban、自動のセキュリティアップデート。
  3. Webサーバーとアプリケーションを、自動再起動を備えたsystemdサービスとして動かす。
  4. データ用の別ディスクまたは論理ボリュームを用意し、fstabでマウントする。
  5. 定期的なバックアップ(cronまたはsystemdタイマー)を、rsyncで別のマシンに転送する。ログを残し、復元も検証する。
  6. 簡単な手順書を作る。同じものをゼロから再構築する方法を書いておく。

このリストをすべてこなし、それぞれの手順を説明できるなら、システム管理者やDevOpsエンジニアとしての基礎は身についています。次は、コンテナ、構成管理の自動化、監視へ進むとよいでしょう。

効率的に学ぶコツ

  • コマンドは自分で打つ。記事からコピーしても覚えられません。打ち込んでミスをすることで覚えます。
  • 壊して直す。仮想マシンでfstabや ~/.ssh の権限を壊してから、システムを復旧させてみましょう。この経験は面接でも高く評価されます。
  • メモを取る。例を付けた自分用のコマンドメモは、他人のチートシートよりも役に立ちます。
  • ログを読む。Linuxの問題のほとんどは、ログが説明してくれます。まずログを見る習慣をつけましょう。

まとめ

ゼロからLinuxを学ぶ方法は、段階を追って進むことです。ターミナルとファイル、権限、Bash、パッケージ、プロセスとsystemd、ディスク、ネットワーク、SSH、セキュリティ。各段階で、自分の環境において実際の課題を解決します。最終的な目標は、サービスを動かすサーバーを自力で構築し、守れるようになることです。Linuxコースの内容も、この道筋に沿って、入門の講義から総合プロジェクトまで組み立てられています。

よくある質問

ゼロからLinuxを習得するのにどれくらいかかりますか?

1日1時間ほど学習すると、通常は数か月でサーバーの日常操作の基礎を身につけられます。自信は実際の課題で練習することで得られるため、総時間よりも継続することが大切です。

Linuxを学ぶにはプログラミングの知識が必要ですか?

必要ありません。何も知らなくても始められます。ただし、Bashスクリプトの段階に進むころには、実際にプログラミングを始めていることになります。そのスキルは後の自動化で役立ちます。

WindowsでLinuxを学ぶことはできますか?

できます。WSL2か仮想マシンを使ってください。systemd、ディスク、ネットワークのテーマでは、完全な仮想マシンかVPSを使うのが望ましいです。

パソコンのメインOSをLinuxにするべきですか?

役立ちますが、必須ではありません。システム管理では、グラフィカルなデスクトップを使うことよりも、ターミナルでサーバー版のLinuxを操作することの方が重要です。

初心者はどのディストリビューションを選ぶべきですか?

Ubuntu ServerかDebianです。ドキュメントが豊富で、身につけた知識は他のディストリビューションにもそのまま使えます。RHEL系の主な違いは、パッケージマネージャがdnfであることです。

動画でこのテーマを学ぶ

このテーマはコース「Linux: с нуля до уверенного администрирования」で実践とともに詳しく解説しています。

コースへ