ホームディレクトリにファイルを作成しました。
touch demo
echo "This is demo" > demo
/tmpにハードリンクを作成しました
ln /home/leo/demo demoLink
今、inodeをチェックすると
ls -ltri demoLink
元のファイルと同じ inode 番号が表示されています。それは理解できます。しかし、ハード リンクのファイル タイプは標準です。これは標準ファイルなのでしょうか? 元のファイルとどう違うのでしょうか? ファイルは匿名のデータ ブロブであると読みました。では、これら 2 つのファイルは同じデータを指しているのでしょうか? ハード リンクと元のファイルのファイル サイズは同じですか?
答え1
ハード リンクは実際には「リンク」ではありません。同じファイル inode への 1 番目、2 番目、3 番目、N 番目のハード リンクはすべて互いに等しくなります。「元のエントリ」と「ハード リンク」に違いはありません。
たとえば、file1 を作成し、同じファイル inode にハード リンク file2 を追加した場合、特定の inode へのどのリンクがオリジナルであるかを確認する方法はありません。
つまり
cryo@CryoNest:~ $ touch file1
cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві 8 20:24 file1
cryo@CryoNest:~ $ ln file1 file2
cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві 8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві 8 20:24 file2
cryo@CryoNest:~ $ rm file1
cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 1 cryo cryo 0 кві 8 20:24 file2
cryo@CryoNest:~ $ ln file2 file1
cryo@CryoNest:~ $ ls -il file*
9505656 -rw-r--r-- 2 cryo cryo 0 кві 8 20:24 file1
9505656 -rw-r--r-- 2 cryo cryo 0 кві 8 20:24 file2
ご覧のとおり、inode 番号 (9505656) と inode に格納されているすべての属性は、すべてのハード リンクで同じです。サイズ、日付、モードなどが含まれます。
3 番目のフィールドに注目してください。これは inode へのリンクの数です。このフィールドは、ファイル (実際にはハード リンクのディレクトリ エントリの 1 つ) を「削除」してもスペースの使用量が変わらないという「不可解な」状況を理解するために使用できます :)
指定されたファイルのすべてのハードリンクを検索したい場合は、「find」ツールに「-inum」オプションがあります。
cryo@CryoNest:~ $ ln file1 tmp/file3
cryo@CryoNest:~ $ find . -maxdepth 2 -inum 9505656 -ls
9505656 0 -rw-r--r-- 2 cryo cryo 0 кві 8 20:24 ./tmp/file3
9505656 0 -rw-r--r-- 2 cryo cryo 0 кві 8 20:24 ./file1