Linux ディレクトリ構造の分析
初めて Linux サーバーにログインし、ls / で見慣れない短い名前のディレクトリがずらりと並んでいるのを見ると、たいていは少し面食らうものです。このノートでは、ルートディレクトリ配下のよく見かけるディレクトリの役割を一通り整理し、「何をどこに置くべきか」をはっきりさせます。
なぜディレクトリはこういう形なのか
Linux のディレクトリレイアウトは適当な取り決めではなく、背後には FHS(Filesystem Hierarchy Standard、ファイルシステム階層標準)という規格があります。実行プログラム、設定、ログ、一時ファイルなど、各種類のファイルをどのディレクトリに置くべきかを定めたものです。こうすることの利点は直接的です——
- パッケージマネージャーはファイルをどこにインストールすべきかを把握でき、アンインストール時もきれいに削除できます。
- 運用担当が問題を調査するとき、設定やログの場所を推測する必要がなく、
/etcと/var/logを見ればまず外しません。 - ディストリビューション間でおおむね一貫性が保たれ、経験を持ち運べます。
自分のマシンのルートディレクトリのレイアウトを見るには、コマンド 1 つで十分です。
# ルートディレクトリ直下の第 1 階層のディレクトリを表示
ls -l /
主要ディレクトリを順に見る
1)プログラムとコマンド
/bin:よく使うコマンドとバイナリ実行プログラムが格納されています。ls、cp、cat のような、すべてのユーザーが使う基礎コマンドです。
/sbin:管理者ユーザーだけが実行できるコマンドとプログラムのフォルダで、典型的にはネットワーク設定、ディスクパーティション、システムのシャットダウン・再起動関連のツールです。一般ユーザーの PATH には通常含まれていません。
/usr:ユーザーアプリケーションとファイルを配置するフォルダディレクトリです。名前から "user" と誤解されがちですが、実際は Unix System Resources の意味です。システムにインストールされるソフトウェアの大部分はここにあり、/usr/bin、/usr/lib、/usr/share にそれぞれプログラム、ライブラリ、共有データが置かれます。多くのモダンなディストリビューションでは usr マージが行われており、/bin は実は /usr/bin を指すシンボリックリンクです。
# usr マージ済みのディストリビューションではシンボリックリンクの関係が確認できる
ls -ld /bin /sbin
/opt:optional、つまり「選択可能」の意味で、サードパーティソフトウェアをインストールする場所です。パッケージマネージャーが管理する /usr と違い、/opt は完全なディレクトリ構造を持つ商用ソフトウェアや、手動で展開してインストールする大型ソフトウェアに向いています。ソフトウェアごとにサブディレクトリを 1 つ使うので、削除も手間いらずです。
2)設定とデバイス
/etc:システムの設定ファイルとサブディレクトリ群を格納する専用の場所です。システムの挙動を変えるときは基本的にここをいじります。/etc/fstab、/etc/hosts、/etc/ssh/ などです。システム設定をバックアップするなら、このディレクトリが要となります。
/dev:Device(デバイス)の略で、Linux システムに現在接続されている外部デバイスです。Linux は「すべてはファイルである」という設計に従っており、外部デバイスへのアクセスもファイルアクセスと同じ方式です。ディスクは /dev/sda、端末は /dev/tty、さらに /dev/null のような特殊デバイスもあります。
/boot:Linux システムを起動するためのカーネルファイルを格納しており、リンクファイルとイメージファイルが含まれます。ブートローダー(GRUB など)の設定もここにあります。このディレクトリは軽々しく触ってはいけません。誤ってファイルを削除するとシステムが起動しなくなる可能性があります。
3)ユーザーデータ
/home:ユーザーフォルダです。システムアカウントごとに異なる名前のフォルダが作成されます。たとえばユーザー alice のホームディレクトリは /home/alice です。
/root:管理者ユーザーのホームディレクトリです。/home の下にないことに注意してください。こうしておけば、/home をマウントしているパーティションに問題が起きても、root ユーザーは正常にログインして障害対応ができます。
4)ランタイムと可変データ
/var:頻繁に変動するファイル、たとえばシステムログなどのファイルが格納されています。/var/log にはログ、/var/lib にはサービスの永続データ(データベースファイルはよくここにあります)、/var/cache にはキャッシュが置かれます。ディスクが満杯になったとき、最初に確認すべきなのはたいていここです。
# /var 配下で最も容量を消費しているサブディレクトリを特定する
du -sh /var/* | sort -rh | head
/tmp:一時ファイルディレクトリです。プログラムの実行中に生成される一時ファイルを格納し、どのユーザーでも書き込めます。多くのディストリビューションは、長期間アクセス・変更・修正されていないファイル(たとえば 10 日)を定期的に掃除するので、残しておきたいものをここに置いてはいけません。
/run:一時ファイルディレクトリで、システム起動以降の一時的な情報、たとえばサービスの PID ファイルや socket ファイルを保存します。システムを再起動すると、このディレクトリ配下のファイルは掃除されます。通常はメモリ上にマウントされており、本質的に揮発性です。
混同しやすいディレクトリの組み合わせ
- /tmp と /run:どちらも一時ディレクトリですが、
/tmpはアプリケーションとユーザー向け、/runはシステムサービスのランタイム状態向けです。/runは再起動で必ず空になり、/tmpはディストリビューションのポリシー次第です。 - /opt と /usr/local:どちらもパッケージマネージャーの外でソフトウェアをインストールする場所です。手動でコンパイル・インストールするソフトウェアは慣習的に
/usr/local(/usrと並行した構造)に、ひとまとまりで展開するサードパーティソフトウェアは/optに置きます。 - /root と /:前者は root ユーザーのホームディレクトリ、後者はファイルシステム全体のルートです。名前は似ていますが、まったくの別物です。
「ディスクが満杯」といった問題を調査するときは、まず /var/log と /tmp を見ましょう。あるソフトウェアの設定を探すときは、まず /etc 配下で同名のディレクトリを検索しましょう。具体的なパスを覚えるよりも、ディレクトリの役割を覚えるほうが役に立ちます。
まとめ
Linux のディレクトリ構造は本質的に「ファイルの性質」による分類です。プログラムは /bin と /usr に、設定は /etc に、可変データは /var に、一時ファイルは /tmp と /run に、ユーザーデータは /home に置かれます。この分類ロジックを理解すれば、見知らぬマシンを前にしても、探しものをすばやく見つけられるようになります。
COMMENTS