「/etc と /var と /usr——それぞれ何を入れる場所なの?」
Windowsでは「Cドライブ」「Dドライブ」でファイルを管理しますが、Linuxは全く異なります。
すべてが「/(ルート)」から始まる一本のツリー構造で、最初は戸惑うのが普通です。
この記事では、Linuxのディレクトリ構造を規定するFHS(Filesystem Hierarchy Standard)の概念から、実際にどのディレクトリに何が入っているかを、コマンド実行例つきで解説します。
WSL2(Ubuntu 24.04 LTS)とVPS(Rocky Linux 9)の両方で確認できる内容です。
この記事のポイント
・LinuxはWindowsのCドライブに相当する「/(ルート)」を頂点にした一本のツリー構造
・/etc=設定ファイル、/var=可変データ、/usr=ユーザープログラムが三大基本
・pwd・ls・cd・tree の4コマンドでディレクトリの現在地と構造を素早く把握できる
・/proc と /dev はファイルに見えてカーネルやデバイスへのインタフェース
・/bin・/boot・/lib 等のシステムディレクトリは削除するとOS起動不能になる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
LinuxとWindowsのフォルダ構造の違い
Windowsでは「Cドライブ」「Dドライブ」のようにドライブ文字でファイルシステムが始まります。Linuxでは、/(スラッシュ)という「ルートディレクトリ」が頂点になり、そこからすべてのディレクトリが一本のツリーとして伸びています。
| 比較項目 | Windows | Linux | 役割 |
|---|---|---|---|
| ファイルシステムの頂点 | C:\(ドライブ文字) | /(ルートディレクトリ) | ファイルシステムの最上位 |
| パスの区切り文字 | ¥(バックスラッシュ) | /(スラッシュ) | ディレクトリの階層を区切る |
| ユーザーの作業場所 | C:\Users\ユーザー名 | /home/ユーザー名 | ユーザーの作業場所 |
| システムコマンド | C:\Windows\System32 | /usr/bin、/usr/sbin | システムコマンド・実行ファイル |
| 追加アプリ | C:\Program Files | /opt、/usr/local | 追加アプリのインストール先 |
| ログファイル | C:\Windows\Logs | /var/log | ログファイル |
| 設定ファイル | C:\Windows\System32\drivers\etc | /etc | 設定ファイル |
| 一時ファイル | C:\Windows\Temp | /tmp | 一時ファイル |
ハードディスクを追加してもドライブ文字は増えず、/mnt や /media などのディレクトリに「マウント」して使います。
もうひとつ重要な違いとして、Linuxのファイル名は大文字と小文字を区別します。「/etc」と「/Etc」は別物として扱われるため、コマンドを打つときは注意が必要です。
FHS(Filesystem Hierarchy Standard)とは
1. ディレクトリ構造に「ルール」がある理由
Linuxのディレクトリ配置は、FHS(Filesystem Hierarchy Standard)という国際標準に従っています。これは「どのLinuxディストリビューションを使っても、同じ場所に同じ種類のファイルが置かれる」ことを保証するための取り決めです。
FHSがあるおかげで、Ubuntu で覚えた場所が Rocky Linux でも通用します。
サーバー管理の現場でも「設定ファイルは /etc」「ログは /var/log」という知識が共通言語になっています。
ディストリビューションが変わっても「どこに何があるか」を調べ直す必要がない——それがFHSの最大のメリットです。
2. ls / で全体を俯瞰する
まずは実際にls / を実行してみましょう。WSL2(Ubuntu)での出力です。user@ubuntu-wsl:~$ ls / bin dev home lib lib64 media mnt opt proc root run sbin snap srv sys tmp usr var
[user@vps-rocky ~]$ ls / bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
ls -la / とすると権限・日付・サイズも合わせて表示されます。次のセクションから、各ディレクトリの役割を詳しく見ていきます。
ディレクトリを確認する基本コマンド(pwd・ls・cd・tree)
実際にコマンドを打ちながら確認するのが最速の学習法です。「今どこにいるんだろう」と迷ったときに使う基本コマンドを押さえておきましょう。
1. 現在地を確認する(pwd)
pwd(print working directory)は、今自分がいるディレクトリの絶対パスを表示するコマンドです。ディレクトリを移動した後など、迷ったらまずこれを実行します。
$ pwd /home/tanaka
2. ディレクトリの一覧を表示する(ls)
ls(list)コマンドで、ディレクトリ内のファイルやサブディレクトリの一覧を確認できます。# ルートディレクトリの中身を表示 $ ls / bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var # 詳細情報(権限・日付・サイズ)も表示 $ ls -la / total 64 dr-xr-xr-x. 18 root root 235 Apr 7 08:00 . dr-xr-xr-x. 18 root root 235 Apr 7 08:00 .. lrwxrwxrwx. 1 root root 7 Jan 25 10:00 bin -> usr/bin drwxr-xr-x. 6 root root 70 Apr 7 08:00 boot ...
3. ディレクトリを移動する(cd)
cd(change directory)コマンドで、ディレクトリを移動します。# /etc に移動して現在地を確認 $ cd /etc $ pwd /etc # ホームディレクトリに戻る(~ はホームディレクトリを表す) $ cd ~ $ pwd /home/tanaka # 一つ上の階層に移動(.. は親ディレクトリ) $ cd /home/tanaka/work $ cd .. $ pwd /home/tanaka
cd ~ でホームに戻るのが基本です。~(チルダ)は「自分のホームディレクトリ(/home/ユーザー名)」を表すショートカットです。4. ディレクトリ構造を視覚的に表示する(tree)
tree コマンドを使うと、ディレクトリの階層をツリー形式で視覚的に確認できます。デフォルトではインストールされていない場合があるので、先に入れておきましょう。
# Ubuntu / WSL2 の場合 $ sudo apt install tree -y # RHEL系(AlmaLinux / Rocky Linux)の場合 $ sudo dnf install tree -y
# /etc の直下だけ表示(深さ1) $ tree /etc -L 1 /etc |-- adjtime |-- alternatives |-- apt |-- crontab |-- environment |-- fstab |-- group |-- hostname |-- hosts |-- localtime -> /usr/share/zoneinfo/Asia/Tokyo |-- passwd |-- resolv.conf |-- shadow `-- ssh 19 directories, 56 files
localtime -> /usr/share/zoneinfo/Asia/Tokyo のように -> で表示されているのはシンボリックリンク(Windowsのショートカット相当)です。-L 2 に変えると2段目まで表示でき、サービスの設定ファイル群の全体像を素早く把握できます。主要ディレクトリの役割と代表ファイル
1. /etc — 設定ファイルの格納庫
サーバー管理で最もよく触れるディレクトリです。各サービスの設定ファイルが集中しています。Windowsの「コントロールパネル」に相当するイメージですが、Linuxではすべてがテキストファイルなのでエディタで直接読み書きできます。
WSL2(Ubuntu)で
ls /etc | head -20 を実行すると、次のようなファイルが並びます。user@ubuntu-wsl:~$ ls /etc | head -20 adduser.conf alternatives apparmor apt bash.bashrc ca-certificates.conf cron.d default dpkg environment fstab group hostname hosts init.d ld.so.conf
# /etc の代表的なファイル(RHEL系) $ ls /etc/ | head -20 adjtime aliases bash.bashrc crontab # cronの設定 fstab # ファイルシステムマウント設定 hostname # ホスト名 hosts # ホスト名とIPの対応 httpd/ # Apacheの設定(RHEL系) passwd # ユーザーアカウント情報 resolv.conf # DNS設定 shadow # パスワードハッシュ(root権限で読む) ssh/ # SSHデーモン設定 sudoers # sudo権限設定 # ホスト名の確認 $ cat /etc/hostname server01.example.com # DNS設定の確認 $ cat /etc/resolv.conf nameserver 8.8.8.8 nameserver 8.8.4.4
cp /etc/xxx /etc/xxx.bak でバックアップを取る習慣をつけましょう。2. /var — 変化するデータの置き場
「variable(可変)」の略です。ログファイル、キャッシュ、メールスプール、データベースのデータファイルなど、運用中に増減するファイルが置かれます。サーバーで問題が起きたときは、まず /var/log 内のログを確認するのが基本です。
WSL2(Ubuntu)の /var/log には次のようなファイルが並びます。
user@ubuntu-wsl:~$ ls /var/log | head -15 alternatives.log apt auth.log btmp cloud-init.log dpkg.log faillog journal kern.log lastlog syslog unattended-upgrades wtmp
# ログの確認(システムログ・RHEL系) $ tail -20 /var/log/messages Apr 07 09:12:34 server01 kernel: eth0: renamed from veth3a2b1c Apr 07 09:15:01 server01 CROND[12345]: (root) CMD (/usr/lib/sa/sa1 1 1) Apr 07 09:25:01 server01 systemd[1]: Started Session 42 of User tanaka. # リアルタイムにログを監視する $ tail -f /var/log/syslog # /var のサブディレクトリ $ ls /var/ cache lib lock log mail run spool tmp www # ディスク使用量確認(varが肥大化しやすい) $ du -sh /var/log/ 1.2G /var/log/
・
/var/log/syslog(Ubuntu系)/ /var/log/messages(RHEL系):システムログ全般・
/var/log/auth.log(Ubuntu系)/ /var/log/secure(RHEL系):認証ログ(SSHログインの記録)・
/var/log/journal/:systemdのバイナリジャーナルログ(journalctl コマンドで読む)Webサーバーのアクセスログも /var/www/ や /var/log/nginx/ に置かれます。
3. /usr — ユーザー向けプログラムとライブラリ
「Unix System Resources」の略です。パッケージマネージャでインストールしたプログラム・ライブラリが格納されます。
Windowsの「C:\Windows\System32」に相当するイメージです。
・/usr/bin:一般ユーザーが使うコマンド(ls, cp, grep, curl など)
・/usr/sbin:管理者向けコマンド(useradd, sshd など)
・/usr/lib:共有ライブラリ(.so ファイル)
・/usr/local:手動インストールしたソフトウェアの置き場
・/usr/share:アーキテクチャ非依存のデータ(マニュアル、アイコンなど)
# which コマンドで実行ファイルの場所を確認 $ which ls /usr/bin/ls $ which useradd /usr/sbin/useradd # /usr/local は手動インストールの場所 $ ls /usr/local/ bin etc include lib sbin share src
4. /home — 一般ユーザーのホームディレクトリ
一般ユーザーの個人ファイルが置かれます。ユーザー tanaka のホームは
/home/tanaka です。Windowsの「C:\Users\ユーザー名」に相当します。ターミナルで
~(チルダ)と入力すると、自動的に自分のホームディレクトリのパスに展開されます。cd ~ と cd /home/tanaka は同じ意味です。# 現在のユーザーのホームディレクトリを確認 $ echo $HOME /home/tanaka # ホームに移動 $ cd ~ $ pwd /home/tanaka # 隠しファイル(ドットファイル)も含めて表示 $ ls -la ~ total 48 drwxr-xr-x 5 tanaka tanaka 4096 Apr 7 09:00 . drwxr-xr-x 4 root root 4096 Apr 7 08:00 .. -rw------- 1 tanaka tanaka 820 Apr 7 09:33 .bash_history -rw-r--r-- 1 tanaka tanaka 220 Jan 25 10:00 .bash_logout -rw-r--r-- 1 tanaka tanaka 3526 Jan 25 10:00 .bashrc drwx------ 2 tanaka tanaka 4096 Apr 7 08:30 .cache drwx------ 3 tanaka tanaka 4096 Sep 10 14:22 .config -rw-r--r-- 1 tanaka tanaka 807 Jan 25 10:00 .profile drwx------ 2 tanaka tanaka 4096 Apr 7 08:30 .ssh drwxr-xr-x 2 tanaka tanaka 4096 Apr 7 09:00 work drwxr-xr-x 2 tanaka tanaka 4096 Apr 7 08:00 documents
.bash_history や .bashrc のような「.」で始まるファイルは隠しファイルで、シェルの設定が置かれます。.cache/ や .config/ はアプリケーションのキャッシュや設定を格納するディレクトリです。.ssh/ はSSH鍵を格納するディレクトリで、所有者のみに読み書き権限(700)が必要です。5. /tmp — 一時ファイルの置き場
プログラムが一時的に使うファイルを置く場所です。再起動時にクリアされることが多いため、永続保存が必要なものは置かないでください。
スクリプトの一時ファイルや、ダウンロード後にすぐ処理するファイルの置き場として使われます。
# /tmp の内容確認(再起動後は消える) $ ls /tmp/ systemd-private-xxx tmux-1000 .X0-lock # 一時ファイルの作成例 $ echo "test data" > /tmp/work.txt $ cat /tmp/work.txt test data
6. /proc — カーネル情報へのインタフェース
/proc はディスクには存在しない仮想ファイルシステムです。カーネルがリアルタイムに生成する情報を「ファイル」として読み出せます。
# CPUの詳細情報 $ cat /proc/cpuinfo | head -10 processor : 0 model name : Intel(R) Core(TM) i7-10700K @ 3.80GHz cpu MHz : 3800.000 cache size : 16384 KB # メモリの詳細情報 $ cat /proc/meminfo | head -5 MemTotal: 16384000 kB MemFree: 8192000 kB MemAvailable: 10240000 kB # 動作中のプロセス数確認 $ ls /proc/ | grep -E '^[0-9]+$' | wc -l 234
7. /dev — デバイスファイル
ハードディスク、端末、ランダムデバイスなどがファイルとして表現されます。「すべてはファイルである」というLinuxの設計思想を体現しているディレクトリです。
# ブロックデバイス(ストレージ)の確認 $ ls /dev/sd* /dev/sda /dev/sda1 /dev/sda2 # /dev/sda はハードディスク全体、/dev/sda1 はパーティション(区画) # VPSのディスク設定やマウント作業で登場する # /dev/null: 出力を捨てる際に使う $ command_with_verbose_output 2>/dev/null # /dev/urandom: ランダムなバイト列を生成 $ dd if=/dev/urandom bs=16 count=1 2>/dev/null | xxd 00000000: a3f2 7b1c 8e40 d9b5 6a2c e371 4f80 12c9 ..{..@..j,.qO...
8. /opt — サードパーティアプリの置き場
パッケージマネージャを使わず、独自にインストールしたアプリが置かれます。Oracle JDK、Chrome、カスタムアプリなどが典型例です。
# /opt の確認例 $ ls /opt/ google/ oracle/ myapp/
9. /root — rootユーザーのホームディレクトリ
/root は管理者ユーザー(root)専用のホームディレクトリです。一般ユーザーのホームが
/home/ユーザー名 であるのに対し、root だけは特別扱いで /root が割り当てられています。一般ユーザーから
cd /root を試みると「Permission denied」が出ます——セキュリティ上の正常な動作です。# 一般ユーザーから /root に入ろうとすると弾かれる $ cd /root -bash: cd: /root: Permission denied # sudo -i で root シェルに入れば移動できる(必要なときだけ) $ sudo -i # pwd /root
ディレクトリ間の関係を理解する
1. /bin と /usr/bin の違い
歴史的に/bin はシングルユーザーモードでも使える最低限のコマンドを置く場所でした。現代の多くのディストリビューション(RHEL 9、Ubuntu 22以降)では、
/bin は /usr/bin へのシンボリックリンクになっています。# RHEL 9 での確認 $ ls -la / | grep "bin\|sbin\|lib" lrwxrwxrwx 1 root root 7 /bin -> usr/bin lrwxrwxrwx 1 root root 9 /lib -> usr/lib lrwxrwxrwx 1 root root 11 /lib64 -> usr/lib64 lrwxrwxrwx 1 root root 8 /sbin -> usr/sbin
ls /bin/ls と ls /usr/bin/ls は同じファイルを指しています。古い書籍や記事で「/bin に置く」と書かれていても、現代の環境では /usr/bin と同じと理解して問題ありません。
削除してはいけないシステムディレクトリ
Linuxを使い始めた頃に誤ってやりがちなのが、rootユーザーで作業中にシステムファイルを消してしまうことです。以下のディレクトリはシステムの根幹に関わります。中身の変更・削除は絶対に避けてください。
・/bin:ls・cat など基本コマンドの実体。削除するとコマンドが一切使えなくなる
・/boot:Linuxカーネルや起動ファイル(vmlinuz・initramfs)。削除するとシステムが起動しなくなる
・/lib、/lib64:システムが使う共有ライブラリ(.so ファイル)。削除するとシステム全体が壊れる
・/proc、/sys:仮想ファイルシステム。カーネルとの通信に使う(実体ファイルではない)
・/dev:ディスクやターミナルなどのデバイスファイル
作業は必ず
/home/ユーザー名/ の中で行い、rootユーザーの使用は必要最小限にとどめましょう。「rootで作業する」習慣がある方は、一般ユーザーで
sudo を使う方式に切り替えることをお勧めします。誤操作によるシステム破壊は、VPSの場合OS再インストールを余儀なくされる実務上の要注意事項です。
よくあるエラーと対処法
1. 「Permission denied」でディレクトリに入れない
一部のディレクトリ(/root など)は一般ユーザーには立ち入り禁止です。$ cd /root -bash: cd: /root: Permission denied
sudo -i などで対応しますが、誤操作リスクが上がるため必要なときだけ使いましょう。/etc/shadow のようなセキュリティ上重要なファイルも同様です。
# /etc/shadow は一般ユーザーには読めない(パスワードハッシュが入っているため) $ cat /etc/shadow cat: /etc/shadow: Permission denied # sudo を付ければ読める(管理作業のみ。不用意に参照しない) $ sudo cat /etc/shadow root:!$6$xxxxxxxxxx$yyyyyyyyyyyy:19888:0:99999:7::: tanaka:$6$xxxxxxxxxx$zzzzzzzzzzzz:20000:0:99999:7:::
2. 「No such file or directory」が出る
$ cd /ets -bash: cd: /ets: No such file or directory
cd /et まで入力してTabキーを押すと /etc/ に自動補完されます。3. どこにいるか分からなくなった
迷ったらまずpwd で現在地を確認し、cd ~ でホームディレクトリに戻ります。これだけで大半の「迷子」は解決できます。
4. インストールしたコマンドがどこにあるか分からない
apt install や dnf install でインストールしたコマンドの実体は /usr/bin や /usr/sbin に配置されます。which コマンド名 で実体のパスを確認できます。# nginx のインストール後に実体の場所を確認 $ which nginx /usr/sbin/nginx # バージョン確認 $ nginx -v nginx version: nginx/1.24.0 (Ubuntu) # 設定ファイルの場所は /etc/nginx/ 配下 $ ls /etc/nginx/ conf.d mime.types nginx.conf sites-available sites-enabled
which コマンド名、「設定ファイルはどこ?」→ /etc/ソフト名/ を探す、という2つのパターンを覚えておくだけで、現場の迷いの大半は解消します。5. ls でディレクトリの中身が空に見える
ls で何も表示されなくても、隠しファイル(「.」で始まるファイル)が存在することがあります。# 通常の ls では隠しファイルは表示されない $ ls ~ work documents # -a オプションで隠しファイルも表示する $ ls -la ~ total 48 drwxr-xr-x 5 tanaka tanaka 4096 Apr 7 09:00 . ... -rw-r--r-- 1 tanaka tanaka 3526 Jan 25 10:00 .bashrc drwx------ 2 tanaka tanaka 4096 Apr 7 08:30 .ssh
.bashrc(バッシュアールシー)や .profile など、ドットで始まるファイルはシェルの設定を持つ重要なファイルです。「ls で確認したのに何もない」と思ったら、
ls -la で隠しファイルを含めて確認してみてください。本記事のまとめ
ルート直下のディレクトリを役割別に整理します。| ディレクトリ | 主な役割 | 代表的なファイル・用途 | Windows対比 |
|---|---|---|---|
/etc |
設定ファイル | fstab, hostname, httpd/, ssh/, passwd | コントロールパネル相当 |
/var |
可変データ(ログ等) | /var/log/, /var/www/, /var/lib/ | Windowsイベントログ |
/usr |
ユーザープログラム | /usr/bin/, /usr/lib/, /usr/local/ | C:\Windows\System32 |
/home |
ユーザーホーム | /home/ユーザー名/ | C:\Users\名前 |
/tmp |
一時ファイル | 再起動で削除される一時データ | Tempフォルダ |
/proc |
カーネル情報 | /proc/cpuinfo, /proc/meminfo | タスクマネージャー相当 |
/dev |
デバイスファイル | /dev/sda, /dev/null, /dev/urandom | デバイスマネージャー |
/opt |
追加アプリ | サードパーティソフトのインストール先 | C:\Program Files |
/boot |
ブートローダー | vmlinuz, initramfs, grub/ | (Windows対比なし) |
/root |
rootユーザーのホーム | rootアカウントの個人ファイル | 管理者アカウントのホーム |
/etc、/var、/usr の3つを押さえておけば、Linuxの日常的なサーバー管理作業の9割はカバーできます。関連記事:Linuxの絶対パスと相対パスの違い
関連記事:LinuxのDNS設定を変更する方法|resolv.confとnmcliで確実に設定する手順
関連記事:dfコマンドでディスク容量を確認する方法|使用率の見方や容量不足の対処も
関連記事:bashの設定ファイル完全解説|/etc/profile・~/.bash_profile・~/.bashrcの違いと使い分け
無料の「Linuxサーバー構築入門マニュアル(図解60ページ)」をプレゼントしています。
ディレクトリ構造を知ったら、次はサーバーをゼロから組み立てる力を、初心者が迷わない順序で学べる一冊です。
無料マニュアルを受け取る >>
<PR> おすすめ書籍
ディレクトリ構造の先にあるLinuxの仕組みそのものを理解したい方へ。まず無料メルマガで学ぶのが第一歩ですが、手を動かしながら内部動作を学べる次の一冊が、理解を一段深めてくれます。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 次のページへ:Linuxのsystemdによる起動プロセスを理解する|journalctl -bとsystemctl list-unitsで確認する方法
- 前のページへ:Linuxの絶対パスと相対パスの違い|/からのパス記法を初心者向けに解説
- この記事の属するカテゴリ:【Linux入門】初心者のための基礎知識・講座へ戻る

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