Poziom koncepcyjny
Po uruchomieniu procesu z powłoki bieżący katalog roboczy procesu jest taki sam, jak bieżący katalog roboczy powłoki. W kontekście powłoki bieżącym katalogiem roboczym jest lokalizacja, w której aktualnie „znajdujesz się”.
Bieżący katalog roboczy dowolnego procesu służy do interpretacji ścieżek względnych. Na przykład, jeśli bieżący katalog roboczy twoja powłoka była /home/rene
i pobiegł ls ..
z powłoki, bieżący katalog roboczy procesu, w /home/rene
, byłyby wykorzystywane do zdecydowania ..
się /home
.
Możesz zobaczyć bieżące działające katalogi wszystkich procesów uruchomionych w twoim systemie lsof | grep '\scwd\s'
(pamiętaj, że prawdopodobnie będziesz musiał być rootem, aby zobaczyć procesy innych użytkowników). To może dać ci wyobrażenie o tym, jak bieżące działające katalogi odnoszą się do procesy uruchomione w twoim systemie.
Poziom programu
Bieżący katalog roboczy powłoki jest katalog można zobaczyć i modyfikować z wbudowanym poleceniem powłoki ins pwd
i cd
odpowiednio. Te polecenia wywołują wywołania systemowe, takie jak getcwd
i, chdir
które działają z bieżącym katalogiem roboczym powłoki.
Używając bash
jako przykładu, cd
wbudowane ostatecznie uruchamia tę linię:
if (chdir (nolinks ? newdir : tdir) == 0)
a pwd
wbudowane ostatecznie uruchamia tę linię:
the_current_working_directory = getcwd (0, PATH_MAX);
Powłoka jest tylko wygodnym przykładem użycia bieżącego katalogu roboczego; te same wywołania systemowe są również używane przez inne programy. Program może zmienić swój bieżący katalog roboczy na, /usr
a wszelkie ścieżki względne, których używa program, zaczną się od /usr
katalogu,
Poziom jądra
Bieżący katalog roboczy procesu jest przechowywany przez jądro. Linux przechowuje go w pwd
elemencie fs_struct
wskazanym przez fs
członka task_struct
. Element pwd
członkowski jest path
strukturą, która wskazuje na informacje o mount ( vfsmount
) i lokalizacji katalogu w systemie plików ( dentry
). Każdy proces jest task_struct
z nim powiązany.
Te chdir
i getcwd
wywołań systemowych modyfikacji i pobierać informacje pwd
.
Każdy proces ma bieżący katalog roboczy (CWD), do którego jest przypisany podczas uruchamiania. Możesz wykonać następujące czynności, aby znaleźć katalog roboczy dla procesu.
Uruchom ps aux, aby znaleźć PID procesu:
Aby znaleźć bieżący katalog roboczy PID: 24532
Tak więc proces (PID: 24532) ma CWD o wartości
/
.Oto inny przykład:
Tym razem proces snu (PID: 15988) ma swój zestaw CWD do mojego katalogu domowego
/home/sam
.Możesz także uruchomić
ls -l
polecenie:-lub-
Tutaj możesz ponownie zobaczyć CWD dla tych procesów
/
oraz/home/sam
.Bibliografia
źródło