Концептуальный уровень
Когда вы запускаете процесс из вашей оболочки, текущий рабочий каталог процесса совпадает с текущим рабочим каталогом вашей оболочки. В контексте оболочки текущий рабочий каталог - это то место, где вы сейчас находитесь.
Текущий рабочий каталог любого процесса используется для интерпретации относительных путей. Например, если текущий рабочий каталог вашей оболочки был , /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
.
Каждый процесс имеет текущий рабочий каталог (CWD), которому он назначен при запуске. Вы можете сделать следующее, чтобы узнать рабочий каталог для процесса.
Запустите ps aux, чтобы узнать PID процесса:
Чтобы узнать текущий рабочий каталог PID: 24532
Таким образом, процесс (PID: 24532) имеет CWD
/
.Вот еще один пример:
На этот раз процесс сна (PID: 15988) имеет это УХО набор в мой домашний каталог
/home/sam
.Вы также можете запустить
ls -l
команду:-или-
Здесь вы снова можете увидеть CWD для этих процессов,
/
и/home/sam
.Ссылки
источник