はじめに指導書の「付録」に対応読む目安 30分
Linux操作の基本
コマンドで操作するのが初めてでも、画面の読み方と最低限の決まりごとを押さえれば怖くありません。指導書の付録の内容に、つまずきやすい点の説明を足しました。
ターミナルとシェル
コマンドを打ち込む黒い(または白い)画面をターミナルと呼びます。ターミナルはただの「窓」で、打ち込んだ文字を読み取って実行しているのは、中で動いているシェルというプログラムです。
- Windows 11:スタートメニューの「ターミナル」アプリ(Windows Terminal)を開くと、PowerShellというシェルが動いています
- Ubuntu:ログインするとbashというシェルが動いています
同じ ls というコマンドでも、PowerShellが受け取るかbashが受け取るかで、使えるオプションや結果の見た目が違います。だからこそ、今どちらに打ち込んでいるのかを常に意識する必要があります。
プロンプトの読み方
コマンドを打つ前に、行の先頭の表示(プロンプト)を見る習慣をつけてください。プロンプトは「誰として、どの機械の、どこにいるか」を教えてくれます。
Ubuntu(bash)のプロンプト
t3adminユーザー名(誰として操作しているか)@区切りt3lab-XXホスト名(どの機械か):~今いる場所。~ はホームディレクトリ$一般ユーザーの印(root なら #)このプロンプトは、Proxmoxのコンソールで見ても、WindowsのターミナルからSSHで入って見ても同じです。cd /etc で移動すると t3admin@t3lab-XX:/etc$ のように「今いる場所」が変わります。
Windows(PowerShell)のプロンプト
PSPowerShellが動いている印C:\Users\あなた今いるフォルダ>入力待ちの印WindowsのターミナルからSSHでUbuntuに入ると、同じ窓の中のプロンプトが PS C:\...> から t3admin@t3lab-XX:~$ に切り替わります。exit と打つとUbuntuから抜けて、Windowsのプロンプトに戻ります。窓の見た目は同じなので、プロンプトだけが頼りです。
パスワードを打っても何も表示されない
Ubuntuのログインや sudo、SSHでパスワードを入力するとき、画面には文字も「●」も一切表示されません。壊れているのではなく、のぞき見されても桁数すら分からないようにする仕様です。見えないまま最後まで打って Enter を押してください。
コマンドの形
コマンドは「何をするか」「どんなふうに」「何に対して」を、半角スペースで区切って並べます。
journalctlコマンド名:ログを読む-u systemd-timesyncdオプション:このサービスのログだけ-n 30オプション:最新の30行だけ- 大文字と小文字は別物:
-nと-Nは違うオプションです - スペースの有無が意味を変える:
-n 30を-n30と書いてもよい場合もありますが、慣れるまでは指導書のとおりに打ちます - 全角文字を混ぜない:日本語入力がオンのまま打った全角スペースや全角の記号(
-:など)は、見た目が似ていても別の文字なのでエラーになります。コマンドを打つときは日本語入力をオフにします #から後ろはコメント:指導書の付録のようにls -la # 詳細表示と書かれている場合、#以降は説明なので打たなくてかまいません
困ったときのキー操作
| キー | はたらき | 使う場面 |
|---|---|---|
| Tab | ファイル名やコマンド名の続きを自動で補う | /etc/net まで打って Tab → /etc/netplan/。打ち間違いが減る |
| ↑ ↓ | 前に打ったコマンドを呼び出す | 同じコマンドをもう一度実行したいとき |
| Ctrl+C | 実行中のコマンドを中断する | ping が止まらない、入力の途中でやめたいとき |
| q | 1画面ずつの表示(ページャ(less))から抜ける | systemctl status の後にプロンプトが戻ってこないとき |
| Ctrl+L | 画面をきれいにする(clear と同じ) | スクリーンショットを撮る前に |
| Ctrl+Shift+C / V | Windows Terminalでのコピー/貼り付け | SSH接続中にコマンドを貼り付けるとき |
Windows Terminalでは、多くの環境で Ctrl+C/Ctrl+V でもコピー/貼り付けができます。ただし、文字を選択していないときの Ctrl+C は「中断」の意味になります。
1日目はコマンドを手で打つ
Proxmoxのコンソール(ブラウザに映るUbuntuの画面)では、Windowsでコピーした文字を貼り付けるのが難しく、基本は手で打つことになります。2日目にSSHで接続できるようになると、Windowsのターミナルからコピー&ペーストできるようになり、ぐっと楽になります。
ファイルの場所(パス)
Linuxのファイルは、ルートディレクトリ / を根元とする1本の木のように整理されています。ファイルの場所を表す文字列をパスと呼びます。この実験で触る場所を図にすると次のようになります。
/ ← ルートディレクトリ(すべての始まり) ├── etc/ ← 設定ファイルの置き場 │ ├── netplan/ ← ネットワークの設定(1日目) │ ├── systemd/timesyncd.conf ← 時刻合わせの設定(1日目) │ ├── hosts ← 名前とIPの対応メモ(1日目) │ ├── ssh/sshd_config ← SSHサーバーの設定(2日目) │ └── bind/ ← DNSサーバーの設定(付録2) ├── home/ │ └── t3admin/ ← あなたのホームディレクトリ(~) │ └── .ssh/authorized_keys ← 登録した公開鍵(2日目) ├── opt/ ← 追加ソフトの置き場 │ ├── compose-demo/ ← 3日目 │ ├── nginx/ ← 4〜7日目(html/ log/ conf.d/) │ └── open-webui/ ← 6・7日目 └── var/log/ ← ログファイルの置き場
絶対パスと相対パス
絶対パスは / から始まる「住所」で、どこにいても同じ場所を指します(例:/etc/ssh/sshd_config)。相対パスは今いる場所からの「道順」です(例:./docs/lab1.md、../lab2.md)。
.- 今いるディレクトリ
..- 1つ上のディレクトリ
~- 自分のホームディレクトリ(~)。t3admin なら
/home/t3admin /- 区切りの文字。先頭にあるときはルートディレクトリ
名前が . で始まるファイル(.ssh など)は「隠しファイル」で、ls だけでは表示されません。ls -a または ls -la で見えるようになります。
WindowsとLinuxのパスの違い
| OS | 書き方 |
|---|---|
| Linux | /home/t3admin/.ssh/id_ed25519 |
| macOS | /Users/user/.ssh/id_ed25519 |
| Windows | C:\Users\あなた\.ssh\id_ed25519(PowerShellでは $env:USERPROFILE\.ssh\id_ed25519 とも書ける) |
Linuxでは区切りが /、Windowsでは \ です。また、Linuxは大文字と小文字を区別するので、Index.html と index.html は別のファイルになります。
まず覚えるコマンド
移動と確認
| コマンド | 意味 |
|---|---|
pwd | 今いるディレクトリを表示する(print working directory) |
ls | ファイルとディレクトリの一覧を表示する(list) |
ls -la | 隠しファイルも含めて、権限や大きさなどの詳細つきで表示する |
cd /path/to/dir | 指定したディレクトリへ移動する(change directory) |
cd ~ | ホームディレクトリへ戻る |
cd .. | 1つ上のディレクトリへ移動する |
ファイルの操作
| コマンド | 意味 |
|---|---|
mkdir testdir | ディレクトリを作る。-p をつけると途中の階層もまとめて作り、すでにあってもエラーにしない |
touch sample.txt | 空のファイルを作る |
cp a.txt b.txt | コピーする。ディレクトリごとなら cp -r |
mv old.txt new.txt | 名前を変える、または移動する |
rm file.txt | 削除する。ディレクトリごとなら rm -r |
cat file.txt | ファイルの中身を表示する |
less file.txt | 長いファイルを1画面ずつ表示する(q で終了) |
rm にはゴミ箱がない
Linuxの rm で消したファイルは、ゴミ箱を経由せずにすぐ消えます。特に rm -r や rm -rf は、対象を間違えると取り返しがつきません。実行する前に pwd と ls で、今どこにいて何を消そうとしているのかを確かめてください。
検索とログの確認
| コマンド | 意味 |
|---|---|
grep "error" app.log | ファイルの中から、文字列 error を含む行を探す |
grep -R "Bind9" /etc | /etc の下のすべてのファイルから探す(R=再帰的に) |
find /etc -name "*.conf" | 名前が .conf で終わるファイルを探す(* は「何でもよい」) |
tail -n 50 /var/log/syslog | ファイルの最後の50行を表示する |
journalctl -u ssh -n 30 | sshサービスのログの最新30行を表示する |
パイプとリダイレクト
パイプ(|) | は、左のコマンドの出力を右のコマンドに渡す記号です。リダイレクトは、出力を画面ではなくファイルへ送る記号です。
cat access.log | grep 192.168.100.xxx # access.log のうち、そのIPを含む行だけ表示
echo "hello" > out.txt # out.txt を hello だけの内容で上書き
echo "world" >> out.txt # out.txt の最後に world を追記
command 2> err.log # エラーの出力だけを err.log に保存> と >> の取り違えに注意
> はファイルの中身を消してから書き込み、>> は末尾に足して書き込みます。2日目に公開鍵を登録する cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys を > で打つと、それまで登録してあった鍵が消えてしまいます。
ファイルの権限(パーミッション)
Linuxでは、ファイルごとに「誰が何をしてよいか」(パーミッション(権限))が決まっています。ls -l で確かめられます。
-rw-r--r-- 1 t3admin t3admin 1234 Sep 28 10:00 sample.txt-種類(- は普通のファイル、d はディレクトリ)rw-所有者の権限r--グループの権限r--その他の人の権限t3admin t3admin所有者とグループ1234大きさ(バイト)Sep 28 10:00最終更新の日時r は読む(read)、w は書く(write)、x は実行する(execute)、- はその権限がないことを表します。ディレクトリの場合、x は「中に入れる」という意味になります。
権限は数字でも表せます。r=4、w=2、x=1 として、許可するものを足した数字を、所有者・グループ・その他の順に3つ並べます。下の計算機で確かめてみてください。
パーミッション計算機
| 数字 | 表示 | 意味 | 使う場所 |
|---|---|---|---|
600 | rw------- | 所有者だけが読み書きできる | ~/.ssh/authorized_keys(2日目) |
700 | rwx------ | 所有者だけが中に入れる | ~/.ssh ディレクトリ(2日目) |
644 | rw-r--r-- | 所有者は読み書き、ほかの人は読むだけ | Webで配信するHTML(4日目) |
755 | rwxr-xr-x | 所有者は何でも、ほかの人は読む・実行する | シェルスクリプト(4日目) |
ファイルの持ち主(所有者とグループ)は chown と chgrp で変えます。どの変更も -R をつけるとディレクトリの中身すべてに及ぶので、対象を間違えると広い範囲に影響します。
rootとsudo
Linuxには、どんな操作でもできる管理者ユーザーrootがいます。何でもできるということは、打ち間違い1つでシステムを壊せるということでもあります。そこでUbuntuでは、普段は一般ユーザー(この実験では t3admin)で作業し、管理者の権限が必要な操作だけ、コマンドの前にsudoをつけて実行します。
sudo apt update- 初めて使うときは
[sudo] password for t3admin:と聞かれるので、自分のパスワードを(見えないまま)入力します - 一度入力すると、しばらくの間(Ubuntuの初期設定では15分)は聞かれなくなります
- sudo を使った記録は、いつ・誰が・何を実行したかがログに残ります
Permission denied(権限がありません)と言われたら、sudo のつけ忘れを疑います。ただし、何にでも sudo をつけるのではなく、管理者の操作が必要なものだけにつけます
Ubuntuでは、root で直接ログインできないように初期設定されています。プロンプトの末尾が # になっていたら root で操作しているので、特に注意してください。
ターミナルのエディタ:nano と vim
設定ファイルは、ターミナルの中で動くテキストエディタで編集します。指導書では主に nano を使います。
nano(初心者向け)
sudo nano /etc/hosts| 操作 | キー |
|---|---|
| 文字の入力 | そのまま打つ。矢印キーで移動 |
| 保存 | Ctrl+O → ファイル名の確認が出るので Enter |
| 終了 | Ctrl+X(保存していないと「Save modified buffer?」と聞かれるので、保存するなら Y、しないなら N) |
| 検索 | Ctrl+W |
| 1行切り取り | Ctrl+K |
| 貼り付け | Ctrl+U |
設定ファイルの多くは管理者のものなので、sudo nano で開きます。sudo をつけずに開くと、編集はできても保存するときに Permission denied になります。
vim(高機能、ただしクセがある)
vim には「命令するモード(ノーマルモード)」と「文字を打つモード(挿入モード)」があります。起動した直後は命令モードなので、文字を打っても入力されず、思わぬ命令が実行されます。
| 操作 | キー |
|---|---|
| 文字を打つモードへ | i |
| 命令モードへ戻る | Esc |
| 保存して終了 | 命令モードで :wq → Enter |
| 保存せずに終了 | 命令モードで :q! → Enter |
| 検索 | 命令モードで /文字列 → Enter |
| 1行削除 | 命令モードで dd |
vim から抜けられなくなったら
Esc を2〜3回押してから :q! と打ち、Enter を押します。変更は保存されずに終了します。
Windows・macOSとの違い
| 項目 | Linux | Windows |
|---|---|---|
| シェル | bash(macOSは zsh だが書き方はほぼ共通) | PowerShell |
| コマンド名の例 | ls、cp、mv、cat | Get-ChildItem、Copy-Item、Move-Item、Get-Content(ls などの短い別名も使える) |
| 管理者の権限 | コマンドの前に sudo | 「管理者として実行」でターミナルを開き直す |
| 改行コード | LF | CRLF |
| SSH鍵の場所 | ~/.ssh/ | $env:USERPROFILE\.ssh\ |
| 権限の仕組み | rwx を chmod、chown で直接設定 | NTFSのアクセス制御リスト(ACL)。表し方が別物 |
改行コードは、目に見えない「改行」の文字のことです。Windowsで作ったシェルスクリプトをLinuxで動かすと、この違いのせいで実行できないことがあります。Linuxの設定ファイルは、Linuxの上で nano などを使って編集するのが安全です。
WindowsのPowerShellで気をつけること
指導書では、Windowsで打つコマンドにも「bash(推奨)」の書き方が示されています。これは、PowerShellが ls や mkdir などのbashに似た別名を持っていることを利用したものです。ところが、Windows 11に最初から入っている Windows PowerShell 5.1 では、そのままでは動かない書き方があります。まず自分のPowerShellの版を確かめましょう。
$PSVersionTable.PSVersionMajor の欄が 5 なら Windows PowerShell 5.1、7 なら PowerShell 7 です。このガイドの作成時に、Windows 11 上の両方の版で試した結果は次のとおりです。
| 書き方 | PowerShell 5.1(Windows 11 標準) | PowerShell 7 |
|---|---|---|
ls ~/.ssh/id_ed25519* | 動く | 動く |
mkdir -p ~/.ssh | 動く | 動く |
scp ~/.ssh/id_ed25519.pub ... | ~ が自分のフォルダに置き換わらずに渡されるため、ファイルが見つからないことがある | 動く |
curl URL -d '{...}'(6日目) | エラーになる(curl が別のコマンドの別名になっている) | 動くが、日本語を含むデータは文字化けする |
迷ったら、Windows側の手順では「PowerShell(参考)」として書かれているほう($env:USERPROFILE を使う書き方)を使うのが確実です。6日目のAPIの呼び出し方は、6・7日目のページに確実に動く書き方を載せています。
実習での心得
- 意味の分からないコマンドは実行しない:このガイドや用語集で、何をするコマンドかを確かめてから打つ
- 消す前に確かめる:
rm -rfなどの取り返しのつかないコマンドは、pwdとlsで対象を確かめてから - 設定を変える前にコピーを取る:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bakのように、元のファイルを残しておくと、失敗しても戻せる - 大きな作業の前後にスナップショット:Proxmoxのスナップショットは、仮想マシンまるごとのセーブポイント
- sudo の前にもう一度読む:コマンドと対象のファイル名を、実行する前に見直す
- エラーが出たら、まずログ:
systemctl status サービス名とjournalctl -u サービス名で、何が起きたかを読む(トラブル対処集)