ゼロからLinuxを学ぶ方法:最初のコマンドからサーバー管理までの計画
ゼロから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を学んだかどうかを確かめる最善の方法は、ヒントなしでゼロからサーバーを組み立てることです。
- 新しいVPS。sudoを使える自分のユーザーを作り、SSH鍵でログインし、パスワードとrootログインを無効にする。
- ファイアウォールとfail2ban、自動のセキュリティアップデート。
- Webサーバーとアプリケーションを、自動再起動を備えたsystemdサービスとして動かす。
- データ用の別ディスクまたは論理ボリュームを用意し、fstabでマウントする。
- 定期的なバックアップ(cronまたはsystemdタイマー)を、rsyncで別のマシンに転送する。ログを残し、復元も検証する。
- 簡単な手順書を作る。同じものをゼロから再構築する方法を書いておく。
このリストをすべてこなし、それぞれの手順を説明できるなら、システム管理者や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: с нуля до уверенного администрирования」で実践とともに詳しく解説しています。
- Linux: с нуля до уверенного администрирования
- Финал: собираем защищённый и автоматизированный сервер целиком