Linux: ファイルシステムのナビゲーション — ls / cd / pwdとディレクトリ構造
Linuxはすべてのファイルとディレクトリを/をルートとするツリー構造で管理しています。このツリー構造はFilesystem Hierarchy Standard(FHS)と呼ばれます。
📋 前提条件:まず以下を完了していること
- レッスン3:ターミナルの基礎
1. このレッスンで学ぶこと
- 3つのコアナビゲーションコマンド:pwd、cd、ls
- FHS標準ディレクトリ構造
- 絶対パスと相対パス
.と..の特別な意味- ワイルドカードと隠しファイル
2. 迷える初心者のストーリー
(1) 悩み:ディレクトリツリーで自分がどこにいるか分からない
小明は初めてサーバーにログインし、/の下の見慣れないディレクトリ名に圧倒されました:/bin、/etc、/var、/usr…それぞれのディレクトリの用途も、自分が今どこにいるのかも分かりませんでした。
(2) 3つの地図
先輩エンジニアのボブが3つの「地図」を描いてくれました:
# Map 1: Where am I?
pwd
# Output: /home/charlie
# Map 2: What's here?
ls
# Output: Desktop Documents Downloads
# Map 3: Go there
cd /etc
(3) 得られるもの:自由にナビゲーション
小明は3つのコマンドの関係を理解しました:pwdは現在地を確認、lsは周囲を表示、cdは目的地へ移動。以来、どんなLinuxサーバーのファイルシステムでも自由にナビゲーションできるようになりました。
3. 知識ポイント
(1) FHS標準ディレクトリクイックリファレンス
Linuxのディレクトリ構造は統一基準に従っています。すべてを暗記する必要はありませんが、以下は必須です:
/etcは設定、/varは可変データ、/usrはユーザープログラム。この論理を理解すれば、特定のディレクトリを忘れても、ファイルの機能から場所を推測できます。
| ディレクトリ | 意味 | 用途 |
|---|---|---|
/ |
ルートディレクトリ | ファイルシステムの出発点。すべてのパスはここから始まる |
/home |
ユーザーのホーム | 各ユーザーの個人ファイル(例:/home/alice) |
/etc |
設定ファイル | システム設定ファイルとデーモン設定(例:Nginx、SSH) |
/var |
可変データ | ログ(/var/log)、データベース、キャッシュデータ |
/tmp |
一時ファイル | 再起動時に自動クリーンされる一時ディレクトリ |
ℹ️ 注意:
/tmpは通常、システム再起動後にクリーンされます(最近のシステムはtmpfsを使用し、/tmpをメモリに格納)。重要なデータや長期が必要なファイルを/tmpに保存しないでください — 一時的な用途にのみ適しています。 |/usr| ユーザーシステムリソース | システムプログラムとライブラリ(/usr/bin、/usr/lib)| |/bin| 基本コマンド |ls、cp、mvなどの基本コマンド | |/opt| 追加ソフトウェア | サードパーティソフトウェアのインストールディレクトリ |
(2) 絶対パスと相対パス
| 種類 | 特徴 | 例 |
|---|---|---|
| 絶対パス | /から始まり、ルートからのパス |
/home/alice/Documents/report.md |
| 相対パス | 現在のディレクトリからのパス | Documents/report.md(/home/aliceにいる場合) |
# Currently in /home/alice
# Using an absolute path
cd /etc/nginx
# Using a relative path (same effect, starting from current directory)
cd ../../../etc/nginx
(3) .と..の特別な意味
| 記号 | 意味 |
|---|---|
. |
現在のディレクトリ |
.. |
親ディレクトリ |
~ |
現在のユーザーのホームディレクトリ |
~alice |
ユーザーaliceのホームディレクトリ |
- |
前のディレクトリ(cdのみ) |
cd -で前の作業ディレクトリに素早く戻れます — 2つのディレクトリ間を頻繁に行き来する場合に非常に便利です。例えば、/var/logと/etc/nginxを頻繁に切り替える場合、毎回cd -と入力するだけです。
# Currently in /home/alice/projects
cd . # No movement (stays in current directory)
cd .. # Move to /home/alice
cd ../.. # Move to /home
cd ~ # Move to /home/alice
cd - # Go back to previous directory
(4) よく使うlsオプション
# Basic usage
ls # List filenames (compact)
ls -l # Long format (permissions/owner/size/time)
ls -a # Show all files (including hidden files starting with .)
ls -la # Common combination
ls -lh # Human-readable file sizes (KB/MB/GB)
ls -R # Recursively list subdirectories
ls -S # Sort by file size
ls -t # Sort by modification time
(5) ワイルドカード
| ワイルドカード | 一致ルール | 例 |
|---|---|---|
* |
任意の数の文字 | *.txtは.txtで終わるすべてのファイルに一致 |
? |
1文字 | file?.mdはfile1.md、file2.mdに一致 |
[abc] |
セット内の任意の1文字 | file[12].mdはfile1.md / file2.mdに一致 |
[!abc] |
セット内の文字を除外 | [!a-z]*はアルファベットで始まらないファイルに一致 |
# Wildcard examples
ls *.md # List all Markdown files
ls file?.txt # List file1.txt, file2.txt, etc.
ls [abc]* # List files starting with a, b, or c
ls [0-9]* # List files starting with a digit
(6) ▶ サンプル:pwd — 現在地を教えて
# Whenever you're unsure of your current location, use pwd
pwd
# Output: /home/alice
# Try after switching to a different directory
cd /etc
pwd
# Output: /etc
出力:
TEXT/home/alice /etc
(7) ▶ サンプル:cd — ディレクトリ間を移動
# Go home
cd ~
# Go back to previous directory
cd /etc
cd /var/log
cd - # Back to /etc
# Go to root
cd /
# Go to a specific user's home directory
cd ~alice
(8) ▶ サンプル:ls — 中身を見せて
# Compact mode
ls /etc
# Long format (includes permissions, size, modification time)
ls -l /etc
# Show hidden files
ls -la ~
# Human-readable sizes
ls -lh /var/log
# Recursive view
ls -R ~/projects | head -20
# Sort by file size (largest first)
ls -lhS /var/log
(9) ▶ サンプル:隠しファイル
Linuxでは、.で始まるファイルやディレクトリは隠しファイルです。lsはデフォルトでこれらを表示しません。
# View hidden files in home directory
ls -la ~
# Common hidden files and directories
# .bashrc bash configuration
# .bash_profile Login Shell configuration
# .gitconfig Git configuration
# .ssh/ SSH keys and configuration
# .vimrc vim configuration
出力:
TEXTtotal 48 drwxr-xr-x 1 alice alice 4096 Jul 8 10:23 . drwxr-xr-x 1 alice alice 4096 Jul 8 10:23 .. -rw-r--r-- 1 alice alice 220 Jul 8 10:23 .bash_logout -rw-r--r-- 1 alice alice 3771 Jul 8 10:23 .bashrc -rw-r--r-- 1 alice alice 807 Jul 8 10:23 .profile drwx------ 2 alice alice 4096 Jul 8 10:23 .ssh -rw-r--r-- 1 alice alice 256 Jul 8 10:23 .vimrc
(10) ▶ サンプル:ワイルドカードの実践
# List all .log files
ls -la /var/log/*.log
# List files whose names start with "access"
ls -la /var/log/access*
# Delete all .tmp files
rm *.tmp
# Copy all .jpg files to another directory
cp *.jpg ~/Pictures/
(11) ▶ 総合例:ファイルシステム冒険
# Xiao Ming's first filesystem adventure
# 1. Where am I?
pwd
# 2. See what's in the root directory
ls -la /
# 3. Go to /etc and check system configuration
cd /etc
ls | head -20
# 4. Go to /var/log for logs
cd /var/log
ls -lhS | head -10 # Top 10 largest log files
# 5. Go back home
cd ~
ls -la
# 6. See what's on the desktop
ls -la ~/Desktop
❓ よくある質問
Q:
/と~の違いは? A:/はルートディレクトリで、ツリー全体の最上位です。~は現在のユーザーのホームディレクトリ(通常/home/username)です。ルートは1つだけですが、各ユーザーにはホームディレクトリがあります。
Q: なぜ
.で始まるファイルは隠しファイルなのですか? A: 慣習です —.で始まるファイルは「設定ファイル」や「システムファイル」と見なされ、日常的な使用でユーザーが見る必要のないものです。これによりlsの出力のノイズが減ります。
Q:
ls -l出力の最初の列drwxr-xr-xは何を意味しますか? A: 最初の文字はファイルタイプ(dはディレクトリ、-は通常ファイル、lはリンク)。次の9文字は3つのグループに分かれます:ファイル所有者(ユーザー)の権限(3ビット)、グループの権限(3ビット)、その他の権限(3ビット)。r=読み取り、w=書き込み、x=実行。
Q:
/tmpのファイルは再起動後に消えますか? A: デフォルトでは、はい。多くのシステムは起動時に/tmpをクリーンします。したがって、/tmpは一時ファイルのみに使用し、重要なデータは保存しないでください。
Q: 長いパスを素早く切り替えるには? A: Tab補完(最初の数文字を入力してTab)、
cd -で戻る、pushd/popdでディレクトリスタックを管理、またはCDPATH環境変数を使用。
📖 まとめ
pwdは現在地表示、cdはディレクトリ切替、lsは内容一覧 — この3つでどこへでもナビゲーション可能- FHS標準ディレクトリ:
/homeはユーザー、/etcは設定、/varはログ、/tmpは一時ファイル - 絶対パスは
/から始まる、相対パスは現在のディレクトリから始まる ..は親ディレクトリ、.は現在のディレクトリ、~はホームディレクトリ*は任意の文字列、?は1文字 — 一括操作に強力なツール
📝 練習問題
- 基本(難易度 ⭐):
pwdで現在地を確認し、cd /でルートディレクトリに移動し、ls -la /で全ファイルを一覧表示する - 中級(難易度 ⭐⭐):
cd ~でホームに戻り隠しファイルを確認、/var/logに移動してログディレクトリを確認、cd -で両方を切り替え、最後に/etcでls *.confを実行して設定ファイルを見つける - 上級(難易度 ⭐⭐⭐):システムのルートディレクトリ構造図を描く(5つ以上のFHS標準ディレクトリを含む)、各ディレクトリの用途と書き込み可否を注記する