* nixシステムは、特定のiノードへのハードリンクの数に関する情報をどこに保存しますか?それについての情報が見つかりません。ハードリンクとはどこにでもありますが、iノード関連のものに触れる少し高度な情報はめったにありません。
Iノードはリンク数に関する情報を格納しますが、どこから取得しますか? iノード番号だけを知ることで、すべてのリンク(ハードとソフトの両方)を見つけることができますか?
ハードリンクカウントは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ノードを番号で見つけることができます。