ディレクトリ(他のファイルと同様)は名前で定義されません。名前をディレクトリのアドレスと考えてください。ディレクトリを移動しても、別の家に移動する場合と同じように、同じディレクトリのままです。ディレクトリを削除して同じ名前で新しいディレクトリを作成すると、それは新しいディレクトリになります。以前住んでいた家に引っ越した人はあなたではないようです。
各プロセスには作業ディレクトリがあります。cd
シェル内のコマンドは、シェルの現在の作業ディレクトリを変更します。のpwd
コマンドは、現在の作業ディレクトリへの¹パスを出力します。
ディレクトリAを削除したとき、これは親ディレクトリのAのエントリを削除することでした。ディレクトリA自体はファイルシステムに残りましたが、名前のない切り離された状態です。プロセス、つまり最初のシェルで使用されていたため、まだ削除されていません。最初のシェルでディレクトリを変更すると、ディレクトリは最終的に削除されました。プロセスが開いたままファイルを削除しても同じことが起こります。ファイルのディレクトリエントリはすぐに削除され、ファイル自体は使用を停止すると削除されます。
同様に、ディレクトリを移動するとどうなるかを観察します。
mkdir one two
touch one/1 two/2
cd one
ls
別のシェルで:
mv one tmp
mv two one
mv tmp two
最初のシェル:
ls
ファイル1
は元々呼び出されていたディレクトリにあり、one
現在はになっていtwo
ます。ファイル2
は元々呼び出されていたディレクトリにあり、two
現在はになっていone
ます。
¹ より正確には、シンボリックリンクまたはその他の微妙な要素が関係している場合、一意ではないパス。
cd $PWD
。