はじめ
前回までで、ファイルシステムや仮想ファイルシステムについて理解を深めてきました。今回はファイルシステムの中でも、少し特殊なものについて見ていきたいと思います。
FHS
特殊なファイルシステムについて見る前に、ルートディレクトリ以下のディレクトリ配置について説明します。Linuxのディレクトリ構造は以下のようなFilesystem Hierarchy Standard(FHS)に従って配置されています。
上の図では、主要なディレクトリの一部のみを示しています。図のように、ルートディレクトリ配下のサブディレクトリは明確な役割を持っています。FHSの構造に従ってファイルを配置することで、運用管理性が向上します。
ここから、ファイルシステムの話に移ります。ルートディレクトリ以下の任意のディレクトリに、ファイルシステムをマウントすることができます。このとき、ルートディレクトリにはルートファイルシステムがマウントされます。そして、ルートファイルシステムの中のディレクトリをまた別のファイルシステムでマウントすることができます。
このように、1つのコンピュータシステムで同時に複数のファイルシステムを扱うことができます。
メモリファイルシステム
では、ここから特殊なファイルシステムについて扱っていきます。一つ目はメモリファイルシステムです。一般的なファイルシステムは、ファイルの内容をディスクに書き込みますが、メモリファイルシステムでは、ファイルの内容をメモリに書き込みます。そのため、コンピュータの電源を消すとメモリファイルシステムの中身のファイルは失われます。また、tmpディレクトリに大きなファイルを配置するとメモリを圧迫することになるため注意が必要です。
メモリファイルシステムの例には、tmpfsなどがあります。FHSの例ではtmpディレクトリにtmpfsがマウントされます。
疑似ファイルシステム
二つ目は疑似ファイルシステムです。疑似ファイルシステムのデータに関しても、メモリファイルシステム同様、ディスク上には存在しません。疑似ファイルシステムの例には、devtmpfsやprocfsがあります。FHSではそれぞれ、devディレクトリとprocディレクトリにマウントされています。
それぞれのディレクトリについてもう少し詳細に見てみましょう!
devディレクトリ
devディレクトリにはデバイスファイルが配置されています。デバイスファイルとは、コンピュータに接続されたデバイスをファイルのように扱う仕組みのことです。linuxカーネルがデバイスを検知するとdevtmpfsにデバイスが登録され、/dev/以下に対応するデバイスファイルが表示されるようになります。
また、/devには物理的なデバイスが存在しない疑似デバイスのデバイスファイルも配置されています。疑似デバイスには以下のようなものがあります。
/dev/pts/*
/dev/ptsには接続している仮想端末のデバイスファイルが置かれるようです。試しにGUIからターミナルを開いて、以下のコマンドを発行してみます。
tty
#実行結果
#/dev/pts/0
すると、上記のように現在接続しているターミナルのデバイスファイルは/dev/pts/0であることがわかります。試しに以下のコマンドも打ってみます。
echo Hello > /dev/pts/0
#実行結果
#Hello
echoの結果を/dev/pts/0にリダイレクトしたのにも関わらず、ターミナル上に「Hello」と表示されました!これは一体どういうことでしょうか?実は以下のようなことが起こっています。
デバイスファイル「/dev/pts/0」にHelloがリダイレクトされると、「/dev/pts/0」はターミナル1をデバイスとみなして操作します。その結果ユーザが操作しているターミナル上に「Hello」が表示されることになります。
このように、デバイスファイルを用いることで、デバイスや疑似デバイスをファイルのように扱うことができるようになります。
/dev/null
/dev/nullに書き込んだデータは破棄されます。コマンドの出力が不要な場合などに/dev/nullにリダイレクトすることで、出力を破棄できます。
/dev/zero
/dev/zeroを読み込むと0が返されます。空のファイルを作成する際などに用います。例えば検証用にサイズの大きなファイルを作りたい場合などで用いることができます。
procディレクトリ
procディレクトリ配下のファイルにアクセスすると、linuxカーネルの情報を出力することができます。OracleDBのシリーズで「動的パフォーマンスビュー」というものがありましたが、それに近いことをファイルの形で提供するというものです。
例えば/proc/meminfoを表示することでメモリの情報を確認することができます。
まとめ
今回のパートでは以下のことを扱いました。
・Linuxのディレクトリ構造はFHSに従っている
・特殊なファイルシステムとして、メモリファイルシステムと疑似ファイルシステムが存在する
・/tmpではファイルの内容をメモリに書き込む
・/devにはデバイスファイルが配置される
・/procの配置されるファイルからはカーネルやシステムの情報を確認できる


