了解硬链接

了解硬链接

我在主目录中创建了一个文件。

touch demo
echo "This is demo" > demo

现在我在 /tmp 中创建了一个硬链接

ln /home/leo/demo demoLink

现在检查 inode 时使用

ls -ltri demoLink

它显示与原始文件相同的索引节点号。我能消化这个。但硬链接的文件类型是常规的!怎么会是普通文件呢?它与原始文件有什么不同?我读取的文件是匿名数据块。那么这两个文件指向相同的数据?硬链接和原始文件的文件大小是否相同?

答案1

硬链接实际上并不是一个“链接”。指向同一文件 inode 的第一个、第二个、第三个、第 N 个硬链接都彼此相等。 “原始条目”和“硬链接”之间没有区别。

比如说,如果创建 file1,然后将硬链接 file2 添加到同一文件 inode,则没有方法可以找出到给定 inode 的哪个链接是原始的。

IE

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的链接数。该字段可用于理解当“删除”文件(实际上是硬链接的目录条目之一)但空间使用情况没有改变时的“神秘”情况:)

如果想查找给定文件的所有硬链接,“查找”工具有选项“-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

相关内容