Konzeptionelle Ebene
Wenn Sie einen Prozess von Ihrer Shell aus starten, entspricht das aktuelle Arbeitsverzeichnis des Prozesses dem aktuellen Arbeitsverzeichnis Ihrer Shell. Im Kontext der Shell ist das aktuelle Arbeitsverzeichnis der Speicherort, an dem Sie sich derzeit befinden.
Das aktuelle Arbeitsverzeichnis eines Prozesses wird verwendet, um relative Pfade zu interpretieren. Wenn beispielsweise das aktuelle Arbeitsverzeichnis Ihrer Shell war /home/rene
und Sie ls ..
von der Shell ausgeführt wurden, wird das aktuelle Arbeitsverzeichnis des Prozesses /home/rene
zum Auflösen ..
in verwendet /home
.
Sie können die aktuellen Arbeitsverzeichnisse aller auf Ihrem System ausgeführten Prozesse mit anzeigen lsof | grep '\scwd\s'
(beachten Sie, dass Sie wahrscheinlich root sein müssen, um die Prozesse anderer Benutzer zu sehen.) Dies kann Ihnen eine Vorstellung davon geben, wie sich aktuelle Arbeitsverzeichnisse auf die beziehen Prozesse, die auf Ihrem System ausgeführt werden.
Programmebene
Das aktuelle Arbeitsverzeichnis der Shell ist das Verzeichnis, das Sie mit den integrierten Shell-Funktionen anzeigen pwd
und ändern cd
. Diese Befehle rufen Systemaufrufe wie getcwd
und auf chdir
, die mit dem aktuellen Arbeitsverzeichnis Ihrer Shell funktionieren.
Am bash
Beispiel führt das cd
integrierte Gerät schließlich diese Zeile aus:
if (chdir (nolinks ? newdir : tdir) == 0)
und das pwd
eingebaute führt schließlich diese Linie aus:
the_current_working_directory = getcwd (0, PATH_MAX);
Die Shell ist nur ein praktisches Beispiel für die Verwendung des aktuellen Arbeitsverzeichnisses. Dieselben Systemaufrufe werden auch von anderen Programmen verwendet. Ein Programm kann sein aktuelles Arbeitsverzeichnis in ändern, /usr
und alle relativen Pfade, die das Programm verwendet, beginnen im /usr
Verzeichnis.
Kernel-Ebene
Das aktuelle Arbeitsverzeichnis eines Prozesses wird vom Kernel gespeichert. Linux speichert es in dem pwd
Mitglied eines, fs_struct
auf das das fs
Mitglied eines zeigt task_struct
. Das pwd
Mitglied ist eine path
Struktur, die auf Informationen über mount ( vfsmount
) und den Speicherort des Verzeichnisses im Dateisystem ( dentry
) verweist . Jedem Prozess ist ein Prozess task_struct
zugeordnet.
Die chdir
und getcwd
Systemaufrufe ändern und Abrufen von Informationen in pwd
.
Jeder Prozess verfügt über ein aktuelles Arbeitsverzeichnis (CWD), dem es beim Start zugewiesen wird. Sie können Folgendes tun, um das Arbeitsverzeichnis für einen Prozess zu ermitteln.
Führen Sie ps aux aus, um die PID eines Prozesses zu ermitteln:
So ermitteln Sie das aktuelle Arbeitsverzeichnis einer PID: 24532
Der Prozess (PID: 24532) hat also eine CWD von
/
.Hier ist ein weiteres Beispiel:
Diesmal ist für den Schlafprozess (PID: 15988) CWD auf mein Ausgangsverzeichnis eingestellt
/home/sam
.Sie können auch den folgenden
ls -l
Befehl ausführen :-oder-
Hier sehen Sie wieder die CWD für diese Prozesse
/
und/home/sam
.Verweise
quelle