【Linux】FHS-ディレクトリ構造とは?必須のファイルと役割

この記事からわかること
- Linux:FHS(Filesystem Hierarchy Standard)とは?
- ルートディレクトリ直下のディレクトリ群の種類と役割
- 「/bin」「/boot」「/dev」「/etc」など
index
[open]
\ アプリをリリースしました /
FHS(Filesystem Hierarchy Standard)とは?
FHS(Filesystem Hierarchy Standard:ファイルシステム階層標準)とはLinuxにおけるディレクトリ構造が定義されている『標準』の指標です。
具体的にいうとディレクトリの名称や役割、構造が定められており標準化されたその定義に基づくことでディストリビューション(配布されているOS製品)が異なっても共通の認識で開発や操作を行えるようになっています。
FHSにもバージョンがあり2015年6月3日に更新された「3.0」が現在でも最新のようです。
ルートファイルシステム
ファイル構造はルートファイルシステムと呼ばれ最上層を/
で表しルートディレクトリと呼びます。ルートディレクトリ配下に色々な役割を持ったディレクトリが配置され、ツリー状の階層構造が出来上がっています。
ルートディレクトリ配下のディレクトリ一覧を表示させるにはコマンドラインでls
コマンドを実行することで確認できます。 引数に渡すのは/
(ルートディレクトリ)を指定します。これは使用しているOS(ディストリビューション)によって多少異なるので参考にしてみてください。
CentOSの場合
MacOSの場合
標準化されているディレクトリ一覧
bin
参考記事:bin-コマンド一覧
コマンドライン上で実行する一般ユーザーでも使用可能なコマンドファイル(BINaries)が配置されていきます。cat
やecho
、ls
など基本的でよく使うコマンドはここに登録されています。 使用しているOSによって多少異なりますが、コマンドの実態の場所を検索できるwhich
コマンドを使うと以下のように返ってきます。
「/bin」に登録されているコマンドを確認する
boot
初期起動時に必要な処理を実行する設定、ブートローダー(※1)やカーネル(※2)などが配置されます。
※1 ブートローダー:起動時に実行する処理(ブートストラップ)を読み込むためのプログラム
※2 カーネル:OSの心臓部分でソフトウェアとハードウェアを繋ぐ架け橋
ちなみに初期起動時に一番最初に実行されるのはBIOS(バイオス:Basic Input Output System)です。ハードウェアの管理や日付や時刻の設定、各種デバイスの使用権限などを設定、制御しています。
dev
コンピュータに組み込まれているパーツ類(ハードディスク(HDD)/SSD/メモリーなど)や周辺機器のハードウェア類(キーボード/プリンタ/マウス/CD-ROMなど)のデバイスファイルが配置されます。
Linuxではこれらのデバイスもテキストファイルなどのようにファイルで管理しており、その名称をデバイスファイルと呼びます。デバイスファイルは「udev(Userspace Device management)」という仕組みによって接続時に自動生成されます。
etc
主にシステムやアプリケーションに関わる設定ファイルが配置されます。
ユーザー情報が格納されている/etc/passwd
ファイルや各ユーザーのログインパスワードが格納されている/etc/shadow
ファイルなどが設置されています。
home
各ユーザーが自由に扱えるディレクトリが配置されます。一般ユーザーを追加するとここにそのユーザー名のディレクトリが作成され、その中に「desktop」や「downloads」などのディレクトリが存在します。
lib
共有ライブラリ(library)ファイルが配置されます。プログラミング言語(pythonやjava)やデバイスドライバなどが主に格納されています。
Macの場合はlib
ではなくLibrary
でした。
Macの場合もっと馴染み深い「Fonts」や「Bluetooth」などがここに格納されています。
Mac OSの場合
media
CR-ROMやDVDなどのリムーバブル媒体(取り外しが可能なメディア媒体)のマウントポイントが配置される。
マウントポイントとは接続したメディア(リムーバブル媒体)などにコンピュータからアクセスできるようにファイルの1つとして追加(マウント)するためのディレクトリなどのこと。
mnt
一時的にマウント(MouNT)されるマウントポイントが配置される。
opt
オプション(OPTion)のソフトウェアやパッケージなどのプログラムが配置されます。
LinuxやMacOSパッケージ管理システムの1つhomebrewなどもここに格納されています。homebrewはプログラミング言語やソフトウェアのバージョン管理、インストールなどを管理しやすくしてくれるシステムです。
Macの場合
proc
カーネルに関する情報やプロセス(PROCess)の状態などにアクセスできる仮想的なファイルシステムです。
仮想的に作成されているディレクトリなので実際のファイルとして存在する訳ではありません。procの中にはCPUの情報が記述される「cpuinfo」やメモリ情報が記述される「meminfo」などが格納されています。lspci
やlsusb
などのコマンドで該当ファイルを表示させることもできます。
パス | 概要 |
---|---|
/proc/cpuinfo | cpuの情報 |
/proc/interrupts | IRQの情報 |
/proc/ioports | I/Oの情報 |
/proc/meminfo | メモリの情報 |
/proc/modules | モジュールの情報 |
/proc/bus/usb/ | USBの情報 |
/proc/bus/pci/ | PCIの情報 |
root
スーパーユーザーである「root」のホームディレクトリです。一般ユーザーではここにはアクセスできません。
run
動作させた時に実行される一時的なデータなどが配置されます。
拡張子が「.pid」である実行中のプロセスに関する情報が格納されたファイルなどが主に格納されています。
sbin
システムに関するコマンドファイル(System BINaries)が配置されます。
カーネルの処理を確認できるdmesg
コマンドやファイルシステムをマウントするmount
、シャットダウンするためのshutdown
など、システムに直接関わるようなコマンドが数多く格納されています。
tmp
テンポラリファイル(temporary files:一時的に作成されるファイル)が配置されるディレクトリです。
usr
User Services and Routines(:ユーザーサービスとルーチン)の略称。全ユーザーが使えるコマンドや共有で使用するライブラリなどを格納していきます。/usr/
配下にさらにディレクトリが設置されていて役割が分かれています。
usr/bin
ユーザーが使用する一般的なコマンドが配置されています。エイリアスやviエディタ、ファイルのzip形式での圧縮コマンドなどが格納されています。
usr/sbin
システムに関するコマンドファイルが配置されています。
usr/lib
共有ライブラリが配置されています。
usr/local
ローカルシステムに使用されるコマンドなどが配置されています。
usr/share
アーキテクチャ(x86など)に依存しないファイルが配置されています。
usr/src
カーネルのソースコードなどが配置されています。
var
ログファイルやプリンタのスプールなど中身が可変的(VARiable)なファイルが配置されます。usrディレクトリと同じくさらに中にディレクトリが分かれています。
var/cache
キャッシュファイルが配置されます。
var/lock
ロックファイルが配置されます。
var/log
ログファイルが配置されます。
var/run
稼働中のシステムに関する情報を保持したファイルが格納されます。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。