WindowsのCドライブやDドライブに慣れた人がLinuxを触り始めると、最初にとまどうのがディレクトリの名前です。
Windowsでは「ドキュメント」「ダウンロード」「プログラムファイル」のように用途を想像しやすい名前が多いのに対し、
Linuxでは /etc や /var・/usr のような短い名前のフォルダが並んでいます。
そもそも、LinuxにはWindowsのような「Cドライブ」「Dドライブ」という概念が存在しません。
すべてのファイルとディレクトリは「/」(スラッシュ)という1つのルートから始まる1本のツリー構造で管理されています。
USBメモリや追加ディスクも、このツリーの中のどこかに「マウント」して取り込む仕組みです。
この記事では、Linuxのディレクトリ構造の基本を初心者向けに解説します。
それぞれのディレクトリが何のためにあるかを理解すると、コマンド操作のミスが減り、
エラーメッセージの意味も分かるようになります。
動作確認環境:Ubuntu 24.04 LTS / Rocky Linux 9.4 / WSL2
この記事のポイント
・Linuxは「/」(ルート)を起点とする1本のツリー構造で、Cドライブのようなドライブレターはない
・ディレクトリ構造はFHS規格で定められ、どのLinux OSでも共通の構成
・/etc =設定、/var =ログ・変動データ、/home =ユーザー作業領域
・構造を知るとエラーの意味が分かり、操作ミスが激減する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
Linuxのディレクトリ構造は「引き出しの役割分担」
Linuxのディレクトリ構造は、よく整理された引き出しのようなものです。どの引き出しに何が入っているかが決まっているからこそ、大量のファイルが存在しても管理できます。この構造は FHS(Filesystem Hierarchy Standard) という国際規格で定められています。UbuntuでもRocky LinuxでもRHELでも、基本的な構造はほぼ同じです。環境が変わっても同じ場所を探せば設定ファイルが見つかる、というのがLinuxの強みの一つです。
Windowsと最も異なる点は、「ドライブレターがない」ことです。WindowsはC:ドライブ・D:ドライブのように複数のルートを持ちますが、Linuxは「/」(スラッシュ)という1つのルートディレクトリからすべてが始まります。ディスクを追加しても、USBを挿しても「/の下のどこか」にマウントされるため、ユーザーからはすべてが1本のツリーに見えます。スクリプトや設定ファイルを書く際に「このマシンはCドライブ?Dドライブ?」と悩む必要がないのも、この設計の利点です。
まず全体像を確認しましょう。ターミナルで
ls / を実行すると次のように表示されます。# ルートディレクトリの内容を確認する $ ls / bin dev home lib32 libx32 media opt root sbin srv tmp var boot etc lib lib64 lost+found mnt proc run snap sys usr
# Ubuntu / WSL2 でtreeをインストールする $ sudo apt install -y tree # Rocky Linux / AlmaLinux 系でインストールする $ sudo dnf install -y tree # ルートから2階層分のディレクトリ構造を表示する $ tree -L 2 -d / / ├── bin -> usr/bin ├── boot ├── dev ├── etc │ ├── apt │ ├── default │ └── ssh ├── home │ └── yamada ├── lib -> usr/lib ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/sbin ├── srv ├── sys ├── tmp ├── usr │ ├── bin │ ├── lib │ ├── sbin │ └── share └── var ├── cache ├── log └── tmp
主要ディレクトリの役割
1. /(ルートディレクトリ)——すべての起点
Linuxのディレクトリ構造の頂点です。Windowsでいえば「コンピューター(マイコンピュータ)」に相当します。すべてのファイルとディレクトリは、ここから始まります。rootユーザーのホームディレクトリは
/root ですが、ルートディレクトリ(/)とは別物です。混乱しやすいので注意してください。2. /home——ユーザーの作業スペース
一般ユーザーが自由に使えるホームディレクトリが格納されます。ユーザー名が「yamada」であれば、/home/yamada がそのユーザーの作業スペースです。Windowsの「C:\Users\ユーザー名」に相当します。# 自分のホームディレクトリを確認する $ echo $HOME /home/yamada # ホームディレクトリに移動する(どちらも同じ) $ cd ~ $ cd /home/yamada
/mnt/c/Users/ユーザー名/ としてアクセスできます。ディレクトリを移動する際は pwd(Print Working Directory)で現在地を確認しながら作業すると迷いません。3. /etc——設定ファイルの保管庫
「etc」は "et cetera"(その他)の略ですが、現在はシステムの設定ファイルを置く場所として広く知られています。Windowsの「レジストリ」や「コントロールパネル」に近い存在ですが、Linuxではすべてがテキストファイルで管理されているため、人間が直接読み書きできます。Apacheの設定、SSHの設定、ユーザー情報など、サーバー管理で最もよく触れるディレクトリです。# /etcの中身の一部を確認する $ ls /etc | head -15 adjtime alternatives apt bash.bashrc ca-certificates cron.d cron.daily default environment fstab group hostname hosts init.d
・/etc/fstab:起動時に自動マウントするディスクの設定
・/etc/ssh/sshd_config:SSHサーバーの設定ファイル
・/etc/cron.d/ :cronジョブの設定ファイル置き場
設定ファイルはテキスト形式が多く、viやnanoで直接編集します。変更前には必ずバックアップを取る習慣をつけましょう。
4. /var——変化するデータの置き場
「var」は "variable"(変化する)の略です。ログファイル・メールスプール・データベースのデータなど、運用中に増減するファイルが格納されます。# /var配下の主要ディレクトリ $ ls /var backups cache crash lib local lock log mail opt run spool tmp # ログファイルの一覧を確認する $ ls /var/log apt bootstrap.log kern.log syslog auth.log btmp lastlog ubuntu-advantage.log
・/var/spool/ :印刷ジョブや送信待ちメールの一時置き場
・/var/cache/ :aptキャッシュなどの一時データ
サーバーの障害調査では
/var/log/ を起点にログを読むことが多いです。ディスクが満杯になった時も、まず /var/log/ のサイズを確認しましょう。5. /usr——ユーザー向けプログラムの格納場所
「usr」はUnix System Resourcesの略で、一般ユーザーが使うプログラムやライブラリが置かれます。apt install でインストールしたソフトウェアの大半はここに入ります。・/usr/bin/ :一般ユーザーが使うコマンドの実体(grep、cat、lsなど)。Windowsの「C:\Windows\System32」に相当
・/usr/sbin/ :管理者向けコマンドの実体
・/usr/lib/ :プログラムが使うライブラリ
・/usr/local/ :自分でコンパイル・インストールしたソフトウェアの置き場
which コマンド名 と実行すると、そのコマンドが実際にどこにあるかが分かります。# grepコマンドの実体の場所を確認する $ which grep /usr/bin/grep
6. /tmp——一時ファイル置き場
「tmp」はtemporary(一時的)の略です。プログラムが一時的に使うファイルが置かれます。再起動すると中身が消えることが多いので、大切なファイルは保存しないでください。・再起動で中身が消える:(ディストリビューションによる)
・誰でも読み書き可能:パーミッション 1777(スティッキービット付き)
・シェルスクリプトでよく使う:処理中の一時ファイルを
mktemp で安全に作成7. /bin・/sbin——基本コマンドの格納場所
/bin は一般ユーザーが使う基本コマンド(ls、cp、mv、rm等)、/sbin は管理者が使う基本コマンド(shutdown、mount等)が入っていました。現代のLinux(Ubuntu 20.04以降、Rocky Linux 9以降など)では
/bin と /sbin はどちらも /usr/bin へのシンボリックリンクになっています。# /binがシンボリックリンクになっていることを確認する $ ls -la / | grep "^l" lrwxrwxrwx 1 root root 7 Jan 14 12:00 bin -> usr/bin lrwxrwxrwx 1 root root 7 Jan 14 12:00 lib -> usr/lib lrwxrwxrwx 1 root root 7 Jan 14 12:00 lib32 -> usr/lib32 lrwxrwxrwx 1 root root 7 Jan 14 12:00 lib64 -> usr/lib64 lrwxrwxrwx 1 root root 7 Jan 14 12:00 sbin -> usr/sbin
8. /root——rootユーザーのホームディレクトリ
スーパーユーザー(root)専用のホームディレクトリです。一般ユーザーのホームが/home/ユーザー名 にあるのに対し、rootだけは /root に独立して置かれています。現代のLinux運用では、rootで直接ログインすることは避け、
sudo コマンドで必要な操作だけ権限昇格させるのが基本です。一般ユーザーは /root ディレクトリにアクセスできません(パーミッション 700)。その他の重要ディレクトリ
| ディレクトリ | 主な用途 |
|---|---|
| /proc | 実行中のプロセス情報(仮想ファイルシステム。実際のディスクには存在しない) |
| /dev | デバイスファイル(ディスク・USBなどのハードウェアがファイルとして見える) |
| /sys | カーネルとデバイスの情報(/procに似た仮想ファイルシステム) |
| /mnt | 一時的なマウントポイント(ディスクのマウント先として手動で使うことが多い) |
| /media | USBメモリ・DVDなどのリムーバブルメディアの自動マウント先 |
| /opt | サードパーティソフトウェアのインストール先(Slack・Google Chromeなど) |
| /root | rootユーザーのホームディレクトリ(/home/rootではない点に注意) |
| /boot | カーネルやブートローダー(GRUB)のファイル |
WSL2・VPSで実際にコマンドを打ってみよう
知識として読むより、実際に手を動かす方が定着します。今すぐターミナルを開いて試してみてください。1. ルートディレクトリの全体を確認する
# ルート直下のファイルとディレクトリを一覧表示 $ ls -la / total 68 drwxr-xr-x 20 root root 4096 Mar 1 09:00 . drwxr-xr-x 20 root root 4096 Mar 1 09:00 .. lrwxrwxrwx 1 root root 7 Jan 14 2024 bin -> usr/bin drwxr-xr-x 4 root root 4096 Mar 1 09:00 boot drwxr-xr-x 18 root root 4600 Aug 26 08:30 dev drwxr-xr-x 133 root root 4096 Aug 26 07:00 etc drwxr-xr-x 3 root root 4096 Aug 10 10:00 home lrwxrwxrwx 1 root root 7 Jan 14 2024 lib -> usr/lib drwx------ 2 root root 16384 Jan 14 2024 lost+found drwxr-xr-x 2 root root 4096 Jan 14 2024 media drwxr-xr-x 2 root root 4096 Jan 14 2024 mnt drwxr-xr-x 3 root root 4096 Jun 1 10:00 opt dr-xr-xr-x 264 root root 0 Aug 26 00:00 proc drwx------ 8 root root 4096 Aug 25 22:00 root drwxr-xr-x 34 root root 1040 Aug 26 08:30 run lrwxrwxrwx 1 root root 8 Jan 14 2024 sbin -> usr/sbin drwxr-xr-x 2 root root 4096 Jan 14 2024 srv dr-xr-xr-x 12 root root 0 Aug 26 00:00 sys drwxrwxrwt 14 root root 4096 Aug 26 09:00 tmp drwxr-xr-x 14 root root 4096 Jan 14 2024 usr drwxr-xr-x 13 root root 4096 Mar 1 09:00 var
2. /etcの設定ファイルを確認する
# hostsファイルを確認する(ドメインとIPの対応表) $ cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 my-server # hostnameファイルを確認する(このサーバーの名前) $ cat /etc/hostname my-server
3. /var/logのログを確認する
# 最近のシステムログを10行表示する $ sudo tail -10 /var/log/syslog Aug 26 09:00:01 my-server CRON[1234]: (root) CMD (run-parts /etc/cron.daily) Aug 26 09:01:05 my-server kernel: [12345.678] eth0: renamed from veth1a2b3c Aug 26 09:05:12 my-server systemd[1]: Starting Daily apt upgrade and clean activities...
4. ディスク使用量で /var の状態を確認する
# 各マウントポイントのディスク使用量を確認する $ df -h / Filesystem Size Used Avail Use% Mounted on /dev/sda1 50G 12G 36G 25% / # /varのサイズを確認する(ログが増えすぎていないか) $ du -sh /var/log 156M /var/log
5. 各ディレクトリのサイズを一覧確認する
ディレクトリの役割を理解したら、実際にどれくらいの容量を使っているか確認してみましょう。サイズを見ると「/usrが大きい=インストール済みのパッケージが多い」「/varが大きい=ログが溜まっている」という感覚が身につきます。# 主要ディレクトリのサイズを人間が読みやすい形式で表示する $ sudo du -sh /home /etc /var /usr /tmp 144K /home 12M /etc 1.1G /var 3.2G /usr 96K /tmp
よくある疑問とトラブルシュート
「/etcのファイルを編集しようとしたら権限エラーになった」
/etc配下のファイルはroot所有です。一般ユーザーでは読み取り専用で、編集するにはsudo が必要です。# NG:一般ユーザーで /etc を編集しようとすると弾かれる $ vi /etc/hosts # 上書き保存しようとすると「readonly, use ! to override」と表示される # OK:sudo をつければ編集できる $ sudo vi /etc/hosts
「/varが満杯になってサーバーが止まった」
ログが肥大化して/varのディスクが満杯になるのは、よくある障害パターンです。# どのディレクトリが大きいか調べる(サイズ降順で表示) $ sudo du -sh /var/* | sort -rh | head -10 2.1G /var/log 512M /var/cache 128M /var/lib
「~/Documents と /home/user/Documents は同じ場所?」
はい、同じです。「~」はホームディレクトリの省略形です。cd ~ は cd /home/ユーザー名 と同じ意味です。迷ったときは pwd で現在地を確認すれば、どちらも同じパスが表示されます。WindowsとLinuxのディレクトリ対応表
Windowsに慣れた方向けに、対応するディレクトリをまとめました。どの「引き出し」が何に相当するかを把握しておくと、Linux学習の足がかりになります。| Linuxのディレクトリ | 主な用途 | Windowsで近いもの |
|---|---|---|
| /home/ユーザー名 | ユーザーのデータ置き場 | C:\Users\ユーザー名 |
| /etc | システム・サービスの設定ファイル | レジストリ・コントロールパネル |
| /var/log | ログファイル(トラブル調査の起点) | C:\Windows\Logs |
| /usr/bin | 一般ユーザー向けコマンドの実体 | C:\Windows\System32 |
| /tmp | 一時ファイル(再起動で削除) | %TEMP%(AppData\Local\Temp) |
| /root | rootユーザーのホームディレクトリ | Administratorのユーザーフォルダ |
| /mnt・/media | 外部デバイス・追加ディスクのマウント先 | EドライブやFドライブ(着脱メディア) |
本記事のまとめ
| ディレクトリ | 役割 | 代表的なファイル・用途 |
|---|---|---|
| / | ルート(全ての起点) | すべてのディレクトリの親 |
| /home | ユーザーの作業スペース | 設定ファイル・ダウンロード・プロジェクト |
| /etc | システム設定ファイル | hosts、fstab、ssh/sshd_config |
| /var | 変化するデータ | /var/log(ログ)、/var/cache、/var/spool |
| /usr | ユーザープログラム・ライブラリ | /usr/bin(コマンド)、/usr/lib(ライブラリ) |
| /tmp | 一時ファイル | 再起動で消える。スクリプトの一時ファイル等 |
| /bin・/sbin | 基本コマンド | 現代では/usr/bin・/usr/sbinへのシンボリックリンク |
| /root | rootのホームディレクトリ | 一般ユーザーはアクセス不可。sudoで昇格して操作 |
| /proc・/dev・/sys | 仮想ファイルシステム | プロセス情報、デバイス、カーネル情報 |
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
コマンドを「なんとなく打つ」段階から卒業したい方は、ぜひ受け取ってみてください。
無料マニュアルを受け取る >>
関連記事(Linux実務スキル)
ディレクトリ構造を理解したら、次のステップとして各テーマの実践記事に進みましょう。・【シェルスクリプト】Linuxシェルスクリプト入門|初心者でも動かせる自動化の第一歩
・【セキュリティ設定】SELinuxを無効化・確認する方法|enforcing/permissive/disabledの切替とgetenforce・sestatus
・【サーバー構築】ssh-keygenコマンドでSSH公開鍵認証を設定する方法|鍵の生成からauthorized_keys設定まで
・【トラブルシューティング】straceコマンドでプロセスのシステムコールを追跡する方法|Permission deniedの原因特定やデバッグも
・【ネットワーク】firewall-cmdコマンドでポートを開放・管理する方法|ゾーン・サービス・永続化の使い分け
・【ファイルシステム管理】dfコマンドでディスク容量を確認する方法|使用率の見方や容量不足の対処も
・【現場コラム】lsコマンドのオプション一覧|Linux基本コマンドリファレンス
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます