情報工学徹底攻略実験とレポートの私的学習ガイド

はじめに指導書の「付録」に対応読む目安 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 # 詳細表示 と書かれている場合、# 以降は説明なので打たなくてかまいません

困ったときのキー操作

表1ターミナルでよく使うキー
キーはたらき使う場面
Tabファイル名やコマンド名の続きを自動で補う/etc/net まで打って Tab → /etc/netplan/。打ち間違いが減る
↑ ↓前に打ったコマンドを呼び出す同じコマンドをもう一度実行したいとき
Ctrl+C実行中のコマンドを中断するping が止まらない、入力の途中でやめたいとき
q1画面ずつの表示(ページャ(less))から抜けるsystemctl status の後にプロンプトが戻ってこないとき
Ctrl+L画面をきれいにする(clear と同じ)スクリーンショットを撮る前に
Ctrl+Shift+C / VWindows 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/                   ← ログファイルの置き場
図1この実験で扱うディレクトリとファイル。名前の後ろの / はディレクトリ(フォルダ)であることを示す。

絶対パスと相対パス

絶対パスは / から始まる「住所」で、どこにいても同じ場所を指します(例:/etc/ssh/sshd_config)。相対パスは今いる場所からの「道順」です(例:./docs/lab1.md、../lab2.md)。

.
今いるディレクトリ
..
1つ上のディレクトリ
~
自分のホームディレクトリ(~)。t3admin なら /home/t3admin
/
区切りの文字。先頭にあるときはルートディレクトリ

名前が . で始まるファイル(.ssh など)は「隠しファイル」で、ls だけでは表示されません。ls -a または ls -la で見えるようになります。

WindowsとLinuxのパスの違い

表2同じ「SSHの秘密鍵」の場所を、それぞれのOSで書いた例
OS書き方
Linux/home/t3admin/.ssh/id_ed25519
macOS/Users/user/.ssh/id_ed25519
WindowsC:\Users\あなた\.ssh\id_ed25519(PowerShellでは $env:USERPROFILE\.ssh\id_ed25519 とも書ける)

Linuxでは区切りが /、Windowsでは \ です。また、Linuxは大文字と小文字を区別するので、Index.html と index.html は別のファイルになります。

まず覚えるコマンド

移動と確認

表3移動・確認のコマンド
コマンド意味
pwd今いるディレクトリを表示する(print working directory)
lsファイルとディレクトリの一覧を表示する(list)
ls -la隠しファイルも含めて、権限や大きさなどの詳細つきで表示する
cd /path/to/dir指定したディレクトリへ移動する(change directory)
cd ~ホームディレクトリへ戻る
cd ..1つ上のディレクトリへ移動する

ファイルの操作

表4ファイル操作のコマンド
コマンド意味
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 で、今どこにいて何を消そうとしているのかを確かめてください。

検索とログの確認

パイプとリダイレクト

パイプ(|) | は、左のコマンドの出力を右のコマンドに渡す記号です。リダイレクトは、出力を画面ではなくファイルへ送る記号です。

Ubuntuサーバー ターミナルbash
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つ並べます。下の計算機で確かめてみてください。

パーミッション計算機

読む r(4)書く w(2)実行 x(1) 所有者 グループ その他
数字で書くと644 ls -l の表示-rw-r--r-- 変更するコマンドchmod 644 ファイル名 意味所有者:読む・書く / グループ:読む / その他:読む
表6この実験で出てくる権限
数字表示意味使う場所
600rw-------所有者だけが読み書きできる~/.ssh/authorized_keys(2日目)
700rwx------所有者だけが中に入れる~/.ssh ディレクトリ(2日目)
644rw-r--r--所有者は読み書き、ほかの人は読むだけWebで配信するHTML(4日目)
755rwxr-xr-x所有者は何でも、ほかの人は読む・実行するシェルスクリプト(4日目)

ファイルの持ち主(所有者とグループ)は chown と chgrp で変えます。どの変更も -R をつけるとディレクトリの中身すべてに及ぶので、対象を間違えると広い範囲に影響します。

rootとsudo

Linuxには、どんな操作でもできる管理者ユーザーrootがいます。何でもできるということは、打ち間違い1つでシステムを壊せるということでもあります。そこでUbuntuでは、普段は一般ユーザー(この実験では t3admin)で作業し、管理者の権限が必要な操作だけ、コマンドの前にsudoをつけて実行します。

Ubuntuサーバー ターミナルbash
sudo apt update
  • 初めて使うときは [sudo] password for t3admin: と聞かれるので、自分のパスワードを(見えないまま)入力します
  • 一度入力すると、しばらくの間(Ubuntuの初期設定では15分)は聞かれなくなります
  • sudo を使った記録は、いつ・誰が・何を実行したかがログに残ります
  • Permission denied(権限がありません)と言われたら、sudo のつけ忘れを疑います。ただし、何にでも sudo をつけるのではなく、管理者の操作が必要なものだけにつけます

Ubuntuでは、root で直接ログインできないように初期設定されています。プロンプトの末尾が # になっていたら root で操作しているので、特に注意してください。

ターミナルのエディタ:nano と vim

設定ファイルは、ターミナルの中で動くテキストエディタで編集します。指導書では主に nano を使います。

nano(初心者向け)

Ubuntuサーバー ターミナルbash
sudo nano /etc/hosts
表7nano の操作(画面下の ^ は Ctrl キーの意味)
操作キー
文字の入力そのまま打つ。矢印キーで移動
保存Ctrl+O → ファイル名の確認が出るので Enter
終了Ctrl+X(保存していないと「Save modified buffer?」と聞かれるので、保存するなら Y、しないなら N)
検索Ctrl+W
1行切り取りCtrl+K
貼り付けCtrl+U

設定ファイルの多くは管理者のものなので、sudo nano で開きます。sudo をつけずに開くと、編集はできても保存するときに Permission denied になります。

vim(高機能、ただしクセがある)

vim には「命令するモード(ノーマルモード)」と「文字を打つモード(挿入モード)」があります。起動した直後は命令モードなので、文字を打っても入力されず、思わぬ命令が実行されます。

表8vim の最低限の操作
操作キー
文字を打つモードへi
命令モードへ戻るEsc
保存して終了命令モードで :wq → Enter
保存せずに終了命令モードで :q! → Enter
検索命令モードで /文字列 → Enter
1行削除命令モードで dd

vim から抜けられなくなったら

Esc を2〜3回押してから :q! と打ち、Enter を押します。変更は保存されずに終了します。

Windows・macOSとの違い

表9実験で気をつけたいOSごとの違い
項目LinuxWindows
シェルbash(macOSは zsh だが書き方はほぼ共通)PowerShell
コマンド名の例ls、cp、mv、catGet-ChildItem、Copy-Item、Move-Item、Get-Content(ls などの短い別名も使える)
管理者の権限コマンドの前に sudo「管理者として実行」でターミナルを開き直す
改行コードLFCRLF
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の版を確かめましょう。

Windows 11 ターミナルpowershell
$PSVersionTable.PSVersion

Major の欄が 5 なら Windows PowerShell 5.1、7 なら PowerShell 7 です。このガイドの作成時に、Windows 11 上の両方の版で試した結果は次のとおりです。

表10指導書の書き方がPowerShellの版によってどう動くか(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 サービス名 で、何が起きたかを読む(トラブル対処集)

あなたの番号を設定

学生番号の下2桁を入れると、このサイトのコマンド例に出てくるIPアドレスやVM IDが、あなた用の値に置き換わります。値はこのブラウザの中だけに保存され、どこにも送信されません。