Файловая система не только систематизирует данные, но и является основой метафоры «рабочего места» в Linux. Каждая выполняемая программа «работает» в строго определённом каталоге файловой системы. Такой каталог называется текущим каталогом, можно представлять, что программа во время работы «находится» именно в этом каталоге, это её «рабочее место». В зависимости от текущего каталога может меняться поведение программы: зачастую программа будет по умолчанию работать с файлами, расположенными именно в текущем каталоге — до них она «дотянется» в первую очередь. Текущий каталог есть у любой программы, в том числе и у командной оболочки (shell) пользователя. Поскольку взаимодействие пользователя с системой обязательно опосредовано командной оболочкой, можно говорить о том, что пользователь «находится» в том каталоге, который в данный момент является текущим каталогом его командной оболочки.
Все команды, отдаваемые пользователем при помощи shell, наследуют текущий каталог shell, т. е. «работают» в том же каталоге. По этой причине пользователю важно знать текущий каталог shell. Для этого служит утилита pwd
:
[methody@localhost methody]$ pwd
/home/methody
[methody@localhost methody]$
Пример 1. Текущий каталог: pwd
pwd
(аббревиатура от print working directory) возвращает полный путь текущего каталога командной оболочки, естественно, именно той командной оболочки, при помощи которой была выполнена команда pwd
. В данном случае Мефодий узнал, что в этот момент (на этой виртуальной консоли) текущим является каталог «/home/methody
».
Почти все утилиты, с которыми работал Мефодий в предыдущих лекциях, по умолчанию читают и создают файлы в текущем каталоге. Так, Мефодий обращался к файлам, не используя никаких путей, просто по имени. Например, использовал утилиту cat
, чтобы вывести на экран содержимое файла «text
».
[methody@localhost methody]$ cat text
File: info.info, Node: Help-Cross, Up: Cross-refs
The node reached by the cross reference in Info
. . .
[methody@localhost methody]$ cat /home/methody/text
File: info.info, Node: Help-Cross, Up: Cross-refs
The node reached by the cross reference in Info
Пример 2. Полный и относительный путь к файлу
В действительности, командная оболочка, прежде чем передавать параметр «text
» (имя файла) утилите cat
, подставляет значение текущего каталога — получается полный путь к этому файлу в файловой системе: «/home/methody/text
». Содержимое именно этого файла утилита cat
выведет на экран.
Вообще говоря, в нескольких разных каталогах файловой системы могут оказаться файлы с именем «text
», именно поэтому командная оболочка всегда передаёт программам и утилитам «точный адрес» файла в файловой системе — полный путь.
Набирая только имя файла без пути к текущему каталогу, Мефодий воспользовался относительным путём к этому файлу.
- относительный путь
- Путь к объекту файловой системы, не начинающийся в корневом каталоге. Для каждого процесса Linux определён текущий каталог, с которого система начинает относительный путь при выполнении файловых операций.
Относительный путь строится точно так же, как и полный — перечислением через «/
» всех названий каталогов, встретившихся при движении к искомому каталогу или файлу. Между полным путём и относительным есть только одно существенное различие: относительный путь начинается от текущего каталога, в то время как полный путь всегда начинается от корневого каталога. Относительный путь любого файла или каталога в файловой системе может иметь любую конфигурацию: чтобы добраться до искомого файла можно двигаться как по направлению к корневому каталогу, так и от него (см. раздел Filesystem_use.Перемещение по дереву каталогов). Linux различает полный и относительный пути очень просто: если имя объекта начинается на «/
» — это полный путь, в любом другом случае — относительный.
Пользователь может обращаться к файлу при помощи полного или относительного пути — результат будет совершенно тот же. Так, команды cat text
и cat /home/methody/text
, отданные Мефодием, дали одинаковый результат, поскольку выводился один и тот же файл. Если в относительном пути встречаются символы «/
», рассматриваются подкаталоги текущего каталога, их подкаталоги и т. д. Короче говоря, относительный путь строится по тем же правилам, что и полный, с той разницей, что относительный путь начинается не с символа «/
». Сам текущий каталог, каков бы ни был полный путь к нему, всегда имеет ещё одно обозначение, «.
», которое можно использовать, если по каким-то причинам требуется, чтобы даже в относительном пути к файлу, находящемуся в текущем каталоге, присутствовал элемент «имя каталога». Так, пути «text
» и «./text
» тоже приводят к одному и тому же файлу, однако в первом случае в строке пути не содержится ничего, кроме имени файла.
Отделить путь к файлу от его имени можно с помощью команд dirname
и basebane
соответственно:
[methody@localhost methody]$ basename /home/methody/text
text
[methody@localhost methody]$ basename text
text
[methody@localhost methody]$ dirname /home/methody/text
/home/methody
[methody@localhost methody]$ dirname ./text
.
[methody@localhost methody]$ dirname text
Пример 3. Использование dirname
и basename
Мефодий заметил, что для «text
» и «./text
» dirname
выдало одинаковый результат: «.», что понятно: как было сказано выше, эти формы пути совершенно эквивалентны, а при автоматической обработке результатов dirname
гораздо лучше получить «.
», чем пустую строку.