我一定错过了一些明显的东西。
这有效:
[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
,您不会获得这种魔力。考虑:
如果我
cd /home/lars/public_html
实际上在/var/www/lars
. 所以从技术上讲,../logs
不存在(因为logs
我想要的目录实际上是在,而/home/lars
不是./var/www
/var/www/lars
public_html
是指向完全不同的地方的符号链接。作为 shell,bash
跟踪路径中的符号链接与许多其他程序不同。试试这个:cd /home/mysite/public_html
然后运行pwd
(bash 命令)和/bin/pwd
(程序)。当touch
尝试使用该路径时,它将转到/var/www/sites/mysite/
或链接指向的任何地方,然后从那里向上一个目录到达logs/
...只是找不到/var/www/sites/logs/
。