Опубликован: 22.06.2005 | Уровень: для всех | Доступ: свободно | ВУЗ: Компания IBM
Лекция 4:

Работа с файловой системой

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >
Аннотация: Лекция посвящена практической работе с объектами файловой системы: перемещению по дереву каталогов, копированию, перемещению и удалению файлов, созданию жестких и символьных ссылок. Подробно разбираются понятия "полный путь" и "относительный путь", текущий каталог, домашний каталог.
Ключевые слова: файловая система, каталог, текущий каталог, программа, место, ПО, очередь, shell, пользователь, утилита, команда, print, working directory, полный путь, виртуальная консоль, командная оболочка, параметр, имя файла, значение, относительный путь, relative, path, путь, корневой каталог, процесс, имя объекта, basename, регистрация в системе, домашний каталог, переменная окружения, доступ, права, list, список, руководство, ключ, конфигурационный файл, конфигурационный каталог, ссылка, родительский каталог, parent directory, change, directory, входное имя, приглашение командной строки, слово, оболочка, достраивание, домашний каталог пользователя, поддерево, подкаталог, файл, полное имя файла, Copy, BAK, операции, высказывание, вероятность, жёсткая ссылка, hardlink, права доступа, индексный дескриптор, файл-дырка, уникальный идентификатор файла, символьная ссылка, symbolic link, файл-ссылка, remove, recursive

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

Файловая система не только систематизирует данные, но и является основой метафоры "рабочего места" в Linux. Каждая выполняемая программа "работает" в строго определенном каталоге файловой системы. Такой каталог называется текущим каталогом . Можно представлять, что программа во время работы "находится" именно в этом каталоге, это ее "рабочее место". В зависимости от текущего каталога поведение программы может меняться: зачастую программа будет по умолчанию работать с файлами, расположенными именно в текущем каталоге - до них она "дотянется" в первую очередь. Текущий каталог есть у любой программы, в том числе и у командной оболочки (shell) пользователя. Поскольку взаимодействие пользователя с системой обязательно опосредовано командной оболочкой, можно говорить о том, что пользователь "находится" в том каталоге, который в данный момент является текущим каталогом его командной оболочки.

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

[methody@localhost methody]$ pwd
/home/methody
[methody@localhost methody]$
Пример 4.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
 . . .
Пример 4.2. Полный и относительный путь к файлу

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

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

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

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

[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
.
Пример 4.3. Использование dirname и basename

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

Домашний каталог

Мефодий заметил, что в примерах этой и прошлых лекций, заходя с разных виртуальных консолей по очереди и одновременно, он всегда оказывался в одном и том же текущем каталоге: он все время обращался к своим файлам при помощи относительного пути и всегда находил нужные. Это не случайно - в Linux у каждого пользователя обязательно есть собственный каталог, который и становится текущим сразу после регистрации в системе - домашний каталог2Домашний каталог указывается в учетной записи пользователя, см. лекцию 1.. Для Мефодия домашним каталогом является "/home/methody ".

Домашний каталог (home directory) - это каталог, предназначенный для хранения собственных данных пользователя Linux. Как правило, является текущим непосредственно после регистрации пользователя в системе. Полный путь к домашнему каталогу хранится в переменной окружения HOME.

Поскольку каждый пользователь располагает собственным каталогом и по умолчанию работает в нем, решается задача разделения файлов разных пользователей. Обычно доступ других пользователей к чужому домашнему каталогу ограничен: наиболее типична ситуация, когда пользователи могут читать содержимое файлов друг друга, но не имеют права их изменять или удалять.

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >
Аягоз Имансакипова
Аягоз Имансакипова
Тимур Булатов
Тимур Булатов

С момента выхода курса прошло достаточно много времени, и хотелось бы понимать, насколько курс является актуальным на сегодняшний день.

Равиль Латыпов
Равиль Латыпов
Россия, Казань, Казанский Национальный Исследовательский Технический Университет