Каталоги с точки зрения пользователя
Даже случайный пользователь системы UNIX будет иметь некоторое представление о том, как выглядит структура каталогов системы. Тем не менее для полноты изложения кратко опишем обычное расположение файлов с точки зрения пользователя.
В сущности каталоги являются просто списками имен файлов, которые обеспечивают способ разбиения файлов на логически связанные группы. Например, каждый пользователь имеет домашний каталог (home directory), в который попадает при входе в систему и где может создавать файлы и работать с ними. Смысл этого, очевидно, состоит в том, чтобы разделить файлы отдельных пользователей. Аналогично программы, доступные всем пользователем, такие как cat или ls, помещаются в общеизвестные каталоги, обычно /bin или /usr/bin. Используя общепринятую метафору, каталоги можно сравнить с ящиками в шкафу, в которых хранятся папки файлов с документами.
Вместе с тем у каталогов есть некоторые преимущества по сравнению с ящиками в шкафу, так как кроме файлов они также могут включать другие каталоги, которые называются подкаталогами (subdirectories) и позволяют организовать следующие уровни классификации. Подкаталоги, в свою очередь, могут содержа другие подкаталоги и так далее. Допустим любой уровень вложенности, хотя может быть ограничение на длину абсолютного пути файла (см. пункт 4.6.4).
Фактически файловую структуру UNIX можно представить в виде иерархической структуры, напоминающей перевернутое дерево. Упрощенное дерево каталогов показано на рис. 4.1 (это тот же пример, что и рисунок в главе 1). Конечно же, любая реальная система будет иметь более сложную структуру.
| / | ||||||||||||||||
| | |||||||||||||||||
usr | |||||||||||||||||
keith | ben | ||||||||||||||||
| | | | ||||||||||||||||
book | file1 | file2 | book | ||||||||||||||
chap1 | chap2 | chap1 | chap2 |
Рис. 4.1. Пример дерева каталогов
На вершине этого дерева, так же как и на вершине любого дерева каталогов UNIX, находится единственный каталог, который называется корневым каталогом (root directory) и имеет очень короткое имя /. Все узлы дерева, кроме конечных, например узлы keith или ben, всегда являются каталогами. Конечные узлы, например узлы file1 или file2, являются файлами или пустыми каталогами. В настоящее время в большинстве систем UNIX имена каталогов могут содержать до 255 символов, но, так же как и в случае с файлами, для обеспечения совместимости со старыми версиями системы их длина не должна превышать 14 символов.
В нашем примере узлы keith и ben являются подкаталогами родительского каталога usr. В каталоге keith находятся три элемента: два обычных файла file1 и file2 и подкаталог book. Каталог keith является родительским для каталога book. В свою очередь каталог book содержит два файла chap1 и chap2. Как было показано в главе 1, положение файла в иерархии может быть задано заданием пути к нему. Например, полное имя файла chap2 в каталоге keith, включающее путь к нему, будет /usr/keith/book/chap2. Аналогично можно указать и полное имя каталога. Полное имя каталога ben будет /usr/ben.
Следует обратить внимание, что каталог /usr/ben/book также содержит два файла с именами chap1 и chap2. Они не обязательно связаны со своими тезками в каталоге /usr/keith/book, так как только полное имя файла однозначно идентифицирует его. Тот факт, что в разных каталогах могут находиться файлы с одинаковыми именами, означает, что пользователям нет необходимости изобретать странные и уникальные имена для файлов.