kakts-log

programming について調べたことを整理していきます

unixファイルシステムについて (詳解linuxカーネル第1章5節)

積読していた詳解linuxカーネルをまた読み進め始めました。 プロセススケジューラやらファイルシステムなどについて非常に詳しく書かれていて面白いです。
今回は第1章5節 ファイルについての項目を読んで整理してみました。

詳解 Linuxカーネル 第3版

詳解 Linuxカーネル 第3版

ファイルとは (1.5.1)

ファイルとは: バイト列として構造化された情報の入れ物のことです。unix|linuxカーネルはファイルの中身には関知しません。
ユーザの側からみたとき、ファイルはツリー構造の名前空間に系統立てられ、末端以外のツリーノードはすべてディレクトリを表します。

ハードリンクとソフトリンク (1.5.2)

unix環境のファイルシステム上でディレクトリとファイル名を結びつける手法としては、一般的にハードリンクとソフトリンクの2つがある。

ハードリンクについて

ディレクトリ中のファイル名は、ファイルハードリンク(file hard link)もしくはリンク(link)と呼ばれる。
1ファイルの実体に対し、同一ディレクトリ内もしくは異なるディレクトリ内に複数のリンクを持つことができます。
つまり、1ファイルの実体が複数のファイル名を持つことができます。

一般的に パス名p1によって識別されるファイルに対して新たにパス名p2の新しいファイルハードリンクを作成するときは、以下のコマンドで行うことができる。

$ ln p1 p2

ただし、ハードリンクの制約としては主に2つあり、以下の通りとなっている。
ディレクトリのハードリンクを作成することはできない。
・ハードリンクは同一ファイルシステム内に含まれるファイルに対してのみ生成できる。

この2つの制約はシステムの運用上非常にやっかいなものとなり、ソフトリンクは、この問題を解決するために導入される

ソフトリンクについて

ソフトリンク(soft link)は、一般的にシンボリックリンク(symbolic link)と呼ばれ、上述したハードリンクによる問題を克服するために導入されました。
ソフトリンクとは、別ファイルの任意のパス名を含むファイルで、パス名はどのファイルシステムのものを参照しても良い。
さらには、存在しないファイルを指定することも可能です。

パス名p1によって識別されるファイルに対して新たにパス名p2の新しいソフトリンクを作成するときは、以下のコマンドで行うことができる。

ln -s p1 p2

-s オプションを付けるだけでソフトリンクを作成することができます。
このコマンドを実行することにより、p2のディレクトリ部分を抽出した上で、そのディレクトリ以下にp2で指定したファイル名でシンボリックリンク型のエントリを生成する。
これにより、p2への参照は自動的にp1への参照へと変換される。

ファイルの種類について (1.5.3)

unix環境において ファイルには以下の種類があります。
- 通常ファイル
- ディレクトリ - シンボリックリンク - ブロック型デバイスファイル - キャラクタ型デバイスファイル - パイプ、名前付きパイプ(named pipe, FIFO) - ソケット

あるプログラムがデバイスファイルにアクセスするとき、そのデバイスファイルに対応するI/Oデバイスに直接アクセスする(詳解linuxカーネル第13章 参照)

パイプとソケットは、プロセス間通信に利用させる特殊ファイルとなる。

ファイルディスクリプタとiノードについて (1.5.4)

ファイルシステムがファイルを操作する際に必要な情報はiノード(inode)と呼ばれるデータ構造が持っている。
各ファイルはiノードを持っていて、ファイルシステムはiノードを利用してファイル操作を行う。
ファイルシステムで使われている関数はシステムによって異なるが、POSIX標準で定められている下記のものは必ず提供されているものとなります。

  • ファイルの種類
  • ファイルに関連付けられるハードリンク数
  • ファイルのバイト長
  • バイス番号
  • inode番号
  • 所有者のユーザID
  • ユーザグループID
  • 各種タイムスタンプ(inode変更時刻 最終アクセス時刻など)
  • アクセス権とファイルのモード