Linuxにおけるファイルシステムとリンクについてまとめた
ファイルシステムについて
ファイルシステムはハードディスクやUSBメモリなどの記憶装置にデータを保存したり、保存したデータをファイルとして認識して利用するためのもの
Linuxにおいてファイルは、ファイルの実体を保存するデータ領域とファイルの属性情報を格納するiノード領域とで別で保存されている
iノードについて
iノードには以下のようなメタ情報が保存されている
- ファイルの種別
- パーミション
- オーナー
- グループ
- ファイルサイズ
- 作成日時
- リンクカウント
- ファイルの物理的な格納場所(ポインター)
iノードはユニークな識別番号を持っており、ファイルがディスクに保存されるとiノード番号が割り当てられる
このiノード番号を表示するには以下のコマンドを実行する
$ ls -i
871375 dir_1 871249 dir_2
識別番号がわかれば、
- iノードにアクセスができる
- iノードにアクセスできれば、実際のファイルの場所がわかる
ちなみにルートディレクトリのiノード番号は必ず2番であり、普段見ているディレクトリは、実は配下に含まれるファイル名とiノードのインデックスの一覧表が格納されている特殊なファイルである
リンク
ハードリンクとシンボリックリンク
リンクとは、1つのファイルやディレクトリを複数の名前で呼び出せるように別名をつける機能のこと
ファイルの実体と名前を結びつけるハードリンクと名前と名前を結びつけるシンボリックリンクが存在する
ハードリンク
ハードリンクは1つの実体に異なる実体につける別の名前で、元のファイルとリンクして作られたファイルの区別がない
作成されたリンクファイルは元ファイルとiノードを共有している
ファイルを削除してもファイルの実体は残りハードリンクは利用できる
lnコマンドで作成可能
$ ln ./file.txt ./file_link
$ ls -li
合計 0
871395 -rw-r--r-- 2 root root 0 4月 9 23:34 file.txt
871395 -rw-r--r-- 2 root root 0 4月 9 23:34 file_link
lsコマンドのl
オプションで確認できる2の数字はリンクカウントを表していて、iノードに結びついている名前の数を表す
普段使用しているrm
コマンドはファイル名を削除するコマンドで、名前の数が0になるとファイルの実体も一緒に消滅する
シンボリックリンク
windowsで例えると、デスクトップ上のショートカットのようなもので、リンク元である元ファイルの場所を示す
リンク元が消滅すれば、アクセスができなくなる
ハードリンクとは異なり、ディレクトリにもリンクが可能
lnとsオプションで作成可能
$ ln -s ./file.txt ./file_link
$ ls -li
合計 0
871395 -rw-r--r-- 1 root root 0 4月 9 23:34 file.txt
871535 lrwxrwxrwx 1 root root 10 4月 10 20:20 file_link -> ./file.txt
参考文献
Goならわかるシステムプログラミング
図解でパッとわかるLPIC/LinuC
ゼロからわかるLinuxコマンド200本ノック
Discussion