2.4.2 ハードリンク
ハードリンクによって、ファイルシステム上の同じファイル、つまり同じinodeを複数の名前から参照できます。nameと同じファイルを参照するすべての名前を検索するには、「-samefile name」を使います。
- テスト: -samefile name
ファイルがnameと同じinodeへのハードリンクである場合に真になります。これは、nameとそのファイルが同じファイルシステム上にあり、同じデバイス番号を持つことを意味します。
シンボリックリンクをたどる「-L」も指定している場合を除き、「-xdev」によって検索を1つのファイルシステムに限定できます。ハードリンクは1つのファイルシステムの外を指せないため、不要な検索を減らすのに役立ちます。
「-L」が有効な場合、シンボリックリンクをたどる動作は、「-samefile」基本要素のname引数にも、ディレクトリ階層の走査で調べる各ファイルにも適用されます。そのため、「find -L -samefile name」は、nameが参照するファイルへのハードリンクとシンボリックリンクの両方を見つけます。
findでは、inode番号によるファイル検索も行えます。
これは、ファイルシステムの問題を診断するときに役立つ場合があります。たとえば、fsckやlsofはinode番号を表示する傾向があります。ソフトウェアの種類によっては、ログメッセージにinode番号が現れることもあります。
「ls -li」「stat」「find -ls」を実行すると、ファイルのinode番号と、そのファイルへのリンク数を確認できます。
「-inum NUM」を使うと、inode番号NUMへのハードリンクを検索できます。検索開始ディレクトリの下にファイルシステムのマウントポイントがある場合は、「-L」も使っている場合を除き、「-xdev」を使ってください。ファイルへのハードリンクは同じファイルシステムにある必要があるため、「-xdev」を使うと不要な検索を省けます。ファイルシステムを参照してください。
- テスト: -inum n
ファイルのinode番号がnの場合に真になります。「+」と「-」の修飾子も使えますが、役立つことはまれです。
「-inum」基本要素は、inode番号と指定したnを単純に比較することに注意してください。そのため、複数のファイルシステムで特定のinode番号を検索すると、その番号を持つファイルが複数見つかる場合があります。しかし、ファイルシステムごとにデバイス番号が異なるため、それらが同じファイルへのハードリンクであるとは限りません。
したがって、多くの場合は、このオプションより「-samefile」を使うほうが簡単です。
findでは、「-links」を使って、リンク数が特定の値であるファイルを検索することもできます。
ディレクトリには通常、少なくとも2つのハードリンクがあります。親ディレクトリ内でその名前を持つエントリと、そのディレクトリ内の.エントリです。サブディレクトリがある場合、それぞれにも親ディレクトリへの..というハードリンクがあります。
.と..のディレクトリエントリは、findのコマンド行に指定しない限り、通常は検索されません。
- テスト: -links n
ファイルにn個のハードリンクがあります。
- テスト: -links +n
ファイルにn個より多くのハードリンクがあります。
- テスト: -links -n
ファイルにn個より少ないハードリンクがあります。