名前が変更された親ディレクトリを変更しようとするとどうなりますか?

名前が変更された親ディレクトリを変更しようとするとどうなりますか?

非常に深いサブディレクトリが複数あり、入力しましたが、次の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

単にディレクトリ名を変更するのは名前が単なるラベルであるため、何の効果もありません(これは、ハードリンクを使用して同じオブジェクトを指す2つのファイルを持つ方法です)。

親ディレクトリの内容が新しいディレクトリに移動された可能性があり、空の古いディレクトリが削除されました。私の考えでは、これは直接サブディレクトリにあるときに行うべきだと思います。

これは、(オプションで)名前の変更中にマウントされた他のファイルシステム間でディレクトリを移動する場合にも発生する可能性があります。これは名前の変更ではなく、元のファイルを強制的に削除するファイルシステムの変更です。

関連情報