符号链接问题

执行如下命令:
mkdir foo
touch foo/a
ln -s ../foo foo/testdir
ls -l foo
total 0
-rw-r--r-- 1 root root 0 Dec 3 17:07 a
lrwxrwxrwx 1 root root 6 Dec 3 17:08 testdir -> ../foo

百度查看了符号链接(软链接)的内容后有点困惑,ln -s 建立符号链接 foo/testdir指向../foo,我进入foo目录cd testdir会进入哪个目录?
这么做怎么跟预期不符合??
cd testdir并没有进入foo文件夹,请教各位为何,在网上搜了下之后依然不理解。
在参考了网上的几个链接后,我自认为懂了符号链接和硬链接:

参考链接
链接1
链接2
链接3

后续:
开始参考了Charles的答案不是很明白,后面看到@陆卫和@Charles的评论,理解与整理如下,如果有任何疑问欢迎指出错误。感谢陆卫和Charles的解答。
图片描述
我们看到这构成循环的符号链接,虽然前面的路径显示一直/testdir/testdir等,但实际路径通过pwd -P可以看出一直是/root/apue.3e/filedir/foo目录。

man pwd
-P, --physical avoid all symlinks

阅读 2.7k
2 个回答

肯定是foo目录啊。
你说不是,那你进的是那个?
foo/testdir吧,你可以无限cd进去N多遍,但它还是foo目录啊,只是显示foo/testdir/testdir/.../testdir罢了

执行完命令后你的目录结果大概是这样的

t
└── foo
    ├── a
    └── testdir -> ../foo

你的软链接意思是这样的 :foo/testdir链接到当前目录的上一级目录下的一个名为foo的目录

可能有点绕,不过我觉得还是可以理解的。

问题:会进入那个目录?
答:当前目录foo。你按照上面的意思理一下,当前目录为foo,上一级目录为t , t 目录下一个名为foo的目录,那不就是回来了吗?至于为何链接会是相对的,因为它是成软链接啊/滑稽,下面是man ln

Symbolic links can hold arbitrary text; if later resolved, a relative link is interpreted in relation to its parent directory.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题