ファイルがハードリンクかシンボルリンクであるかを確認するには? [コピー]

ファイルがハードリンクかシンボルリンクであるかを確認するには? [コピー]

にファイルがあります~/file.txt

以下でハードリンクを作成しました。

ln ~/file.txt ~/test/hardfile.txt

とシンボリックリンクファイル:

ln -s ~/file.txt ~/test/symfile.txt

今、

  1. どのファイルがハードリンクであるかを確認するには?
  2. ハードリンクが続くファイルを見つける方法は?

私たちはシンボリックリンクファイルを見つけることができますが、->ハードリンクはどうですか?

ここに画像の説明を入力してください。

答え1

-rw--r--r-- 2 kamix users 5 Nov 17:10 hardfile.txt
            ^

これはファイル内のハードリンクの数です。 「ハードリンク」は、実際には2つのディレクトリエントリの間にあり、実際には同じファイルです。次の出力を見るとわかりますstat

stat hardfile.txt | grep -i inode
Device: 805h/2053d      Inode: 1835019     Links: 2

リンク数が2であることにもう一度注意してください。これは、このファイルがどこかに別のリストがあることを示します。これが他のファイルと同じファイルであることを知っているのは、同じinode番号を持つからです。残念ながら、これが(inode番号を介して)見つけることができる唯一の方法です。

findinodeを使って(たとえばを使用して)ファイルを見つけるための最良の方法についていくつかのアイデアがあります。このQ&A

答え2

ハードリンクされたファイルには複数のリンク(2許可フラグの後に続くリンク)があります。stat次のコマンドを使用してこの情報を簡単に抽出できます。

$ stat --printf '%h\n' hardfile.txt
2

他の値と印刷方法の詳細については、stat()のマンページを参照してください。man 1 stat

関連情報