ハードリンクについて学ぶ

ハードリンクについて学ぶ

私のホームディレクトリにファイルを作成しました。

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つ)が「削除」されているがスペース使用量が変わらない「不思議な」状況を理解するために使用できます。 :)

特定のファイルへのすべてのハードリンクを見つけるには、「検索」ツールに「-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

関連情報