为何触摸失败?

为何触摸失败?

我肯定忽略了一些显而易见的东西。

这有效:

[root@host2 /]# cd /home/mysite/public_html/../logs 
[root@host2 /home/mysite/logs]# touch x

为啥不是这样呢?

[root@host2 /]# touch /home/mysite/public_html/../logs/x
touch: cannot touch `/home/mysite/public_html/../logs/x': No such file or directory

答案1

其中一个目录很有可能/home/mysite/public_html/../logs/实际上是一个符号链接。cd在这种情况下,大多数现代 shell 内置的命令都会发挥一点魔力,将cd ..您带到“逻辑”父目录——这会考虑到您是如何到达那里的。

当您尝试时touch /home/mysite/public_html/../logs/x,您无法获得这种魔力。

考虑:

$ ls -l /home/lars
public_html -> /var/www/lars
logs/

如果我cd /home/lars/public_html实际上在 内/var/www/lars。因此从技术上讲,../logs不存在(因为logs我想要的目录实际上在 中/home/lars,而不是 中/var/www,后者是 的“真正”父级)/var/www/lars

答案2

public_html是指向完全不同地方的符号链接。作为 shell,它bash以不同于许多其他程序的方式跟踪路径中的符号链接。尝试以下操作:cd /home/mysite/public_html然后运行pwd(bash 命令)和/bin/pwd(程序)。当touch尝试使用该路径时,它将转到/var/www/sites/mysite/该链接指向的任何地方,然后从那里向上移动一个目录以到达logs/... 但却找不到/var/www/sites/logs/

相关内容