Linuxのファイルシステム
はじめに
- こんにちは。ふまたんです。今回の記事は、Linuxのファイルシステムについてまとめていきたいと思います。
- どの階層にどんなデータが格納されるのか、記事にしていこうと思います。
- LinuCの学習をしていてファイルシステムを問われる問題があり、各ファイルにどんな役割があるのかまとめようと思い、記事にしてみようと思いました。
Filesystem Hierarchy Standard (FHS)
ファイルシステムの詳細をまとめる前に、Filesystem Hierarchy Standard (FHS) について少しまとめていきます。
FHSとは、Linuxを含むUnix系のOSでの主なディレクトリとその内容を定めたものとなります。いわば、Unix系のファイルシステムのデファクトスタンダードといったところですね。
FHSのおかげで、異なるディストリビューションを使用することがあっても、主要なディレクトリ構造は変わらないので、設定ファイルなどは混乱することなく使用することが可能というわけです。
ファイルシステム
/
├── bin
├── boot
├── dev
├── etc
│ ├── opt
│ ├── X11
│ ├── sgml
│ └── xml
├── home
├── lib
├── media
├── mnt
├── opt
│ ├── vin
│ ├── doc
│ ├── include
│ ├── info
│ ├── lib
│ └── man
├── proc
├── root
├── run
├── sbin
├── srv
├── sys
├── tmp
├── usr
│ ├── bin
│ ├── include
│ ├── lib
│ ├── local
│ ├── sbin
│ ├── src
│ └── X11R6
└── var
├── cache
├── lib
├── lock
├── log
├── mail
├── run
├── spool
│ └── mail
└── tmp
FHSで定められているファイルシステムは上記の構造になっているそうです。
/bin
、/boot
、/dev
、/etc
、/home
、/lib
、/media
、/sbin
、/tmp
、/usr
、/var
について、まとめていこうと思います。
/bin
このディレクトリに格納されるデータは、シングルユーザモード[1]で必要となる一般ユーザ向けの基本コマンドの実行ファイルが格納されています。
例としては、cat
コマンドやls
コマンド、cp
コマンドなどです。
/boot
このディレクトリに格納されるデータは、ブートローダといったOSの起動に必要なファイルが格納されています。
例としては、カーネルなどです。
/dev
このディレクトリには、デバイスファイルが保存されます。
このディレクトリに含まれる主なデバイスファイルは3つあります。
- ブロックデバイスファイル
- データをブロック単位で読み書きできるデバイスの情報を書くのしているファイルです。
- 例としては、HDDやUSBメモリなどがあげられます。
-
/dev/sda
というデバイスファイルは、システムドライブを指すデバイスファイルです。
- キャラクタデバイスファイル
- 文字単位でデータを読み書きできるデバイスの情報を格納しているファイルです。
- 例としては、キーボードやシリアルポートがあげられます。
-
/dev/tty
というデバイスファイルにはターミナルデバイス(キーボードやディスプレイなどの入出力装置)を扱うためのデータが入っています。
- 仮想デバイスファイル
- このファイルは名前の通り、システム内で特定の役割を果たすデバイスです。ハードウェアは存在しません。
-
/dev/null
… 何も出力されないデバイスで、どんなデータを書き込んでも破棄されます。 -
/dev/zero
… 無限にゼロを出力するファイルです。メモリの初期化によく使われたりするそうです。
/etc
このディレクトリには、システムの設定ファイルが保存されます。
例えば...
-
/etc/passwd
ファイルには、ユーザID、ユーザ名、ホームディレクトリなどのシステム上のユーザ情報を管理するファイルが格納されています。 -
/etc/shadow
ファイルには、ユーザのパスワード情報が格納されています。/etc/passwd
ファイルにパスワード情報が含まれていそうですが、実は含まれていないんです。このファイルに保存されるパスワードは暗号化されます。 -
/etc/group
ファイルには、ユーザグループ情報が格納されています。 -
/etc/fstab
ファイルは、システム起動時にマウントされるファイルシステムを定義しているファイルです。システムのディスク構成に関する重要な情報が含んでいます。
/home
このディレクトリには、各一般ユーザのデフォルトの作業ディレクトリであるホームディレクトリが用意されているディレクトリです。
一般ユーザでログインすると初めからいるディレクトリでpwd
コマンドを実行すると、
/home/ユーザ名
上記のように表示されます。これがホームディレクトリです。
/lib
このディレクトリには、/lib
から予測できるように、ライブラリが保存されるディレクトリです。
システムやアプリケーションの動作に不可欠なコードが格納されたライブラリファイルが格納されています。
/media
このディレクトリには、CD-ROMやUSBメモリ、SDカードなどのマウント先情報が格納されます。
ユーザが特定の操作を行わずとも、自動でマウントしてくれるので、USBメモリなどを接続したらすぐにアクセスすることができます。
また、動的マウントのため、接続したらディレクトリを自動で作成してくれることに加え、USBメモリなどが切断されたらディレクトリを自動で削除もしてくれます。
/sbin
このディレクトリには、rootユーザ専用のコマンドが格納されているディレクトリです。
システム管理や運用に直接かかわるコマンドが保存されています。
例えば、システムをシャットダウンまたは再起動をするときに使用されるshutdown
コマンドや、新たなディスクやストレージデバイスをシステムに取り込むときに使用するmount
コマンド、ネットワークインターフェイスの設定を行うifconfig
コマンドなどがあります。
/tmp
このディレクトリには、一時的に利用するファイルが保存されます。
システムやインストール処理、バッチ処理などの時に一時ファイルを保存するときにこのディレクトリが使用されます。このディレクトリ内のデータは、各プロセスが終了した際に消してしまっても影響がありません。
/usr
このディレクトリには、主に一般ユーザが共用するコマンドやライブラリを格納します。
/usr
ディレクトリの階層の中にも上記で記載した/bin
や/sbin
などのディレクトリが存在しますが、ルートディレクトリ直下のディレクトリと/usr
の下のディレクトリでは、違いがあります。
ルート直下のディレクトリ内では、システムの初期段階(システムの起動など)に必要なプログラムが格納されているのに対し、/usr
下のディレクトリ内には、システム起動後の運用に必要なファイルが格納されています。
/var
このディレクトリには、頻繁に更新されるファイルが保存されます。
例えば、ログファイルやキャッシュデータ、システムが再起動しても保持される一時ファイルなどが保存されます。
ログファイルは/var/log
に保存されます。ほかにも、Apacheで静的Webサイトを立ち上げるときには、index.htmlはApacheをインストールした際に作成される、/var/www/html
に展開します。
まとめ
- Linuxには、ちゃんと決められたファイルシステムがあって、しっかりとまとめられているなと思いましたが、Windowsと違って、CLIがメインのOSであるため、やはりまだややこしいと感じてしまうところがあります。しかし、今回まとめてみたところ、記事を書く前に比べて少し考えを整理することができたのは良かった点かなと感じました。
- 今回まとめたものは、一部なので、これからも理解を深められるように調べたり、Linuxマシンを触ってみたりしていこうと思いました!
-
管理者ユーザのみがログインして操作できるモードのことです。 ↩︎
Discussion