特定のファイルへのすべてのハードリンクをどのように見つけることができますか?つまり、ハードリンクが与えられたら、同じファイルへの他のすべてのハードリンクを見つけますか?
ファイルシステムはファイルへのハードリンクを追跡しますか?
ファイルのinodeには、ハードリンクではなくファイルへのハードリンクの数だけが格納されます。そうですか?
答え1
指定されたファイルが呼び出され、/path/to/file
現在のディレクトリの下に存在するすべてのハードリンクを見つけるには、次のようにします。
find . -samefile /path/to/file
上記はGNU findでテストされました。-samefile
そうですがPOSIXではない、それもサポートしますMac OSXを探すそしてFreeBSDを探す。
文書
GNUからman find
:
-samefile name
ファイルは、name と同じ inode を参照します。 -L が適用されると、ここにシンボリックリンクを含めることができます。
検索とlsの違い
ls -l
ファイルまたはディレクトリへのハードリンクの数を一覧表示します。ディレクトリの場合、この数は表示された結果の数よりも大きいですfind . -samefile
。その理由はGNU検索マニュアル:
ディレクトリには通常、親ディレクトリに指定されたエントリと、ディレクトリ
.
内のエントリの2つ以上のハードリンクがあります。ディレクトリにサブディレクトリがある場合、各サブディレクトリには..
親ディレクトリへのハードリンクがあります。findコマンドラインに記載されていない限り、ディレクトリエントリ
.
は通常検索されません。..
ls -l
要約すると.
、..
ディレクトリは別々のハードリンクと見なされますが、find . -samefile
そうではありません。