为什么触摸失败?

我必须失去一些明显的东西。

这工作:

[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 

很有可能/home/mysite/public_html/../logs/中的一个目录实际上是一个符号链接。 内置在大多数现代shell中的cd命令在这种情况下会有一点魔力,所以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的“真正的”父目录。

public_html是一个完全不同的符号链接。 作为一个shell, bash跟踪path中的符号链接的方式与许多其他程序不同。 试试这个: cd /home/mysite/public_html然后运行pwd (bash命令)和/bin/pwd (该程序)。 当touch尝试使用这个path时,它会到/var/www/sites/mysite/或者那个链接点的任何地方,然后从那里上去一个目录来得到logs/ …只是不能find/var/www/sites/logs/