1-1. ターミナル基礎 - 移動・閲覧・作成
所要時間: 25-50分(がっつりなら2セッション分) ゴール: ホームディレクトリを自由に行き来し、構造を可視化できる コミット内容: 今日打ったコマンド履歴を
~/log/linux_day01.logに保存
大前提: ターミナルとは何か
ターミナルは「キーボードで OS に直接話しかける窓口」です。GUI(Finderとか)は、その裏で必ずターミナルと同じコマンドを叩いている。GUIで Cmd+N で新規フォルダを作る = 裏で mkdir が走っている。
エンジニアがターミナルを好む理由は3つ:
- GUIより速い - マウス移動なし、キー操作だけ
- 自動化できる - 「100個のファイルを連番でリネーム」みたいなのが一瞬
- リモートでも動く - Linux サーバーに ssh で繋いだら GUI は無い、ターミナルしかない
逆に言うと、バックエンドエンジニアにとってターミナルは「サーバーの中を見る唯一の手段」。これに慣れずに先に進むと、本番サーバーで何もできなくなる。だから最初にやる。
セッション①: 移動と閲覧(25分)
0. セッション録画スタート(必須)
# ログ保存先を作る
mkdir -p ~/log
# このコマンドから後の操作が全部記録される
script ~/log/linux_day01.log
scriptコマンドとはターミナルセッションを丸ごとファイルに録画するコマンド。1970年代から Unix に入っている古参。
使い所
- 学習: 自分が何を打ったか後で見返せる(今やってること)
- 障害対応: 「本番でどんなコマンド叩いたか」記録として残す(監査・再現用)
- 教育: 操作手順を後輩に渡す時、画面録画より軽くて検索可能
終了は
exit。終了するとファイルにすべての出力が保存されている。
1. 自分の現在地を知る
pwd # print working directory - 現在のフルパス
whoami # ログイン中のユーザー名
hostname # マシン名なぜ「現在地」を意識するのか
ターミナルは常に「どこかのディレクトリの中」にいる。これを「カレントディレクトリ(current directory)」と呼ぶ。ファイル操作はカレントディレクトリ基準で動く。
例:
rm tmp.txtを実行すると、「カレントディレクトリの tmp.txt」を削除する。違う場所にいたら違う tmp.txt を消す。だから「今どこ?」を確認するpwdは最重要コマンド。
pwdの中身: シェルが持っている環境変数$PWDの中身を表示しているだけ。echo $PWDでも同じ結果が出る。
whoamiのユースケース: SSH で複数サーバーに繋いでいて「あれ、今 root で繋いでる?一般ユーザー?」が分からなくなった時の保険。本番サーバーで root と一般を取り違えると事故る。
2. 中身を見る(ls の使い倒し)
ls # 中身一覧
ls -l # 詳細(権限・サイズ・日時)
ls -a # 隠しファイルも表示(. で始まるやつ)
ls -lh # human readable(KB/MB単位)
ls -lt # 更新日時順
ls -lS # サイズ順
ls -la ~/ # ホームディレクトリの詳細
lsの各オプションの意味と使い分け
-l(long): 「詳細表示」。権限・所有者・サイズ・更新日時が出る。本番サーバーでは99%これ。ls単独だとほぼ使わない-a(all): 隠しファイル(.で始まる)も出す。.git/.env.bashrcなどは設定ファイル系で重要-h(human): サイズを4.0K2.3M1.1Gのように読める形式に。-lと必ずセットで使う-t(time): 更新日時順。ログを追う時の鉄板。「直近で変更されたファイルどれ?」-S(size): サイズ順。「ディスク食ってるファイル特定」の入り口-r(reverse): 並び順を逆に。-trで「古い順」、-Srで「小さい順」実務でよく見る組み合わせ:
ls -lah(詳細+隠しも+読めるサイズ)。これだけ覚えればOKユースケース: アプリのエラーでログを調べる時、
/var/log/でls -ltすると最新のログが先頭に来る → 怪しいファイルがすぐ分かる
ls -lの出力、左から何の情報?実際に
ls -l ~/を打つとこんなのが出る:drwxr-xr-x@ 3 takato staff 96 May 14 16:02 Documents -rw-r--r--@ 1 takato staff 1234 May 14 16:00 memo.txt lrwxr-xr-x 1 takato staff 14 May 14 16:00 link.txt -> memo.txt各列の意味、左から順に:
列 例 意味 1 drwxr-xr-x@ファイルタイプ + 権限(後で詳しく) 2 3ハードリンク数(ディレクトリは中身の数。深く考えなくていい) 3 takato所有者(このファイルを作った人) 4 staffグループ(共有相手のグループ) 5 1234サイズ(バイト。 -lhだと1.2Kなどに)6 May 14 16:00最終更新日時 7 memo.txtファイル名(リンクなら -> 実体も付く)左端1文字目: ファイルタイプ
-: 通常のファイルd: ディレクトリl: シンボリックリンク(後の章で扱う)残り9文字: 権限。
rwxr-xr-xのように3文字ずつ3組
- 最初の3文字
rwx: 所有者(owner)の権限- 次の3文字
r-x: グループ(group)の権限- 最後の3文字
r-x: その他(others / world)の権限各3文字の意味:
r(read): 読めるw(write): 書ける(または削除できる)x(execute): 実行できる(ディレクトリの場合は「中に入れる」)-: その権限が無い読み方の例:
-rw-r--r--
- 通常ファイル
- 所有者: 読み書きOK、実行はNG
- グループ: 読みのみ
- その他: 読みのみ
いわゆる「自分しか書き換えられない、みんな読める」状態。設定ファイルでよくある。
末尾の
@: macOS 独自の「拡張属性あり」マーク。気にしなくていい詳細は Day3: パーミッション で扱う。今は「
rwxの3組セット」というイメージだけ掴めばOK
3. 移動する(cd)
cd ~ # ホームへ
cd / # ルートへ
cd .. # 1つ上
cd - # 直前のディレクトリへ戻る(神オプション)
cd ~/Documents # 絶対パスっぽく書く
cdの便利ワザ
- 引数なしの
cd=cd ~と同じ(ホームに戻る)。最速のホーム帰還cd -= 直前のディレクトリに戻る。「あ、戻りたい」が一発で叶う。何回叩いても2箇所を行き来するcd ..は「親ディレクトリ」、cd ../..で「親の親」と重ねられるユースケース: プロジェクトディレクトリで作業中、別フォルダの設定見たくなった →
cd /etc/nginx→ 設定確認 →cd -で元の場所へ即帰還絶対パスと相対パス
- 絶対パス:
/Users/takato/Documentsのように/から始まる完全アドレス- 相対パス:
Documentsのようにカレントディレクトリからの場所指定- 相対パスはタイプ量少ない、絶対パスはどこにいても確実。スクリプト書く時は絶対パス推奨(カレントが変わると壊れるため)
4. ファイルの中身をのぞく
cat ~/.zshrc # 全部出力
less ~/.zshrc # 1画面ずつ(qで抜ける、/で検索)
head -20 ~/.zshrc # 先頭20行
tail -20 ~/.zshrc # 末尾20行
tail -f /var/log/system.log # リアルタイム追従(Ctrl+Cで止める)「ファイルを見る」コマンドが4つもある理由
コマンド こういう時に使う cat短いファイル(設定ファイル、README)。中身を全部一気に標準出力へ流す less長いファイルを読む時。スクロール・検索ができる head先頭だけ見たい時。「このCSVのカラム名なんだっけ」「ログの最初は何?」 tail末尾だけ見たい時。ログ調査の基本。エラーは大体最後にある 最重要:
tail -f
-fは follow(追跡)の意味- ファイルに新しい行が追記されるのをリアルタイムで表示する
- 本番のエラー調査で一番使う:
tail -f /var/log/nginx/error.logでnginxのエラーを生中継- 止め方は Ctrl+C
catの落とし穴巨大なファイル(数百MB以上)に
catするとターミナルが固まる。サイズ分からないファイルはまずls -lhで確認 → 大きそうならlessかhead
lessの操作
- スペース /
f: 次のページb: 前のページg: 先頭へG: 末尾へ/検索語: 検索(n で次、N で前)q: 終了
5. ディレクトリ構造を見る(tree)
# tree が入ってなければ
brew install tree
# ホームのトップ階層だけ
tree -L 1 ~
# Documents の2階層まで
tree -L 2 ~/Documents
# 隠しファイル除外、ファイル数カウント
tree -L 2 --noreport ~/Documents
treeは標準コマンドではないmacOSにも多くのLinuxディストリにも初期では入っていない。
brew install treeで入れる外部ツール。なぜ重要かというと、プロジェクトの全体像を把握するのに最強だから。
README.mdにtreeの出力を貼って構造を説明している OSS プロジェクトは無数にある。
-L(level): 何階層まで掘るかの指定。-L 1だと直下のみ、-L 3だと3階層代替手段: tree がない環境では
find . -type dでディレクトリだけ列挙 →awkで整形 でそれっぽくできる。が、面倒なので素直にbrew installを推奨
セッション②: 作成と整理(25分)
6. ディレクトリ・ファイルを作る
# 作業用フォルダ作成
mkdir -p ~/learn/linux/day01
cd ~/learn/linux/day01
# 空ファイル
touch hello.txt
touch a.txt b.txt c.txt # 複数同時
# echo でテキスト書き込み
echo "Linux始めた" > memo.txt
echo "2行目" >> memo.txt # 追記
cat memo.txt
mkdir -pの-pって何?
-pは parents(親)の意味- 「途中の親ディレクトリも一緒に作る」オプション
例:
mkdir ~/a/b/c # NG: ~/a がなければエラー「親ディレクトリがない」 mkdir -p ~/a/b/c # OK: ~/a も ~/a/b も同時に作って、その下に c も作るもうひとつの便利な性質: 既に存在してもエラーにならない。スクリプトで「あれば使う、なければ作る」の処理に最適。明示的な if 文が要らない
実務ユースケース
- 新規プロジェクト構造を一発生成:
mkdir -p myproject/{src,tests,docs}/- デプロイスクリプトで「ログ置き場が無ければ作る」:
mkdir -p /var/log/myapp
touchは本来「タイムスタンプ更新」コマンド名前から「ファイル作成コマンド」だと思いがちだが、本来は ファイルの更新日時を「今」に書き換えるコマンド。
touch existing_file.txt # 既存ファイルの更新日時を今に変更 touch new_file.txt # ファイルが存在しなければ作る(副作用的に)「タイムスタンプ更新」って何の意味があるの?と思うが、実務では:
- ビルドツールに「このファイル更新したよ」と認識させる(make などは更新日時で再ビルド判断する)
- cron で「ファイルが古かったら再生成」のロジック
空ファイル作成は touch の副作用利用。厳密にはちょっと邪道な使い方だが、Unix 文化として定着している
echoは「画面に文字を出すだけ」のコマンド単独だと「ターミナルに文字表示」というだけの地味なコマンドだが、シェルスクリプトでは超頻出。
使われ方トップ3
- 変数の中身を確認:
echo $PATHで環境変数 PATH を見る- ファイルに書き込む:
echo "text" > file.txt(リダイレクト>でファイルに流す)- デバッグ出力: スクリプト中で
echo "ここまで来た"と入れて動作確認
>と>>の違い(事故注意)
>: ファイルを 上書き(既存内容を消して新規書き込み)>>: ファイルに 追記(既存内容の末尾に追加)これを混同すると「設定ファイル全部消した」事故が起きる。覚え方: 矢印1本は「全部入れ替え」、2本は「重ねがけ」
7. ちょっと深いディレクトリも一発で
mkdir -p ~/learn/linux/{day01,day02,day03}/{src,docs,tests}
tree -L 3 ~/learn/linux
{a,b,c}はコマンドではなく シェルのブレース展開
{a,b,c}はシェル(zsh / bash)がコマンドに渡す前に勝手に展開する記法。mkdir自体は何も知らない。mkdir -p ~/{a,b,c} # ↓ シェルが展開 mkdir -p ~/a ~/b ~/c # ↑ これが実際に実行されるネストもできる:
mkdir -p src/{api,web}/{handlers,models} # ↓ 展開後 mkdir -p src/api/handlers src/api/models src/web/handlers src/web/models実務ユースケース
- 新規プロジェクトの構造作成(上の
src/{api,web}/...パターン)- 連番ファイル作成:
touch report_{2024,2025,2026}_{01..12}.mdで年×月の36ファイル- バックアップ:
cp config.yml{,.bak}→cp config.yml config.yml.bakに展開
8. man で公式マニュアル
man ls # ls のマニュアル(qで抜ける)
man cd
man tree
man(manual) は すべてのコマンドの公式説明書インターネットがない時代から Unix に組み込まれている。今でもサーバー上で困った時のリファレンス。
使い方
- 起動:
man <コマンド名>- 操作は
lessと同じ(スペースで次へ、qで抜ける、/検索語で検索)- セクション分け: NAME / SYNOPSIS / DESCRIPTION / OPTIONS / EXAMPLES(末尾にあると神)
実用度: 正直 macOS では Claude/Google に聞く方が早いが、SSHしたLinuxサーバーには
manしかないことが多い。本番でネット使えない場面の保険として覚えておく同じ機能の代替:
--helpフラグ(例:ls --help)も多くのコマンドで使える。こっちの方が短くて読みやすい
9. 自分のホームディレクトリを可視化する課題
# 自分のホームを覗いてみる
tree -L 2 ~ | less観察課題(メモを残す):
- どこに何があるか把握できる?
- 不要そうなフォルダ・ファイルはある?
- 自分が散らかしてる場所は?
→ 見つけたことを下の「今日の発見」に書く
締め: コミットと振り返り(10分)
1. セッション録画を終了
exit # script コマンドから抜ける~/log/linux_day01.log に今日打った全コマンドが残ってる。
2. 今日の発見(このノートに追記)
- 学んで一番「へぇ」だったコマンド:
- 自分のホームディレクトリで気づいたこと:
- 詰まったところ:
- 明日やりたいこと:
3. デイリーノートにコピー
テンプレ を デイリー/2026-05-14.md のようにコピーして埋める。
チェックリスト
-
pwdlscdを使ってホームを散歩した -
tree -L 2 ~で構造を見た -
~/learn/linux/day01/を自分で作った -
scriptでログを残した - このノートの「今日の発見」を埋めた
詰まった時のチートシート
| やりたいこと | コマンド |
|---|---|
| 今どこ? | pwd |
| 中身見たい | ls -la |
| 移動したい | cd <パス> |
| 1つ上に戻る | cd .. |
| ホームに戻る | cd または cd ~ |
| 直前の場所に戻る | cd - |
| ファイル作る | touch <名前> |
| フォルダ作る | mkdir -p <パス> |
| 中身見る(短い) | cat <ファイル> |
| 中身見る(長い) | less <ファイル> |
| 検索(中身) | grep "文字列" <ファイル> |
| 構造見る | tree -L 2 |
| やめる(多くの場面) | q または Ctrl+C |
おまけ: 「これって何ができれば実務OKなの?」基準
このレッスンで身に付くべき感覚:
ls -lhを息するように打てる: ファイル状況を確認する時の脊髄反射コマンドtail -fの使い所が見えている: ログ調査の入口、ここで詰まらないmkdir -pとcdでディレクトリを行き来できる: 開発作業の土台- ブレース展開
{a,b,c}で複数生成ができる: シェルの強力さを体感 - ファイルの中身を見るコマンドを使い分けられる: cat / less / head / tail
これができれば「最低限ターミナルが使える人」。明日 Day2 で cp / mv / rm / find を覚えると「ファイル操作が一通りできる人」になります。
次のレッスン
まだ level1_02_file_operations.md は無い。明日 Claude Code に次のように頼んで生成させる:
バックエンドマスター/Linux/level1_02_file_operations.md を、
level1_01_terminal_basics.md と同じフォーマットで作って。
内容は cp / mv / rm / find / ln(シンボリックリンク)中心で、
各コマンドに「これは何か」「いつ使うか」「落とし穴」を必ず含めて。