Концептуальний рівень
Коли ви запускаєте процес із своєї оболонки, поточний робочий каталог процесу такий же, як і поточний робочий каталог вашої оболонки. У контексті оболонки поточний робочий каталог - це місце, де ви зараз перебуваєте.
Поточний робочий каталог будь-якого процесу використовується для інтерпретації відносних шляхів. Наприклад, якщо поточний робочий каталог вашої оболонки був , /home/rene
і ви побігли ls ..
від раковини, поточний робочий каталог процесу, в /home/rene
, буде використовуватися для вирішення ..
на /home
.
Ви можете побачити поточні робочі каталоги всіх процесів, що працюють у вашій системі lsof | grep '\scwd\s'
(зауважте, що вам, ймовірно, потрібно буде мати root, щоб побачити процеси інших користувачів.) Це може дати вам уявлення про те, як поточні робочі каталоги відносяться до процеси, що працюють у вашій системі.
Програмний рівень
Поточний робочий каталог оболонки - це каталог, який ви бачите та змінюєте за допомогою вбудованих оболонок pwd
і cd
відповідно. Ці команди викликають системні виклики, такі як getcwd
і chdir
які працюють з поточним робочим каталогом вашої оболонки.
Використовуючи bash
як приклад, cd
вбудований зрештою запускає цей рядок:
if (chdir (nolinks ? newdir : tdir) == 0)
і pwd
вбудований зрештою запускає цю лінію:
the_current_working_directory = getcwd (0, PATH_MAX);
Оболонка - лише зручний приклад використання поточного робочого каталогу; ці ж системні дзвінки використовуються і іншими програмами. Програма може змінити поточний робочий каталог на /usr
будь-який відносний шлях, який програма використовує, починається з /usr
каталогу,
Рівень ядра
Поточний робочий каталог процесу зберігається ядром. Linux зберігає його в pwd
члені, на який fs_struct
вказав fs
член a task_struct
. pwd
Елемент є path
структура, яка вказує на інформацію про горе ( vfsmount
) і каталог , де в файлової системі ( dentry
). Кожен процес task_struct
пов'язаний з ним.
В chdir
і getcwd
системні виклики змінювати і отримувати інформацію pwd
.