Linux入門① ディレクトリ構造


こんにちは最近サブPCにarch linuxをインストールして遊んでいる Tetsu です。 今までLinuxについて体系的に学ぶことなく使っていたのですが、 きちんと学びたいと思ったのでLinux入門シリーズとしてLinux基礎を体系的に学んでいこうと思います。

記念すべき第1回はFHSとディレクトリ構造について学んでいこうと思います。

概要

この記事の目的はLinuxのディレクトリ構造を理解して使いこなせるようにすることです。 Linuxのディレクトリ構造は標準仕様であるFHSに基づいています。ですから、まずはFHSの考え方から読みといていき、 それぞれのディレクトリの意図を理解したうえで使えるようになりましょう。

FHSとは

FHS(Filesystem Hierarchy Standard)とはLinux Foundationによって定められているLinuxのファイル、ディレクトリの 配置に関する標準仕様です。 Linuxのディストリビューションやソフトウェアは基本的にこの仕様にしたがってファイルやディレクトリを配置します。

FHSの基礎となる考え方

Linuxのファイルシステムで扱うファイルは2つの軸で分類することができます。 1つは「shareable or unshareable」、2つめは「static or variable」です。

shareableとは「異なるホストマシン間」で共有可能であるということです。具体例をあげると、/etcはホストマシン特有の情報が入っているので他のマシンでは使えないのに対して、/optはインストールされたソフトウェアが入っている場所なので他のマシンと共有が可能です。

staticとは実行ファイルなどの基本的にread-onlyで中身が変化しないファイルが置かれる場所であるのに対して、variableは書き換えの起りうるファイルが置かれる場所です。具体例としては/usr/binや/optは静的なファイルが置かれていますが、/var/logや/tmpは書き込みが頻繁に発生するファイルが置かれています。

shareableunshareable
static/usr/etc
/opt/boot
variable/var/mail/var/run
/var/spool/news/var/lock

各ディレクトリの意味

/bin

ルート以外のファイルシステムがマウントされていないときに管理者、通常ユーザ関係なく必要なコマンドのバイナリファイルが配置されます。ルート以外のファイルシステムがマウントされていないのはシステムのブート時などです。原則として通常ユーザだけが使うコマンドは/usr/binに配置します。

ex. ls, cat, chmodなど

/boot

/bootにはブート時に必要な静的ファイルが格納されています。

ex. EFIやGRUB(ブートローダ)、カーネルなど

/dev

デバイスのインターフェースをファイルとして配置しています。Linuxではすべてをファイルとして扱うので、これらのインターフェースによってファイル操作によってハードウェアの入出力を行うことができます。

ex. /dev/nvme(NVMeのSSD)、 /dev/tty(仮想端末)

/etc

設定ファイルが配置されています。スクリプトファイルを含むことはありますが、実行可能なバイナリファイルは含みません。

ex. /etc/fish, /etc/X11

/home

ユーザが作業したりファイルを保存したりするホームディレクトリを格納しているディレクトリです。

ex. /home/taro, /home/jiro

/lib

/binや/sbinのバイナリのために必要なライブラリを配置するディレクトリです。/bin同様にシステムの起動時に必要なものが格納されます。

ex. /lib/libc.so.6(C標準ライブラリ), /lib/modules(カーネルモジュール)

/opt

追加でインストールされたソフトウェアが格納されるディレクトリです。 hogeというアプリケーションをインストールするとき、実行ファイルは/opt/hoge/binとなり設定ファイルは/etc/hoge/内に格納することになります。

/sbin

システムのブートや復旧などのシステム管理用のツールが格納されているディレクトリです。 先に紹介した/binと異なるのは通常のユーザが実行しないものを置いている点です。管理用のツールは/sbin以外にも/usr/sbinや/opt/sbinなどにも配置されます。

ex. fastboot, init, mkfs, reboot

/usr

/usrはシステムを利用しているユーザ間で共有され、書き換えがされないディレクトリです。 /usr/localはローカルマシンのために用意されていて手元のマシンのみで使っているソフトウェアやコマンドなどを格納します。

/var

variable(変化しうる)なファイルを格納するのが/varです。変化しうるものとしてはspool(一時的なデータ)やログなどです。

ex./var/spool, /var/log, /var/run

最後に(FHSについて調べてみた感想)

今回はLinux入門の初回としてファイルシステムの標準仕様であるFHSについて学びました。 「Linuxは複数のユーザに利用されることを前提としていてること」、「ホストマシン特有のもの/そうでないもの」などの今まで気にしたことのないことが沢山あって理解するのがとても大変でした。ベースとなるUNIXの思想について理解を深めたほうが良い気がしたので、次はUNIXの哲学について学ぼうと思います。また、usr階層はファイルシステムの中でも大きな部分なのでより詳しく学ぼうと思います。

参考文献

Linux Foundation, Filesystem Hierarchy Standard(https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html)

ChatGPT(文章の修正等に使用)

0 いいね