TIL

Today I Learned. 知ったこと、学んだことを書いていく

ハードリンクとシンボリックリンク

ハードリンクとシンボリックリンク

ハードリンクを理解するにはまず、iノード番号について理解しなければならない

iノード番号

Linuxでは、ファイルに対して重複しないiノード番号が割り当てられる

全てのファイルに対応するiノードが存在している

iノードにはファイルの情報が格納されている(ファイル名は入っていない)

Linuxファイルシステムではファイルの実体がiノード内のiノード番号で管理されている

ディレクトリ(ディレクトリエントリ)にはファイルの実体のiノードファイル名が格納されている

ユーザーがパスでアクセスすると、ディレクトリの中から一致するファイル名に対応するiノードを探し、必要な情報を渡している

一つのファイルの実体に対して複数の名前でアクセスできるようにするハードリンクという機能がLinuxには存在する

ハードリンク

ハードリンク
ファイルのiノード番号とファイル名のつながり のこと

複数のハードリンクがある場合、ファイルに対してすべて同じ扱いになる(元からあるハードリンクと作成したハードリンクは同じ扱いということ(?))

また、ハードリンクと元ファイルのiノードは全く同じであるため、それぞれのファイルの区別がつかない

一つのハードリンクに対して変更を加えるとその変更は他のハードリンクにも反映される

全てのハードリンクが削除されないと、ファイルの本体は削除されない

異なるファイルシステムや、ディレクトリに対してはハードリンクを作成できない

シンボリックリンク

ファイルの実体の位置情報を保存しているファイル

ファイルの実体とシンボリックリンクは完全に区別されている

ハードリンクと違って、ディレクトリにもシンボリックリンクを作成できる

さらに、異なるファイルシステムにも作成できる

シンボリックリンクWindowsのショートカットに近いもの

ファイルに対してシンボリックリンクがあっても、元のファイルは削除出来てしまう

その場合、シンボリックリンクはリンク切れを起こしてしまう


参考文献

ハードリンクとシンボリックリンクを理解する

ハードリンクとシンボリックリンク