Концептуальный уровень
Когда вы запускаете процесс из вашей оболочки, текущий рабочий каталог процесса совпадает с текущим рабочим каталогом вашей оболочки. В контексте оболочки текущий рабочий каталог - это то место, где вы сейчас находитесь.
Текущий рабочий каталог любого процесса используется для интерпретации относительных путей. Например, если текущий рабочий каталог вашей оболочки был , /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.