Livello concettuale
Quando si avvia un processo dalla shell, la directory di lavoro corrente del processo è la stessa della directory di lavoro corrente della shell. Nel contesto della shell, la directory di lavoro corrente è la posizione in cui ci si trova attualmente "."
La directory di lavoro corrente di qualsiasi processo viene utilizzata per interpretare i percorsi relativi. Ad esempio, se la directory di lavoro corrente della shell era /home/rene
ed è stato eseguito ls ..
dalla shell, directory di lavoro corrente del processo, /home/rene
, sarebbero stati utilizzati per risolvere ..
a /home
.
Puoi vedere le directory di lavoro correnti di tutti i processi in esecuzione sul tuo sistema lsof | grep '\scwd\s'
(tieni presente che probabilmente dovrai essere root per vedere i processi di altri utenti.) Questo può darti un'idea di come le attuali directory di lavoro si collegano al processi in esecuzione sul tuo sistema.
Livello del programma
L'attuale directory di lavoro della shell è la directory che vedi e modifichi con gli shell incorporati pwd
e cd
rispettivamente. Questi comandi chiamano chiamate di sistema come getcwd
e chdir
che funzionano con l'attuale directory di lavoro della shell.
Usando bash
come esempio, il cd
built-in alla fine esegue questa riga:
if (chdir (nolinks ? newdir : tdir) == 0)
e il pwd
built-in alla fine esegue questa linea:
the_current_working_directory = getcwd (0, PATH_MAX);
La shell è solo un comodo esempio dell'uso della directory di lavoro corrente; queste stesse chiamate di sistema vengono utilizzate anche da altri programmi. Un programma può cambiare la sua directory di lavoro corrente in /usr
e tutti i percorsi relativi che il programma utilizza inizieranno dalla /usr
directory,
Livello del kernel
L'attuale directory di lavoro di un processo è memorizzata dal kernel. Linux lo memorizza nel pwd
membro di un fs_struct
puntato dal fs
membro di un task_struct
. Il pwd
membro è uno path
struct, che punta a informazioni sul mount ( vfsmount
) e sulla posizione della directory nel filesystem ( dentry
). Ogni processo ha un task_struct
associato con esso.
Le chiamate chdir
e di getcwd
sistema modificano e recuperano le informazioni in pwd
.