获奖+答案公布:Linux符号链接和硬链接的小测试

December 09, 2023
测试
测试
测试
测试
4 分钟阅读

假设目录“~”下面不存在a, b, c这样的文件,在该目录下面执行如下命令:

题目步骤

$ echo hello > a

$ ln a b

$ ln -s a c

$ rm a

$ echo world > a

请问接下来执行“cat b”输出什么?执行"cat c”输出什么?解释为什么!详细论述其中关于inode等的变化。

虽然很多童鞋的答案都是正确的,但是获奖名单只能有三人。众多童鞋的回答参见做题免费送书:关于Linux符号链接和硬链接的小测试的留言。

我们根据答案回复的先后顺序,答案的精细度、准确度和完整度,选取了3个优胜者。获奖名单与答案如下:

wsl

“cat b” 的输出是 hello, “cat c” 是world 首先解释为什么”cat b“ 输出是hello, b 文件是a 文件的硬链接,而硬链接实际 是同一个文件,因为他们的inode number 是相同的。比如笔者的测试环境: $ ls -i a 473972 a $ln a b $ ls -i b 473972 b 既然是同一个文件,a 和b 的文件内容相同,虽然第四步删除了文件a 但是inode 引用数只是减了1, 并不为0,inode 并没有删除。 下面解释为什么 “cat c”的输出 首先创建了一个名为c 的软连接,c 本质上是一个新文件(inode number不同于a)c 的文件内容是a的路径 $ ls -i c 480580 c $cat c hello 此时cat c,默认读一个link 文件, 内核FOLLOW_LINK, 也就是会读c 指向的文件a的内容。 第四步删除了a, 此时c 文件本身不受影响,c文件内容也不受影响,但是如果此时cat c 则会输出: cat: c: No such file or directory 因为FOLLOW link目标文件,目标文件已经不存在了。最后一步重新创建了一个a 文件, cat c 会输出新创建文件的内容。本质上c 文件始终没有发生变化,他的内容是就是a 的path.

红烧的威化饼

cat b显示的是hello cat c显示的是world 原因 echo hello > a 新建a(设inode number为10),内容为hello ln a b,创建硬链接b,和a共用一个inode,不同的dentry ln -s a c 创建软连接c指向a,不与a共用inode rm a 删除a文件,由于inode10有两个reference,只把它的reference减1,不删除数据,但是由于a没了, 所以c这个软连接失效。 echo world > a 新建一个新文件,假设inode number为20,内容为world,此时a和b是两个不同的文件,c是软链接指向a

桂雄~

$ echo hello > a 这里会创建a文件,此时a文件内容是hello $ ln a b 这里创建了一个硬链接b,b与a指向同一个inode $ ln -s a c 这里创建了一个软链接c,c的文件的实际内容就是a文件的路径 $ rm a 删除a文件对b没有影响,不过这个inode的引i_nlink就会减一,但是c文件的由于保存的是a文件路径名指向,因此a文件被删了后,c文件的指向就不存在了,此时cat c会报文件不存在的错误。 $ echo world > a 此时echo world又创建一个文件,文件名是a,但是此时的inode已经是重新申请到的,a与b已经不是硬链接关系了,但是c文件的软链接文件a又存在了,因此此时c文件cat的话就不会报错了 cat b的话会输出hello 因为这是在最初a创建的时候写进去的,然后b跟他共享了inode,因此文件内容还是hello cat c的话输出world 这里c是新建的a的软链接,这个a文件已经不是原来的a文件,c文件软链接的也不是原来的a文件,而是最后输入world的时候创建的新的a文件。而c文件软链接到了a文件,因此cat到的就是新的a文件内容。

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多