1. Linux端末を使ってみる
対応バージョン: Ubuntu Server 24.04 LTS(主な手順)、Rocky Linux 9(代替手順) 最終更新日: 2026年9月15日
コースの準備 | クイズ | 次へ: アドレスとインターフェイス
ネットワーク管理の第一歩は、次の3つに答えられることです。どのマシンを操作しているか、どのファイルを変更するか、変更をどう元に戻すか。このレッスンでは、小さなメモ帳ファイルを作成・編集し、権限を確認し、サービスの状態を読むことで、こうした習慣を身につけます。
前提条件と学習目標
通常ユーザーアカウントとそのパスワード、sudoを使う権限がある、使い捨てのローカルVMを用意します。ハイパーバイザーのコンソールからVMを開いてください。ハイパーバイザーとは、仮想マシンを実行するアプリケーションです。主な手順はUbuntu Server 24.04 LTSを対象とします。Rocky Linux 9は代替手順です。最初から両方を習得する必要はありません。一般的なコンテナには、ここで使う起動済みのsystemd環境全体が備わっていません。
ゲストOSでBash、GNU core utilities、ps、systemd、nano、viのいずれかを使えるようにしてください。エディターがなければ、メモ帳の演習を始める前に、後述のパッケージ準備を行います。このレッスンではネットワーク設定は不要です。コースの導入で準備した既存のNAT/DHCP管理インターフェイスをそのまま使います。
レッスンを終えると、次のことができるようになります。
- カーネル、ライブラリ、シェル、ディストリビューションがそれぞれ何を担うか説明する。
- パスをたどり、自分の練習用ファイルを作成、コピー、移動、編集、削除する。
- nanoとviで編集内容を保存または破棄し、基本的な所有者と権限を読み取る。
- UbuntuとRockyのパッケージ管理ツールを使い分け、インストール済みソフトウェアと実行中のサービスを区別する。
- プロセスID、systemdの状態、範囲を絞ったjournalメッセージを確認する。
実行時の約束: 以下のシェルブロックはすべて練習用VM内で実行してください。ノートPCのホストOS、このドキュメントをチェックアウトしたホスト、クラウドサーバーでは実行しません。sudoのないブロックは通常ユーザーで実行します。sudoが付いた行で昇格するのはそのコマンドだけです。一度に1つずつ実行し、予期しないエラーが出たら停止してください。出力例は説明用であり、Ubuntu/Rocky VMを実際に実行して採取した記録ではありません。
ログインしたシステムを理解する
「Linux」はカーネルを指すことも、口語的にOS全体を指すこともあります。カーネルはCPU時間、メモリ、ファイルシステム、デバイスドライバー、ネットワークパケットを管理します。プログラムがこれらの機能を要求するためのシステムコールを提供します。シェルやエディターはカーネルの外側にあるユーザー空間で実行されます。
ライブラリは再利用可能な関数を提供します。たとえばGNU C Library(glibc)は、テキスト処理、ファイル入出力、OSへのアクセスなど、多くのプログラムが使う機能を提供します。ライブラリ関数には、カーネルを呼び出すものも、メモリ上のデータだけを処理するものもあります。ライブラリはエディターでも、第2のカーネルでもありません。アプリケーションが特定のライブラリを必要とするため、パッケージ間に依存関係が生じることがあります。
ディストリビューションは、カーネル、ライブラリ、コマンド、インストーラー、リポジトリ、更新、既定の設定をまとめ、インストール可能なシステムとして提供します。ここでいうリポジトリは、ソフトウェアパッケージの管理された提供元です。パッケージにはソフトウェアと、バージョンや依存関係の情報が含まれます。
| ディストリビューション | 系統とパッケージ形式 | このコースでの意味 |
|---|---|---|
| Debian | .debパッケージ、APT、dpkgを使うコミュニティディストリビューション | Ubuntuの派生元です。Debianのネットワークやサービスの既定値がUbuntuと同じとは限りません |
| Ubuntu | Debianを基盤とし、独自のリリースとリポジトリを持つディストリビューション | Ubuntu Server 24.04 LTSのコマンド手順に従います |
| Rocky Linux | RHELエコシステムのエンタープライズLinuxディストリビューション。.rpmパッケージ、DNF、RPMを使用 | 代替のRocky 9パッケージ手順に従います |
端末はキーボード入力とテキスト表示を扱います。Bashを使うこのコースでは、シェルが入力した内容を解釈し、コマンドを実行します。lsと入力すると、ユーザー空間のプログラムがファイル一覧を表示します。カーネルと直接やりとりしているわけではありません。こうした区別については、参考資料に挙げたDebianとGNUの文書を参照してください。
練習用VM、通常ユーザー、確認のみ:
hostname
whoami
id
cat /etc/os-release
uname -r
pwdhostnameはゲストOSのホスト名を表示します。コンソールで開いたVMと一致するか確認してください。whoamiはアカウント名、idは数値のユーザーID(UID)、グループID、所属グループを表示します。UIDが0ならrootです。通常ユーザーに戻って演習を続けてください。catはテキストファイルを表示します。/etc/os-releaseのIDとVERSION_IDを確認すると、主な手順ではUbuntuと24.04、代替手順ではRockyと9.xが表示されるはずです。uname -rは実行中のカーネルバージョンを表示します。ディストリビューションのリリース番号とは異なります。pwdは現在の作業ディレクトリを表示します。
説明用のプロンプトはlearner@client:~$です。アカウント、マシン、現在のディレクトリ、プロンプト記号の順に並びます。~はホームディレクトリを表します。通常、$は一般ユーザー、#はrootを示しますが、プロンプトは変更できます。idの結果を確認してください。プロンプト記号は入力しないでください。コマンドブロックの行頭にある#は、Bashの説明用コメントです。
コマンドを読んでから実行する
ls -la notesでは、lsがコマンド、-lと-aがオプション、notesがパス引数です。-lは詳細表示、-aはドットで始まる名前を含むすべての項目の表示を指定します。Enterキーでコマンドを実行し、Tabキーで入力途中のパスを補完し、上矢印キーで前のコマンドを呼び出せます。呼び出したコマンドは、Enterを押す前に内容を確認してください。
Linuxのパスは/を起点とするツリー構造です。/home/learnerのように/から始まるパスは絶対パス、notes/draft.txtのように作業ディレクトリから始まるパスは相対パスです。.は現在のディレクトリ、..はその親ディレクトリを表します。ここで使う一般的なLinuxファイルシステムでは、Notesとnotesは別の名前です。
/etcにはシステム設定、/var/logには多くのログ、/homeには通常ユーザーのホームディレクトリが置かれます。システム情報は読み取りますが、練習用ファイルは新しく作る自分専用ディレクトリの下にだけ書き込みます。
練習用VM、通常ユーザー、組み込みヘルプとローカルヘルプ:
help cd
ls --help
man lscdはシェルの組み込みコマンドなので、Bashのhelpで説明を確認できます。--helpはコマンドの使い方を表示します。任意のmanプログラムとマニュアルページがインストールされていれば、man lsでページャー上にマニュアルを開けます。Spaceで先へ進み、/permissionで検索し、qで終了します。manが使えない場合も、ls --helpと参考資料を利用できます。Ctrl+Cは入力途中のシェル行を取り消したり、多くのフォアグラウンドプログラムを中断したりします。どのコマンドでも「保存して終了」できる万能キーではありません。
パッケージの準備: ディストリビューションを1つ選ぶ
パッケージ管理を使うと、設定済みのリポジトリから、必要なライブラリも含めてエディターを取得できます。まず、すでにインストールされているものを確認しましょう。ここで使う照会はローカルのパッケージデータベースを参照するため、リポジトリへの接続も権限昇格も必要ありません。
Ubuntuの練習用VMのみ、通常ユーザー:
dpkg-query -W bash coreutils nano vim-tiny iproute2Rockyの練習用VMのみ、通常ユーザー:
rpm -q bash coreutils nano vim-minimal iprouteインストール済みパッケージごとに名前とバージョンが表示されます。「未インストール」や「パッケージが見つからない」というメッセージは、不足しているパッケージを示します。システム全体を入れ替える指示ではありません。異なるパッケージが同じコマンドを提供することもあるため、コマンド自体も直接確認します。
いずれかの練習用VM、通常ユーザー:
command -v nano
command -v vi/usr/bin/viのような実行ファイルのパスが表示されれば、そのコマンドは利用できます。何も表示されない場合は、シェルのコマンド検索パス内に見つかりませんでした。
エディターがなければ、以下は任意のゲストOS準備作業です。すでに動作している管理接続から、該当するディストリビューションのブロックだけを使ってください。まず、インストール前の状態全体を復元できるよう、ハイパーバイザーでbefore-cli-editorsなどの名前を付けてVMスナップショットを取得します。提案されるトランザクションを読み、想定したエディターと依存パッケージだけが対象か確認してください。想定外の削除やアップグレードが含まれる場合はnを入力して中止します。
Ubuntuの練習用VMのみ、通常ユーザーがsudoを実行:
sudo apt update
sudo apt install nano vim-tinyapt updateは利用可能なパッケージの一覧を更新します。インストール済みソフトウェア全体をアップグレードするわけではありません。リポジトリエラーなしで一覧を更新できた場合に限り、インストールへ進んでください。apt installは指定されたパッケージをインストールし、依存関係も解決します。apt upgradeの目的はインストール済みパッケージのアップグレードです。このレッスンでは必要ありません。
Rockyの練習用VMのみ、通常ユーザーがsudoを実行:
sudo dnf install nano vim-minimalDNFはRPMパッケージの依存関係を解決し、必要に応じてリポジトリのメタデータを更新します。Rocky 9は使い慣れたコマンドとの互換性のためyumも提供しますが、このコースではdnfを使います。同じゲストOSで両方のコマンド系統を実行したり、例を動かすためだけにサードパーティーのリポジトリを追加したりしないでください。
準備後、ローカルのパッケージ照会とcommand -vによる確認をもう一度行います。パッケージをダウンロードできない場合は、管理接続またはリポジトリへのアクセスに問題があります。次のレッスンで導入する、分離されたラボ用NICとは無関係です。
復旧: apt removeやdnf removeでパッケージを削除できますが、インストールを完全に逆戻りさせる操作ではありません。依存関係の変更、キャッシュ、ログ、一部の設定が残る場合があります。以前からインストールされていたエディターは削除しないでください。後続のレッスンでも使うため残しておくか、ゲストOSを使い終えたらbefore-cli-editorsスナップショットを復元します。スナップショットを戻すと、その取得後に行った作業もすべて失われます。メモ帳の後片付けにパッケージ削除やautoremoveは必要ありません。
一意な練習用ディレクトリにメモ帳を作る
まず、演習用の境界となるディレクトリを作ります。$HOMEはすでにホームディレクトリを表すため、再定義しないでください。LAB_DIRはこのレッスン用の新しい変数です。$(...)はコマンドの出力を取り込み、二重引用符で囲むと、空白を含むパスもひとまとまりに扱えます。
練習用VM、通常ユーザー:
LAB_DIR=$(mktemp -d "$HOME/network-beginner-cli.XXXXXX")
printf '%s\n' "$LAB_DIR"mktemp -dは新しいディレクトリを作り、6つのXを一意な文字列に置き換えます。printf '%s\n'は保存したパスと改行を表示します。/home/learner/network-beginner-cli.aB12Cdのようなパスが表示されますが、アカウント名と末尾の文字列は自分のものになります。実際のパスを記録してから続けてください。作成に失敗するか表示が空なら停止し、ファイル操作の演習を実行しないでください。
同じVMとシェル、通常ユーザー:
cd -- "$LAB_DIR"
pwd
ls -lapwdの結果が記録したディレクトリと一致する場合だけ続けます。cdは相対パスの起点を変えますが、ファイルを移動するわけではありません。--はオプションの解析を終了します。最初の一覧には.と..が表示され、新しいディレクトリは自分のアカウントだけがアクセスできます。
同じVMとシェル、そのディレクトリ内、通常ユーザー:
mkdir notes archive
touch notes/draft.txt notes/vi.txt
ls -l notes
cd notes
pwd
cd ..
pwdmkdirはディレクトリを作成します。touchは、まだ存在しない2つのファイルを空の状態で作成します。すでにあるファイルに実行すると、内容を空にするのではなくタイムスタンプを更新します。どちらのファイルも最初はサイズが0です。最初のpwdは末尾が/notesになり、次は練習用ディレクトリのルートに戻ります。mkdir、touch、cdは成功しても通常は何も表示しません。何も表示されないのは正常です。lsやpwdで結果を確認してください。
編集、保存、コピー、移動
同じ練習用VM、通常ユーザー、練習用ディレクトリのルート:
nano notes/draft.txt次の2行はシェルではなく、エディター内で入力します。
I am learning Linux networking.
This file belongs to my practice notebook.nanoのヘルプバーにある^OはCtrl+Oを表し、^とOの文字を入力する意味ではありません。Ctrl+Oを押し、ファイル名を確認してEnterを押すと保存されます。Ctrl+Xで終了します。最後に保存してからの編集内容を破棄するには、Ctrl+Xを押し、保存確認でNを選びます。ローカライズされたプロンプトでは、表示されるキーが異なる場合があります。Yを選ぶと、ファイル名を確認した後に変更が書き込まれます。
シェルに戻り、同じVM、通常ユーザー:
cat notes/draft.txt
cp -i -- notes/draft.txt notes/copy.txt
mv -i -- notes/copy.txt archive/saved.txt
ls -l notes archivecatで保存内容を表示できます。cpは元のファイルを残したまま、内容を別のファイルにコピーします。mvはファイルを移動または改名します。notes/copy.txtはarchive/saved.txtになります。どちらのコマンドも-iを付けると、宛先に既存ファイルがある場合に確認を求めます。想定外ならnと答えてください。notesにはdraft.txtとvi.txt、archiveにはsaved.txtができるはずです。この保存コピーがあれば、後で編集を誤っても下書きを復元できます。
復元する場合は、同じ練習用ディレクトリのルートで通常ユーザーとしてcp -i -- archive/saved.txt notes/draft.txtを実行します。新しい内容を破棄するつもりがあるときだけ、上書きを確認してください。
同じ練習用VM、通常ユーザー、練習用ディレクトリのルート:
vi notes/vi.txtこれらのゲストOSでは、viは一般にVim系の実装を起動します。起動時は、キーがコマンドとして働くノーマルモードです。iを押して挿入モードに入り、I can save and exit vi.と入力してからEscを押し、ノーマルモードに戻ります。
| Escを押した後のキー | 結果 |
|---|---|
:w、Enter | 保存して編集を続ける |
:wq、Enter | 保存して、この単一ファイルのセッションを終了する |
:q、Enter | 未保存の変更がなければ終了する |
:q!、Enter | 保存後の変更を破棄して終了する |
:wqを練習したら、ファイルを開き直し、iを押してから単語を追加し、Esc、:q!、Enterの順に押して追加分を破棄します。シェルに戻ってcat notes/vi.txtを実行すると、保存した一文だけが表示されるはずです。コロンから始まるコマンドはBashではなく、viの中で入力します。:qで「変更後に保存されていません」というメッセージが出るのは、未保存の作業を保護するためです。
権限とsudo
すべてのファイルには所有者とグループがあります。基本の権限セットは、所有者、グループ、その他のユーザーの順に並びます。説明用の出力-rw-r--r--では、最初の-が通常ファイルを表し、続く3組は順に、所有者が読み書きできる、グループが読み取れる、その他が読み取れることを表します。ディレクトリはdで始まります。追加の.や+は、セキュリティメタデータまたはACLを示す場合があります。こうした追加制御は、最初の演習では扱いません。
ファイルの場合、rは内容の読み取り、wは内容の変更、xは実行を許可します。ディレクトリでは、rは名前の一覧表示、xは通過とアクセス、wは通過権限と組み合わせて項目の作成・削除を許可します(ほかの制御にも従います)。ファイルの書き込み権限だけでは、そのディレクトリエントリーを削除できるかどうかは決まりません。
同じ練習用VM、通常ユーザー、練習用ディレクトリのルート。変更するのは下書きだけ:
ls -l notes/draft.txt
LAB_DRAFT_MODE=$(stat -c '%a' notes/draft.txt)
printf '%s\n' "$LAB_DRAFT_MODE"
chmod 600 notes/draft.txt
ls -l notes/draft.txtstatで元の数値モードを記録しておきます。この値を保管してください。各組では読み取りが4、書き込みが2、実行が1です。したがって600は、所有者が4+2、グループが0、その他が0です。表示は-rw-------になるはずです。親となる練習用ディレクトリ自体がすでにアクセスを制限しているため、実際の秘密ファイルを作るのではなく、権限表示を読み取る練習です。
同じVMとシェル、通常ユーザー、ここで元に戻す:
chmod "$LAB_DRAFT_MODE" notes/draft.txt
stat -c '%a' notes/draft.txt結果の数値は記録した元のモードと一致するはずです。すべてのシステムで元の値が644だったと決めつけず、記録した値に戻します。自分が所有するこのファイルのモードを変更するのにsudoは必要ありません。
sudoは、許可されたコマンドを既定ではrootなどの別ユーザーとして実行します。通常は自分のアカウントのパスワードを求めます。入力しても画面に表示されないことがあります。「Permission denied」を何でも解決する万能コマンドではありません。
練習用VM、通常ユーザー、権限昇格した照会でユーザーを確認:
sudo whoami
whoami最初にroot、次に通常ユーザー名が表示されるはずです。権限がない場合は停止し、コース用に準備したアカウントを使ってください。考えずにsudoersを編集してはいけません。メモ帳への書き込みに失敗したら、まず該当ディレクトリについてpwd、id、ls -ldを確認します。広い範囲に対する再帰的な権限変更は避けてください。原因を分かりにくくし、無関係なファイルにも影響します。
プログラム、プロセス、サービス、ログ
プログラムはディスク上に保存されたソフトウェアです。プロセスは、プロセスID(PID)、所有者、メモリを持つ実行中のインスタンスです。プログラムをインストールしても、必ず実行が始まるわけではありません。サービスは、systemdなどによりバックグラウンドで管理される処理です。1つのサービスが複数のプロセスを持つ場合もあります。
練習用VM、通常ユーザー、確認のみ:
ps -p $$ -o pid,ppid,user,comm
ps -p 1 -o pid,comm$$はこのBashシェルのPIDに展開されます。-pはPIDを、-oは表示する列を指定します。PPIDは親プロセスのPID、COMMはコマンド名です。起動済みのゲストOSでは、最初の結果にシェル、PID 1としてsystemdが表示されるはずです。PID 1以外の番号は環境によって異なります。PID 1がsystemdでなければ、サービスの演習を始める前に通常のVM環境へ戻ってください。
練習用VM、通常ユーザー、実行時間を限ったフォアグラウンドプロセス:
sleep 30sleepの実行中はプロンプトが戻ってきません。Ctrl+Cを押して中断すればプロンプトに戻れます。または30秒後に終了するまで待ちます。片付けが必要なファイルやサービス設定はありません。これは、知らないプロセスを終了するより安全な練習です。killは指定されたプロセスにシグナルを送ります。文書からコピーしたPIDを使うと、他の人の作業を対象にしてしまうことがあります。
systemdは.serviceユニットなどのユニットを管理します。journalはsystemdとサービスからのメッセージを収集します。両方のゲストOS手順で使うログサービスから確認しましょう。
練習用VM、通常ユーザー、確認のみ:
systemctl status systemd-journald.service --no-pager
systemctl is-active systemd-journald.service
systemctl is-enabled systemd-journald.servicestatusのLoadedはユニット定義が見つかったか、Activeは現在の状態、Main PIDは該当する場合のメインプロセスを示します。通常、journalサービスはアクティブです。is-enabledがstaticを返すことがあります。通常の有効化セクションがないという意味であり、サービスが壊れているわけではありません。依存関係や起動条件を通じてユニットが起動する場合があります。
| 覚えておく操作 | 変更するもの |
|---|---|
start / stop | 現在の実行状態 |
restart | 停止と起動のサイクル。利用者に影響することがあります |
enable / disable | 多くは起動時に使われる有効化リンク。実行中サービスを開始・停止する操作ではありません |
enable --now | 有効化すると同時に起動 |
reload | 対応するサービスに設定の再読み込みを依頼 |
これらは後の管理作業で学ぶ概念です。この演習では、ログサービスやネットワークサービスを停止・再起動しないでください。有効化済みのサービスが失敗している場合も、無効化されたサービスが実行中の場合もあります。実行状態と有効化状態を分けて確認します。
練習用VM、通常ユーザーがsudoを使ってシステムログを読む:
sudo journalctl -b -u systemd-journald.service -n 20 --no-pager-bは現在の起動中に記録された内容、-uはユニット、-n 20は条件に一致した最新20件を指定します。--no-pagerを付けると、ページャーを開かずシェルに戻ります。タイムスタンプ、マシン、プロセスまたはユニット、メッセージをあわせて読みます。journalの記録はイベントの証拠ですが、必ずしもエラーではありません。一致する保存済みメッセージがないだけの場合もあります。十分な権限がなければ、表示できるjournalの範囲が限られることもあります。サービスが失敗したと結論づける前にstatusの結果と比べてください。
完了確認と後片付け
メモ帳を削除する前に、ルートディレクトリでcatとls -lを使い、次の点を確認します。
notes/draft.txtとarchive/saved.txtに自分の2文があり、notes/copy.txtは存在しない。notes/vi.txtには保存した文が残り、破棄した余分な単語は含まれない。- 下書きのモードが記録した元の値に戻り、それぞれの権限3組を説明できる。
- ゲストOSのディストリビューション、実行中のカーネル、通常アカウント、シェルのPID、journaldの稼働状態を混同せずに識別できる。
- パッケージ一覧の更新、サービスの起動、有効化がそれぞれ異なる操作である理由を説明できる。
ここで作成したファイルだけを削除します。別のシェルを開いた場合、変数は自動では引き継がれません。LAB_DIRに記録した正確なパスを設定し、その中身を確認してから続けてください。末尾の文字列を推測したり、ワイルドカードですべてのディレクトリを選択したりしないでください。
練習用VM、通常ユーザー、記録したLAB_DIRを使用:
cd -- "$LAB_DIR"
pwd
ls -la notes archive自分の練習用ディレクトリであることを確認してから実行します。
rm -i -- notes/draft.txt notes/vi.txt archive/saved.txt
rmdir -- notes archive
cd -- "$HOME"
rmdir -- "$LAB_DIR"rm -iは名前を指定したファイルごとに確認を求めます。自分の練習用ファイルだけに応答してください。rmdirは空のディレクトリを削除します。失敗した場合は残ったファイルを確認します。エディターのバックアップやswapファイル、未完了のcopy.txtなどが残っていれば、自分が作成したものと確認できたファイルだけを正確な名前で削除してください。再帰削除には切り替えないでください。一部の後片付け後にファイルがすでになくても、削除範囲を広げてはいけません。
練習用VM、通常ユーザー、後片付けを確認:
test ! -e "$LAB_DIR"
echo $?
unset LAB_DIR LAB_DRAFT_MODE
sudo -ktest ! -eは記録したパスがもう存在しないか調べます。echo $?は直前の確認が成功したことを示す0を表示するはずです。1なら、パスはまだ存在します。unsetはレッスン用の変数を削除し、sudo -kはキャッシュされたsudo認証を無効にします。次に権限昇格したコマンドを実行すると、再びパスワードを求められる場合があります。ゲストOSのシステム設定は確認しただけです。任意でインストールしたエディターは、前述のスナップショット復元を選ばない限り残ります。
参考資料と追加の読み物
一次資料は2026年9月14~15日に確認しました。以下はここで使うツールの説明資料であり、演習の前提条件でも代替手順でもありません。
- Debian: Debianについて: ディストリビューション、カーネル、ユーティリティ、パッケージ。
- GNU C Library入門: システムライブラリが提供する機能。
- Debianリファレンス、GNU/Linuxチュートリアル: シェル、ファイルシステム、権限、プロセス。
- GNU Coreutilsマニュアル、特にmktemp: ファイル操作と専用の練習用ディレクトリ。
- GNU nanoのショートカットとVimの最初の手順: エディターモード、保存、終了。
- Ubuntu Serverのパッケージ管理とRocky Linux 9 DNFガイド: 2つのパッケージ管理手順。
- systemd systemctlマニュアルとjournalctlマニュアル: 実行状態、有効化、ログの絞り込み。
アドレスとインターフェイスへ進む前に、レッスンのクイズで理解度を確認してください。