こんにちは、インフラエンジニアのryuです。
初めてLinuxのサーバーにログインしたとき、cd / をして ls を打ってみたことはありますか?
bin etc usr var と、何の略か分からない名前がずらっと並びます。ここで「どれを開けばいいんだろう」と手が止まる人は多いです。
でも、このディレクトリの並びにはちゃんとした決まりがあります。決まりを知っておくと、初めて触るサーバーでも「設定ならこのあたり」「ログならこのあたり」と見当がつくようになります。
この記事では、未経験のインフラエンジニアが最初に押さえておきたいディレクトリを、役割ごとに整理していきます。
Linuxのディレクトリ構成には標準がある¶
まず、なぜどのLinuxでも似たようなディレクトリが並んでいるのかを説明しておきます。
Linuxには、FHS(Filesystem Hierarchy Standard:ファイルシステム階層標準)という取り決めがあります。どのディレクトリに何を置くかを定めた文書で、現在の版は3.0です。
FHSは、ファイルやディレクトリの置き場所を決めておくことで、ソフトウェアやユーザーが「どこに何があるか」を予測できるようにするための標準です。
Ubuntu、Debian、Red Hat Enterprise Linux(RHEL)、Rocky Linuxなど、主要なディストリビューションはおおむねこの標準に沿っています。細かいところで差はありますが、大枠は同じです。
だからこそ、1台のサーバーでディレクトリの意味を覚えれば、ほかのサーバーでもその知識がそのまま使えます。これがディレクトリ構成を覚える一番のメリットです。
まずはルートディレクトリを眺めてみよう¶
実際のサーバーで、いちばん上の階層を見てみましょう。
$ cd /
$ ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
表示される順番や数はディストリビューションによって少し違います。ただ、etc var usr home tmp あたりはほぼ必ずあります。
ls や cd の使い方に自信がない場合は、先に lsコマンドの使い方 や cdコマンドの使い方 を読んでおくと、この先の話がスムーズに入ってきます。
主要ディレクトリの役割を一覧で見てみよう¶
ルート直下のディレクトリを、役割ごとに表にまとめました。最初から全部覚える必要はありません。
| ディレクトリ | 主な役割 | 現場で触る頻度 |
|---|---|---|
/etc |
システムやソフトウェアの設定ファイル | とても多い |
/var |
ログやキャッシュなど、運用中に中身が変わるデータ | とても多い |
/home |
一般ユーザーのホームディレクトリ | 多い |
/tmp |
一時ファイル置き場 | ときどき |
/usr |
インストールされたプログラムやライブラリ | ときどき |
/opt |
パッケージ管理の外から入れたソフトウェア | 現場による |
/root |
rootユーザーのホームディレクトリ | ときどき |
/proc /sys |
カーネルやプロセスの情報を見せる仮想的な場所 | 調査のとき |
/boot |
起動に必要なカーネルなど | まれ |
/dev |
ディスクなどのデバイスファイル | まれ |
インフラエンジニアの仕事で特に多いのは、上の2つです。設定を変えるなら /etc、何かが起きたときに原因を探すなら /var/log。まずはこの2か所を確実に覚えてください。
よく使うディレクトリを1つずつ見ていこう¶
ここからは、表の中でも現場で触ることが多いディレクトリを、もう少し詳しく見ていきます。
/etc:設定ファイルが集まる場所¶
/etc には、OSやサーバーソフトウェアの設定ファイルが集まっています。
たとえば次のようなファイルは、インフラエンジニアなら何度も開くことになります。
/etc/hosts # ホスト名とIPアドレスの対応
/etc/resolv.conf # 参照するDNSサーバー
/etc/passwd # ユーザーアカウントの一覧
/etc/ssh/sshd_config # SSHサーバーの設定
/etc/nginx/nginx.conf # nginxの設定(入れている場合)
/etc/fstab # 起動時にマウントするディスク
ソフトウェアごとにサブディレクトリが作られていることが多いので、「nginxの設定はどこだろう」と思ったら、まず /etc/nginx/ があるかを確かめるのが近道です。
/etc/hosts の中身については hostsファイルとは? で、/etc/passwd については ユーザーを一覧で表示させる方法 で詳しく扱っています。
/etc のファイルは、書き換えるとサーバーの動きが変わります。編集する前には、元のファイルをコピーしておく習慣をつけましょう。
$ sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.20261001
日付を付けておくと、あとで「いつの時点の設定か」がすぐに分かります。
/var と /var/log:運用中に増えていくデータ¶
/var は variable(変化する)の略です。サーバーが動いている間に中身が増えたり書き換わったりするデータが置かれます。
その中でも一番よく見るのが /var/log です。OSやサーバーソフトウェアのログがここに出力されます。
| パス | 中身の例 |
|---|---|
/var/log/messages |
システム全般のログ(RHEL系) |
/var/log/syslog |
システム全般のログ(Ubuntu・Debian系) |
/var/log/secure |
ログインや認証のログ(RHEL系) |
/var/log/auth.log |
ログインや認証のログ(Ubuntu・Debian系) |
/var/log/nginx/ |
nginxのアクセスログとエラーログ |
同じ役割のログでも、ディストリビューションによってファイル名が違う点に注意してください。RHEL系とUbuntu系の両方を触る現場は多いので、両方の名前を知っておくと慌てずに済みます。
最近のディストリビューションでは、systemdの journalctl コマンドでログを見る場面も増えています。ただ、アプリケーションのログは今でも /var/log の下にファイルとして出ることが多いです。
/var にはほかにも、パッケージのキャッシュ(/var/cache)や、データベースなどのデータ(/var/lib)が入ります。MySQLのデータが /var/lib/mysql にあるのは、その一例です。
ログやデータが増え続けると、/var があるディスクが満杯になることがあります。ログの肥大化については logrotateが効かない原因を順番に確かめる で詳しく書いているので、あわせて読んでみてください。
/home と /root:ユーザーの作業場所¶
/home の下には、一般ユーザーごとのホームディレクトリが作られます。ryu というユーザーなら /home/ryu です。
一方、rootユーザーのホームディレクトリは /home/root ではなく /root にあります。ここは初心者が戸惑いやすいところです。
ログインした直後にいる場所がホームディレクトリで、~ という記号でも表せます。
$ whoami
ryu
$ echo ~
/home/ryu
$ sudo -i
# echo ~
/root
/tmp:消えても困らないファイルの置き場¶
/tmp は一時ファイル置き場です。誰でも書き込めますが、再起動のタイミングや一定期間の経過で中身が消えることがあります。
どのタイミングで消えるかはディストリビューションや設定によって違います。なので、残しておきたいファイルを /tmp に置かないのが基本です。作業の途中で取ったバックアップを /tmp に置いたまま、あとで探しても見つからない、というのはよくある失敗です。
/usr と /opt:プログラムの置き場所¶
/usr には、パッケージ管理(dnf や apt)でインストールしたプログラムやライブラリが入ります。ls や grep の実体も /usr/bin の下にあります。
/usr/local は、パッケージ管理を通さずにそのサーバー独自で入れたものを置く場所です。ソースからビルドしたソフトウェアは、ここに入ることが多いです。
/opt は、ベンダーが配布するソフトウェアをまとめて置く場所として使われます。監視エージェントや商用製品が /opt/製品名/ に入っているのを見かけることがあります。
どちらを使うかは現場の方針によります。初めて入るサーバーで「このソフトはどこに入っているんだろう」と思ったら、/usr/local と /opt の両方を見てみましょう。
/mnt・/media・/srv:残りのディレクトリも軽く押さえておこう¶
ここまでで紹介しなかったディレクトリにも、それぞれ役割があります。頻度は高くありませんが、名前の意味だけは知っておくと安心です。
/mnt は、管理者が一時的にディスクやファイル共有をマウントするための場所です。たとえばNFSの共有を一時的に確認したいときに、/mnt の下にマウントして中身を見る、という使い方をします。
/media は、USBメモリやDVDのような取り外しできる媒体が自動でマウントされる場所です。デスクトップ用途では使いますが、データセンターのサーバーで見ることはあまりありません。
/srv は、そのサーバーが外に提供するデータを置く場所とされています。Webサーバーのコンテンツを /srv/www に置く、といった使い方です。ただ、実際には /var/www に置く現場も多く、どちらを使うかは構築したときの方針次第です。
/run は、起動してから今までの間だけ必要な情報が置かれる場所です。プロセスIDを書いたファイル(PIDファイル)などがここに作られ、再起動すると中身は消えます。
読むのに権限が必要なファイルもある¶
もう1つ知っておきたいのが、ファイルの権限です。/etc や /var/log の中には、一般ユーザーでは読めないファイルがあります。
$ cat /var/log/secure
cat: /var/log/secure: 許可がありません
$ ls -l /var/log/secure
-rw-------. 1 root root 51234 Oct 1 09:00 /var/log/secure
$ sudo cat /var/log/secure # sudo を付けると読める
認証の記録やパスワードのハッシュが書かれたファイルは、rootしか読めないようになっています。「許可がありません」と出ても、ファイルが壊れているわけではありません。
ただし、何でも sudo vi のように編集できる形で開くのは避けてください。中身を確かめたいだけなら sudo less で読むようにして、編集は変更が必要なときだけにとどめるのが安全です。権限のエラーについては ディレクトリやファイルでpermission deniedが出る時の対処方法 でも解説しています。
実体のファイルがない /proc と /sys¶
/proc と /sys は、ほかのディレクトリと少し性質が違います。ディスク上にファイルが保存されているわけではなく、カーネルがその場で情報を見せている仮想的なファイルシステムです。
中身を読むと、今のサーバーの状態がそのまま分かります。
$ cat /proc/cpuinfo | grep "model name" | head -1 # CPUの種類
$ cat /proc/meminfo | head -3 # メモリの量
$ cat /proc/loadavg # ロードアベレージ
$ ls /proc/1234/ # プロセスID 1234 の情報
top や free といったコマンドも、内部ではこうした情報を読んで表示しています。ロードアベレージの数字の読み方は、ロードアベレージが高いのにCPUは暇そうなとき で解説しています。
/proc や /sys のファイルは、基本的には読むだけにしておきましょう。一部のファイルは書き込むとカーネルの設定が変わってしまうので、手順書で指示されたとき以外は触らないのが安全です。
覚えておきたい注意点と確かめ方¶
ここまでで主要なディレクトリの役割は押さえられました。最後に、実務でつまずきやすいポイントを3つ紹介します。
/bin と /usr/bin が同じ場所を指していることがある¶
最近の多くのディストリビューションでは、/bin や /sbin が /usr/bin や /usr/sbin へのシンボリックリンクになっています。これは「/usr統合(usrmerge)」と呼ばれる変更です。
$ ls -ld /bin
lrwxrwxrwx. 1 root root 7 Jun 21 2024 /bin -> usr/bin
古い解説記事で「/bin には起動に必要な最低限のコマンドだけがある」と書かれていても、今のサーバーでは実体が同じ場所ということがあります。古い情報と見比べるときは、この点を頭に入れておくと混乱しません。
ディスクの使用量はディレクトリごとに確かめる¶
ディスクが満杯になったとき、どのディレクトリが原因かを調べることがあります。そういうときは df と du を組み合わせます。
$ df -h # ファイルシステムごとの使用率
$ sudo du -sh /var/* 2>/dev/null # /var の下のディレクトリごとの使用量
/var や /home が別のディスクやパーティションに分けられているサーバーもあります。df -h の結果で、どのディレクトリがどのディスクに載っているかも一緒に確かめておきましょう。
場所が分からないときの探し方¶
「このソフトの設定ファイルはどこだろう」というときに使えるコマンドもあります。
$ which nginx # コマンドの実体の場所
$ rpm -ql nginx | grep conf # RHEL系:パッケージが置いたファイル一覧
$ dpkg -L nginx | grep conf # Ubuntu系:パッケージが置いたファイル一覧
$ sudo find /etc -name "*.conf" -mtime -7 # 7日以内に変わった設定ファイル
特に rpm -ql や dpkg -L は便利です。パッケージがどのディレクトリにファイルを置いたかが一覧で出てくるので、ディレクトリ構成の勉強にもなります。
また、man hier と打つと、ディレクトリ構成の説明をサーバー上で読めます。英語ですが、困ったときに手元で確認できる公式の説明です。
ディレクトリ構成を覚えるための練習方法¶
表を眺めるだけだと、なかなか頭に残りません。おすすめは、実際にサーバーを触りながら「このファイルはなぜここにあるのか」を考えることです。
たとえば、nginxをインストールしたら次の3つを探してみてください。
| 探すもの | 見当をつける場所 |
|---|---|
| 設定ファイル | /etc/nginx/ |
| ログファイル | /var/log/nginx/ |
| 実行ファイル | /usr/sbin/nginx |
設定は /etc、変わるデータは /var、プログラムは /usr。この3つの分け方が見えてくると、ほかのソフトウェアでも同じ考え方で探せるようになります。
Linuxのコマンドにまだ慣れていない場合は、Linuxの基本コマンド で手を動かしてから戻ってくると理解しやすいです。何から学べばいいか迷っている人は、Linuxの勉強は何から始めたらいいの? も参考にしてみてください。
InfraAcademyの Linuxロードマップ では、ディレクトリ操作から設定ファイルの編集、ログの確認まで、実際にコマンドを打ちながら順番に学べるようにしています。ひとりで学ぶと順番に迷いやすい部分なので、道筋がほしいときに使ってみてください。
まとめ¶
最後に、この記事のポイントを振り返っておきます。
- Linuxのディレクトリ構成は、FHSという標準に沿って決まっている
- 設定ファイルは
/etc、ログは/var/logにある。まずはこの2つを覚える - ログのファイル名は、RHEL系とUbuntu系で違うことがある
/tmpの中身は消えることがあるので、残したいファイルは置かない/procと/sysは、カーネルが情報を見せている仮想的な場所- 場所が分からないときは、
rpm -qlやdpkg -L、man hierで確かめられる
ディレクトリの役割が分かると、初めてのサーバーでも迷う時間がかなり減ります。次にサーバーへログインしたときは、/etc と /var/log の中を少しのぞいてみてください。



