【Linux】FHS-ディレクトリ構造とは?必須のファイルと役割
この記事からわかること
- Linux:FHS(Filesystem Hierarchy Standard)とは?
- ルートディレクトリ直下のディレクトリ群の種類と役割
- 「/bin」「/boot」「/dev」「/etc」など
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
FHS(Filesystem Hierarchy Standard)とは?
FHS(Filesystem Hierarchy Standard:ファイルシステム階層標準)とはLinuxにおけるディレクトリ構造が定義されている『標準』の指標です。
具体的にいうとディレクトリの名称や役割、構造が定められており標準化されたその定義に基づくことでディストリビューション(配布されているOS製品)が異なっても共通の認識で開発や操作を行えるようになっています。
FHSにもバージョンがあり2015年6月3日に更新された「3.0」が現在でも最新のようです。
ルートファイルシステム
ファイル構造はルートファイルシステムと呼ばれ最上層を/
で表しルートディレクトリと呼びます。ルートディレクトリ配下に色々な役割を持ったディレクトリが配置され、ツリー状の階層構造が出来上がっています。
ルートディレクトリ配下のディレクトリ一覧を表示させるにはコマンドラインでls
コマンドを実行することで確認できます。 引数に渡すのは/
(ルートディレクトリ)を指定します。これは使用しているOS(ディストリビューション)によって多少異なるので参考にしてみてください。
CentOSの場合
$ ls /
bin boot erc lib media opt root sbin sys usr
book dev lib64 mnt proc run srv tmp var
MacOSの場合
$ ls /
Applications Users cores home sbin var
Library Volumes dev opt tmp
System bin etc private usr
標準化されているディレクトリ一覧
/ (ルートディレクトリ)
├── bin : 基本的なコマンドファイル
├── boot : 初期起動時に必要な処理の設定ファイル
├── dev : デバイスファイル
├── etc : システムに関わる設定ファイル
├── home : 各ユーザーのディレクトリ
├── lib : 共有ライブラリファイル
├── media : リムーバブル媒体のマウントポイント
├── mnt : 一時的なマウントポイント
├── opt : ソフトウェアやパッケージなどのプログラムが
├── proc : カーネルやプロセス情報にアクセスできる仮想的なファイルシステム
├── root : スーパーユーザーである「root」のホームディレクトリ
├── run : 動作させた時に実行される一時的なデータ
├── sbin : システムに関するコマンドファイル
├── tmp : テンポラリファイル(一時的に作成されるファイル)
├── usr : ユーザー共有のコマンドやライブラリ
└── var : ログファイルやスプールファイル
bin
参考記事:bin-コマンド一覧
コマンドライン上で実行する一般ユーザーでも使用可能なコマンドファイル(BINaries)が配置されていきます。cat
やecho
、ls
など基本的でよく使うコマンドはここに登録されています。 使用しているOSによって多少異なりますが、コマンドの実態の場所を検索できるwhich
コマンドを使うと以下のように返ってきます。
$ which mv
/bin/mv
$ which date
/bin/date
$ which echo // Mac OSの場合echoは組み込みコマンド
echo: shell built-in command
「/bin」に登録されているコマンドを確認する
$ ls /bin/
[ dash expr ln pwd sync
bash date hostname ls rm tcsh
cat dd kill mkdir rmdir test
chmod df ksh mv sh unlink
cp echo launchctl pax sleep wait4path
csh ed link ps stty zsh
boot
初期起動時に必要な処理を実行する設定、ブートローダー(※1)やカーネル(※2)などが配置されます。
※1 ブートローダー:起動時に実行する処理(ブートストラップ)を読み込むためのプログラム
※2 カーネル:OSの心臓部分でソフトウェアとハードウェアを繋ぐ架け橋
ちなみに初期起動時に一番最初に実行されるのはBIOS(バイオス:Basic Input Output System)です。ハードウェアの管理や日付や時刻の設定、各種デバイスの使用権限などを設定、制御しています。
dev
コンピュータに組み込まれているパーツ類(ハードディスク(HDD)/SSD/メモリーなど)や周辺機器のハードウェア類(キーボード/プリンタ/マウス/CD-ROMなど)のデバイスファイルが配置されます。
Linuxではこれらのデバイスもテキストファイルなどのようにファイルで管理しており、その名称をデバイスファイルと呼びます。デバイスファイルは「udev(Userspace Device management)」という仕組みによって接続時に自動生成されます。
$ ls /dev
aes_0 ptysa ttyq2
afsc_type5 ptysb ttyq3
ptyq0 rdisk0s2 ttyu9
ptyq1 rdisk0s3 ttyua
ptyq2 rdisk1 ttyub
etc
主にシステムやアプリケーションに関わる設定ファイルが配置されます。
ユーザー情報が格納されている/etc/passwd
ファイルや各ユーザーのログインパスワードが格納されている/etc/shadow
ファイルなどが設置されています。
$ ls /etc
aliases ntp_opendirectory.conf
apache2 pam.d
asl passwd
bashrc pf.conf
csh.login profile
localtime ssl
home
各ユーザーが自由に扱えるディレクトリが配置されます。一般ユーザーを追加するとここにそのユーザー名のディレクトリが作成され、その中に「desktop」や「downloads」などのディレクトリが存在します。
$ ls /home
ame hare yuki
lib
共有ライブラリ(library)ファイルが配置されます。プログラミング言語(pythonやjava)やデバイスドライバなどが主に格納されています。
Macの場合はlib
ではなくLibrary
でした。
$ ls /lib
NetWorkManager firewalld python2.7 modules
rpm udev debug kernel
sendmail systemd yum-plugin locale
Macの場合もっと馴染み深い「Fonts」や「Bluetooth」などがここに格納されています。
Mac OSの場合
$ ls /Library
Apple DriverExtensions LaunchDaemons Security
Application Support Extensions Logs Speech
Audio Filesystems Modem Scripts Spotlight
Bluetooth Fonts OSAnalytics StagedDriverExtensions
Catacomb GPUBundles Perl StartupItems
Components Input Methods Printers SystemProfiler
CoreAnalytics Java Ruby User TemplateWebServer
DirectoryServices Keychains ScriptingAdditions
media
CR-ROMやDVDなどのリムーバブル媒体(取り外しが可能なメディア媒体)のマウントポイントが配置される。
マウントポイントとは接続したメディア(リムーバブル媒体)などにコンピュータからアクセスできるようにファイルの1つとして追加(マウント)するためのディレクトリなどのこと。
$ ld /media
dvdrom
mnt
一時的にマウント(MouNT)されるマウントポイントが配置される。
opt
オプション(OPTion)のソフトウェアやパッケージなどのプログラムが配置されます。
LinuxやMacOSパッケージ管理システムの1つhomebrewなどもここに格納されています。homebrewはプログラミング言語やソフトウェアのバージョン管理、インストールなどを管理しやすくしてくれるシステムです。
Macの場合
$ ls /opt
homebrew
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」のホームディレクトリです。一般ユーザーではここにはアクセスできません。
$ ls /root
ls: cannot open directory /root: Permission denied
run
動作させた時に実行される一時的なデータなどが配置されます。
拡張子が「.pid」である実行中のプロセスに関する情報が格納されたファイルなどが主に格納されています。
$ ls /run
NetWorkManager log auditd.pid crond.pid
mount httpd sudo udev
sbin
システムに関するコマンドファイル(System BINaries)が配置されます。
カーネルの処理を確認できるdmesg
コマンドやファイルシステムをマウントするmount
、シャットダウンするためのshutdown
など、システムに直接関わるようなコマンドが数多く格納されています。
$ ls /sbin
dmesg halt mount newfs_udf
fsck launchd mount_msdos pfctl
fsck_apfs md5 mount_nfs ping
fsck_cs mknod mount_ntfs shutdown
fstyp mount_apfs mpioutil umount
tmp
テンポラリファイル(temporary files:一時的に作成されるファイル)が配置されるディレクトリです。
usr
User Services and Routines(:ユーザーサービスとルーチン)の略称。全ユーザーが使えるコマンドや共有で使用するライブラリなどを格納していきます。/usr/
配下にさらにディレクトリが設置されていて役割が分かれています。
usr/bin
ユーザーが使用する一般的なコマンドが配置されています。エイリアスやviエディタ、ファイルのzip形式での圧縮コマンドなどが格納されています。
$ ls /usr/bin
alias cal cd
less col locale
sudo nl uname
vi find vim
wall from perl
which git head
pp zip
usr/sbin
システムに関するコマンドファイルが配置されています。
usr/lib
共有ライブラリが配置されています。
usr/local
ローカルシステムに使用されるコマンドなどが配置されています。
usr/share
アーキテクチャ(x86など)に依存しないファイルが配置されています。
usr/src
カーネルのソースコードなどが配置されています。
var
ログファイルやプリンタのスプールなど中身が可変的(VARiable)なファイルが配置されます。usrディレクトリと同じくさらに中にディレクトリが分かれています。
var/cache
キャッシュファイルが配置されます。
var/lock
ロックファイルが配置されます。
var/log
ログファイルが配置されます。
var/run
稼働中のシステムに関する情報を保持したファイルが格納されます。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。