Концептуальний рівень
Коли ви запускаєте процес із своєї оболонки, поточний робочий каталог процесу такий же, як і поточний робочий каталог вашої оболонки. У контексті оболонки поточний робочий каталог - це місце, де ви зараз перебуваєте.
Поточний робочий каталог будь-якого процесу використовується для інтерпретації відносних шляхів. Наприклад, якщо поточний робочий каталог вашої оболонки був , /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.