Linux链接文件造成的绝对路径问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_41104353/article/details/82718323

前几天老师在课上遇到了一个绝对路径的bug,最后发现是和链接文件有关。我觉得很有意思,特意来复现了一下。这复现过程可真是难受死了,好了,话不多说,下面是我复现的过程。

第一步

首先打开我们的terminal终端,默认是进入了 /home/windear 目录。我们在这个目录下新建一个 newfile 文件,其内容是 This is a file.
新建文件

因为我看了一下自己文件里好像并没有链接到目录的文件,所以自己要来创建链接文件。

第二步

我们移动到 / 目录处,然后执行 mkdir -p targetdir/subdir 来创建一个二级目录。从字面我们可以看到,我们要链接到的目录就和其有关。
创建文件夹

第三步

然后我们执行 ln -s /targetdir/subdir /linkdir来在 / 目录下创建一个链接文件 linkdir 链接到 /targetdir/subdir 。我们使用 ls -l 查看,发现最后的确是链接成功了。说到这步可真是心酸死了,俩文件位置写反了,换了好几个环境才发现,花了我大把大把的时间啊。
创建链接文件

第四步

  1. 现在就是复现bug的时候了。我们首先cd进入此链接文件,然后使用绝对路径看看 newfile 的内容,这样毫无疑问可以看到。
  2. 然后我们使用相对路径 cat ../home/windear/newfile 来看,怎么会提示看不到了呢?我们现在在 /linkdir 下(图中应该有pwd这一步的,但是忘了,感兴趣的可以检验检验),.. 就成了 / ,然后 home/windear/newfile 应该没毛病,怎么会提示找不到呢?
  3. 其实这和 linkdir 是链接文件有关,怎么检验呢?我们想到 /linkdir 链接到的是 /targetdir/subdir 那么我们现在可不可能其实在 /targetdir/subdir 目录下呢?我们来尝试一下:
  4. 我们使用 cat ../../home/windear/newfile 来尝试,因为如果我们是在 /targetdir/subdir 目录下,那么到 newfile 文件相对路径是要走两个 .. 的。最后的结果告诉我们,我们的猜想是正确的。
    复现bug

猜你喜欢

转载自blog.csdn.net/sinat_41104353/article/details/82718323