当我尝试更改重命名后的父目录时会发生什么情况?

当我尝试更改重命名后的父目录时会发生什么情况?

我有几个子目录很深,我输入cd ..并收到此错误:

cd: ..: No such file or directory

我很困惑——当然有一个父目录,我在里面!一点挖掘显示我的同事从我下面重命名了祖父母目录,当我尝试移动到我的父目录时,我收到了上述错误。我尝试像这样重现这个:

server|/n01/data/adf/temp/TEMPTEST/SUB1/SUB2> pwd
/n01/data/adf/temp/TEMPTEST/SUB1/SUB2
server|/n01/data/adf/temp/TEMPTEST/SUB1/SUB2> mv /n01/data/adf/temp/TEMPTEST /n01/data/adf/temp/NEWTEMPTEST
server|/n01/data/adf/temp/TEMPTEST/SUB1/SUB2> pwd
/n01/data/adf/temp/NEWTEMPTEST/SUB1/SUB2

现在我迷失了方向,改变到父目录会给我带来和以前一样的错误。

server|/n01/data/adf/temp/TEMPTEST/SUB1/SUB2> cd ..
server|/n01/data/adf/temp/NEWTEMPTEST/SUB1>

没有错误。我成功更改了目录。发生了什么?为什么这个错误不像第一次那样呢?

答案1

重命名父目录不会导致此类错误。然而,删除将会,例如:

# mkdir -p some/deep/path
# cd some/deep/path
# rm -r some/deep/path
# cd ..
error: No such file or directory

Linux 本身没有“重命名”命令。不过,您可以“移动”东西。在同一文件系统内移动时,这相当于重命名。然而,当在文件系统之间移动时,这实际上是一个复制/删除操作,这可能会导致与上面所示类似的情况,例如:

# mkdir -p /fs1/a/b
# cd /fs1/a/b
# mv /fs1/a /fs2/a
# cd ..
error: No such file or directory

/fs1/fs2是不同的文件系统时(在本例中为挂载点)。

答案2

简单地重命名目录将不会有任何效果,因为名称只是一个标签(这就是如何使用硬链接让两个文件指向同一个对象)。

父目录的内容可能已移至新目录,而现在为空的旧目录已被销毁。我认为,这需要在您位于直接子目录中时完成。

如果您在不同安装的文件系统之间移动目录,同时(可选)重命名它,也会发生这种情况;这不是重命名,而是文件系统的更改迫使原始文件被删除。

相关内容