Файловая система не только систематизирует данные, но и является основой метафоры ”рабочего места” в Linux. Каждая выполняемая программа “работает” в строго определенном каталоге файловой системы. Такой каталог называется текущим каталогом . Можно представлять, что программа во время работы “находится” именно в этом каталоге, это ее “рабочее место”.
В зависимости от текущего каталога поведение программы может меняться: зачастую программа будет по умолчанию работать с файлами, расположенными именно в текущем каталоге - до них она “дотянется” в первую очередь.
Текущий каталог есть у любой программы, в том числе и у командной оболочки (shell) пользователя.
Поскольку взаимодействие пользователя с системой обязательно опосредовано командной оболочкой, можно говорить о том, что пользователь “находится” в том каталоге, который в данный момент является текущим каталогом его командной оболочки.
Все команды, отдаваемые пользователем при помощи shell
, наследуют текущий каталог shell, т. е. “работают” в том же каталоге. По этой причине пользователю важно знать текущий каталог shell. Для этого служит утилита pwd
:
[ivan@localhost ivan]$ pwd
/home/ivan
[ivan@localhost ivan]$
Команда 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
. . .
В действительности, командная оболочка, прежде чем передавать параметр 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
.
Иван заметил, что для text
и ./text dirname
выдает одинаковый результат: .
, что понятно: как было сказано выше, эти формы пути эквивалентны, а при автоматической обработке результатов dirname
гораздо лучше получить .
, чем пустую строку.
Работа с файловой системой | Домашний каталог |