我位于目录 ~/www
中,并且正在尝试编辑 ~/.bashrc
。
我执行了 vi ../.bashrc
并且 Vim 创建了一个新的空文件。
我执行了 cd ..
和 vi .bashrc
并且打开了正确的文件。
这应该发生在 Linux 中吗?
编辑:
我刚刚在 ~/www
中尝试了 touch ../.bashrc
,但找不到应该创建的文件。
最佳答案
如果当前目录是符号链接(symbolic link),则会发生这种情况。
当您 cd
到符号链接(symbolic link)时,..
将引用符号链接(symbolic link)目标的父级:
$ ln -s /tmp mylink
$ cd mylink
$ pwd
/home/me/mylink
$ realpath .
/tmp
$ realpath ..
/
但是,bash 会因为聪明而让你感到困惑,并且让 cd ..
表现不同。这是帮助光盘
:
`..' is processed by removing the immediately previous pathname component back to a slash or the beginning of DIR.
这意味着当您cd ..
时,bash会神奇地将您从/home/me/mylink
带到/home/me
。这种差异非常令人困惑,但也非常有用。
如果你使用cd -P ..
,这个魔法不会被调用,它会把你从/home/me/mylink
带到/
,就像所有其他工具一样。
当您意识到 ..
绝不是表示“父目录”的特殊语法时,这会更容易。每个目录实际上都有一个诚实的 Linus 条目,名为 ..
在较旧的 Unix 系统上,这只是一个方便的约定,mkdir/foo/bar
也会自动 ln/foo/foo/bar/..
可以根据需要删除或重新链接。如今,它是由文件系统严格执行的。
显然,/tmp/..
链接到 /
,并且这不会仅仅因为您按照符号链接(symbolic link)到达 /tmp
.
关于linux - Linux 中两条看似等效的路径,一条有效,一条无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39730965/