Ein Verzeichnis (wie jede Datei) wird nicht durch seinen Namen definiert. Stellen Sie sich den Namen als Adresse des Verzeichnisses vor . Wenn Sie das Verzeichnis verschieben, ist es immer noch dasselbe Verzeichnis, genau wie wenn Sie in ein anderes Haus umziehen, sind Sie immer noch dieselbe Person. Wenn Sie ein Verzeichnis entfernen und ein neues mit demselben Namen erstellen, ist es ein neues Verzeichnis, genau wie jemand, der in das Haus zieht, in dem Sie früher gewohnt haben, nicht wahr?
Jeder Prozess hat ein Arbeitsverzeichnis . Der cd
Befehl in der Shell ändert das aktuelle Arbeitsverzeichnis der Shell. Der pwd
Befehl gibt den Pfad zum aktuellen Arbeitsverzeichnis aus.
Als Sie das Verzeichnis A entfernt haben, wurde der Eintrag für A im übergeordneten Verzeichnis entfernt. Das Verzeichnis A selbst blieb im Dateisystem, jedoch ohne Namen. Es wurde noch nicht gelöscht, da es von einem Prozess verwendet wurde, nämlich der ersten Shell. Als Sie das Verzeichnis in der ersten Shell geändert haben, wurde das Verzeichnis endgültig gelöscht. Dasselbe passiert, wenn eine Datei gelöscht wird, während ein Prozess sie noch geöffnet hat: Der Verzeichniseintrag der Datei wird sofort entfernt, und die Datei selbst wird entfernt, wenn sie nicht mehr verwendet wird.
Beobachten Sie auch, was passiert, wenn Sie Verzeichnisse verschieben.
mkdir one two
touch one/1 two/2
cd one
ls
In einer anderen Shell:
mv one tmp
mv two one
mv tmp two
In der ersten Schale:
ls
Die Datei 1
befindet sich in dem Verzeichnis, das ursprünglich aufgerufen wurde, one
und wird jetzt aufgerufen two
. Die Datei 2
befindet sich in dem Verzeichnis, das ursprünglich aufgerufen wurde, two
und wird jetzt aufgerufen one
.
¹ Genauer gesagt, ein Pfad, der möglicherweise nicht eindeutig ist, wenn symbolische Verknüpfungen oder andere Feinheiten beteiligt sind.
cd $PWD
.