FHS(Filesystem Hierarchy Standard)とは

FHS(Filesystem Hierarchy Standard、ファイルシステム階層標準)は、Linuxディストリビューションにおいて、どのディレクトリにどのような種類のファイルを配置すべきかを定めた標準規格です。FHSに沿ってファイルが配置されていることで、ディストリビューションが違っても「設定ファイルは/etcにある」「ログは/var/logにある」といった予測が可能になり、管理者やソフトウェアが一貫した方法でファイルを扱えるようになります。

主要なトップレベルディレクトリの役割

ディレクトリ役割
/binすべてのユーザーが使う基本的なコマンドの実行ファイル(多くのディストリビューションで/usr/binへの統合が進んでいる)
/bootカーネルやブートローダ等、起動に必要な静的ファイル
/devデバイスファイル(ハードウェアにアクセスするための特殊ファイル)
/etcシステム全体の設定ファイル(ホスト固有の設定)
/home一般ユーザーの個人用ディレクトリ
/lib起動やコマンド実行に必要な共有ライブラリ・カーネルモジュール
/mediaリムーバブルメディア(USBメモリ、CD-ROM等)用のマウントポイント
/mnt管理者が一時的にファイルシステムをマウントするためのポイント
/opt追加のアプリケーションソフトウェアパッケージ
/proc実行中のプロセスやカーネルの動作状況に関する疑似ファイルシステム
/rootroot(スーパーユーザー)のホームディレクトリ
/run起動以降の揮発性ランタイムデータ
/sbinシステム管理用のコマンドの実行ファイル
/srvこのシステムが提供するサービス用のデータ
/sysカーネルやデバイスに関する情報を提供するsysfs用の疑似ファイルシステム
/tmp一時ファイル(再起動後も保持されることを前提にしない)
/usrユーザー向けのプログラム・共有データを格納する、システムの二次的な階層
/varログ・キャッシュ・アプリケーションの状態など、頻繁に変化するデータ

設定ファイルは/etc、変化するデータ(ログ等)は/var、追加インストールしたソフトウェアは/optという大まかな役割分担を押さえておくことが、試験対策上も実務上も重要です。

locate:あらかじめ作成したデータベースから高速に検索する

locateは、findとは異なり、あらかじめ作成しておいたファイル名のデータベースを検索することで、ファイルシステム全体をその場で走査せずに高速に検索できるコマンドです。

locate httpd.conf     # データベースから "httpd.conf" を含むパスを検索する

locateは最新のファイルシステムの状態を直接見るわけではなく、データベース作成時点のスナップショットを検索するため、直近で作成・削除されたファイルは検索結果に反映されないことがあります。

updatedb:locateが使うデータベースを更新する

updatedbは、locateが検索するデータベースを、実際のファイルシステムの状態に合わせて再構築するコマンドです。mlocateを使用する環境では、データベースは多くの場合/var/lib/mlocate/mlocate.dbに作成されます。定期更新は、ディストリビューションや設定により、cronまたはsystemdタイマーなどで実行されます。

/etc/updatedb.conf:検索対象から除外する設定

/etc/updatedb.confは、mlocate系の環境などで、updatedbがデータベースに含めるべきではないディレクトリ・ファイルシステムの種類を指定する設定ファイルです。

設定項目役割
PRUNEPATHSデータベースへの登録から除外するディレクトリのパスを指定する(例:/tmp・/var/tmp等)
PRUNEFSデータベースへの登録から除外するファイルシステムの種類を指定する(ネットワークファイルシステム等)
updatedb    # mlocate系の環境では/etc/updatedb.confの設定に従って、locate用のデータベースを再構築する

whereis:コマンドの実行ファイル・マニュアル・ソースを探す

whereisは、指定したコマンドについて、実行ファイル・マニュアルページ・ソースコードの場所をまとめて検索するコマンドです。

オプション効果
-b実行ファイル(バイナリ)のみを検索する
-mマニュアルページのみを検索する
-sソースコードのみを検索する
whereis ls           # lsコマンドの実行ファイル・マニュアル・ソースの場所を表示する
whereis -b ls          # 実行ファイルの場所のみを表示する

whereisは、標準的な既知の場所(/usr/bin・/usr/share/man等)を検索する点が、which(PATH上のみを検索する)との違いですtype・whichによるコマンド検索については「コマンドラインの操作」の技術解説記事で扱っています。[1]。

find・locate・whereis・which・typeの使い分け

コマンド検索対象特徴
find指定したディレクトリ以下のファイル全般その場でファイルシステムを走査するため確実だが、locateより低速になりやすい
locateあらかじめ作成されたファイル名のデータベース高速だが、データベース更新(updatedb)以降の変更は反映されない
whereis特定コマンドの実行ファイル・マニュアル・ソースコマンドに関する複数種類のファイルをまとめて検索する
whichPATH上の外部コマンドの実行ファイルPATH上で見つかる実行可能ファイルのフルパスを調べる
typeシェルから見たコマンドの正体全般ビルトイン・エイリアス・外部コマンドいずれも判定できる

補足

  1. type・whichによるコマンド検索については「コマンドラインの操作」の技術解説記事で扱っています。 ↩