Материал предоставлен http://it.rfet.ru

Текущий каталог

Файловая система не только систематизирует данные, но и является основой метафоры ”рабочего места” в Linux. Каждая выполняемая программа “работает” в строго определенном каталоге файловой системы. Такой каталог называется текущим каталогом . Можно представлять, что программа во время работы “находится” именно в этом каталоге, это ее “рабочее место”.

В зависимости от текущего каталога поведение программы может меняться: зачастую программа будет по умолчанию работать с файлами, расположенными именно в текущем каталоге - до них она “дотянется” в первую очередь.

Текущий каталог есть у любой программы, в том числе и у командной оболочки (shell) пользователя.

Поскольку взаимодействие пользователя с системой обязательно опосредовано командной оболочкой, можно говорить о том, что пользователь “находится” в том каталоге, который в данный момент является текущим каталогом его командной оболочки.

Все команды, отдаваемые пользователем при помощи shell, наследуют текущий каталог shell, т. е. “работают” в том же каталоге. По этой причине пользователю важно знать текущий каталог shell. Для этого служит утилита pwd:

[ivan@localhost ivan]$ pwd
/home/ivan
[ivan@localhost ivan]$

Пример 4.1. Текущий каталог: pwd

Команда pwd (print working directory) возвращает полный путь текущего каталога командной оболочки - естественно, именно той командной оболочки, при помощи которой была выполнена команда pwd. В данном случае Иван узнал, что в этот момент (на данной виртуальной консоли ) текущим является каталог /home/ivan.

Почти все утилиты, с которыми работал Иван в предыдущих лекциях, по умолчанию читают и создают файлы в текущем каталоге. Так, Иван обращался к файлам, не используя никаких путей, просто по имени. Например, задействовал утилиту cat, чтобы вывести на экран содержимое файла text:

[ivan@localhost ivan]$ cat text
File: info.info, Node: Help-Cross, Up: Cross-refs

The node reached by the cross reference in Info
 . . .
[ivan@localhost ivan]$ cat /home/ivan/text
File: info.info, Node: Help-Cross, Up: Cross-refs

The node reached by the cross reference in Info
 . . .

Пример 4.2. Полный и относительный путь к файлу

В действительности, командная оболочка, прежде чем передавать параметр text (имя файла) утилите cat, подставляет значение текущего каталога - получается полный путь к этому файлу в файловой системе: /home/ivan/text. Содержимое данного файла утилита cat выведет на экран. Набирая только имя файла без пути к текущему каталогу, Иван воспользовался относительным путем к этому файлу.

Относительный путь (relative path) — путь к объекту файловой системы, не начинающийся в корневом каталоге. Для каждого процесса Linux определен текущий каталог, с которого система начинает относительный путь при выполнении файловых операций.

Относительный путь строится точно так же, как и полный - перечислением через / всех названий каталогов, встретившихся при движении к искомому каталогу или файлу. Между полным и относительным путем есть только одно существенное различие: относительный путь начинается от текущего каталога, в то время как полный путь всегда начинается от корневого каталога. Относительный путь любого файла или каталога в файловой системе может иметь любую конфигурацию: чтобы добраться до искомого файла, можно двигаться как по направлению к корневому каталогу, так и от него (см. раздел “[Перемещение по дереву каталогов][@per-del]”). Linux различает полный и oтносительный пути очень просто: если имя объекта начинается на / - это полный путь, в любом другом случае - относительный.

Отделить путь к файлу от его имени можно с помощью команд dirname и basename соответственно:

[ivanlocalhost ivan]$ basename /home/ivan/text
text
[ivan@localhost ivan]$ basename text
text
[ivan@localhost ivan]$ dirname /home/ivan/text
/home/ivan
[ivan@localhost ivan]$ dirname ./text
.
[ivan@localhost ivan]$ dirname text
.

Пример 4.3. Использование dirname и basename

Иван заметил, что для text и ./text dirname выдает одинаковый результат: ., что понятно: как было сказано выше, эти формы пути эквивалентны, а при автоматической обработке результатов dirname гораздо лучше получить ., чем пустую строку.

Работа с файловой системойДомашний каталог