我在主目录中创建了一个文件。
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