私のホームディレクトリにファイルを作成しました。
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