web-dev-qa-db-ja.com

ハード/ソフトリンクに関する情報はどこに保存されますか?

* nixシステムは、特定のiノードへのハードリンクの数に関する情報をどこに保存しますか?それについての情報が見つかりません。ハードリンクとはどこにでもありますが、iノード関連のものに触れる少し高度な情報はめったにありません。

Iノードはリンク数に関する情報を格納しますが、どこから取得しますか? iノード番号だけを知ることで、すべてのリンク(ハードとソフトの両方)を見つけることができますか?

5
Mike

ハードリンクカウントはiノードに格納されます。ファイルが作成されると1から始まり、linkシステムコールが成功するたびに1ずつ増加し、unlinkシステムコールが成功するたびに1ずつ減少します。

同じファイルへのすべてのハードリンクを見つける、つまり特定のiノードにつながるすべてのパス名を見つける唯一の方法は、ファイルシステム全体を調べてiノード番号を比較することです。 iノードはディレクトリエントリを指していません。

ディレクトリは特殊なケースです。ハードリンクは厳格なルールに従います。 (一部のUNIXバリアントでは、rootが管理者の危険にさらされてこれらのルールをバイパスできます。)ディレクトリへのハードリンクは、その.エントリ、その子の..エントリ、およびその親ディレクトリ(親)の1つのエントリです。ディレクトリの..エントリが到達するディレクトリです)。

ファイルを指すすべてのシンボリックリンクを見つける方法はありません。それらは、マウントされていないファイルシステムを含め、どこにでも存在する可能性があります。

GNUまたはFreeBSDfindを使用すると、find /some/dir -samefile /path/to/fooを使用して、/path/to/fooの下にあるファイル/some/dirへのすべてのハードリンクを検索できます。-Lオプションを使用すると、そのファイルへのすべてのソフトリンクとハードリンクを見つけることができます。-inumの代わりに-samefile述語を使用してiノードを番号で見つけることができます。