Операционные системы хранят данные на диске при помощи файловых систем. Классическая файловая система представляет данные в виде вложенных друг в друга каталогов (их ещё называют папками), в которых содержатся файлы1. Один из каталогов является «вершиной» файловой системы (а выражаясь технически — «корнем»2), в нём содержатся (или, если угодно, из него растут) все остальные каталоги и файлы.
Если жёсткий диск разбит на разделы, то на каждом разделе организуется отдельная файловая система с собственным корнем и структурой каталогов (ведь разделы полностью изолированы друг от друга).
В Linux корневой каталог называется весьма лаконично — «/». Полные имена (пути) всех остальных каталогов получаются из «/», к которому дописываются справа имена последовательно вложенных друг в друга каталогов. Имена каталогов в пути также разделяются символом «/» («слэш»). Например, запись /home
обозначает каталог «home» в корневом каталоге («/»), а /home/user
— каталог «user» в каталоге «home» (который, в свою очередь, в корневом каталоге)3. Перечисленные таким образом каталоги, завершающиеся именем файла, составляют полный путь к файлу.
Относительный путь строится точно так же, как и полный — перечислением через «/» всех названий каталогов, встретившихся при движении к искомому каталогу или файлу. Между полным путём и относительным есть только одно существенное различие: относительный путь начинается от текущего каталога, в то время как полный путь всегда начинается от корневого каталога. Относительный путь любого файла или каталога в файловой системе может иметь любую конфигурацию: чтобы добраться до искомого файла можно двигаться как по направлению к корневому каталогу, так и от него. Linux различает полный и относительный пути очень просто: если имя объекта начинается на «/» — это полный путь, в любом другом случае — относительный.
Корневой каталог в Linux всегда только один, а все остальные каталоги в него вложены, т. е. для пользователя файловая система представляет собой единое целое4. В действительности, разные части файловой системы могут находиться на совершенно разных устройствах: разных разделах жёсткого диска, на разнообразных съёмных носителях (лазерных дисках, дискетах, флэш-картах), даже на других компьютерах (с доступом через сеть). Для того, чтобы соорудить из этого хозяйства единое дерево с одним корнем, используется процедура монтирования.
Монтирование — это подключение в один из каталогов целой файловой системы, находящейся где-то на другом устройстве. Эту операцию можно представить как «прививание» ветки к дереву. Для монтирования необходим пустой каталог — он называется точкой монтирования. Точкой монтирования может служить любой каталог, никаких ограничений на этот счёт в Linux нет. При помощи команды mount
мы объявляем, что в данном каталоге (пока пустом) нужно отображать файловую систему, доступную на таком-то устройстве или же по сети. После этой операции в каталоге (точке монтирования) появятся все те файлы и каталоги, которые находятся на соответствующем устройстве. В результате пользователь может даже и не знать, на каком устройстве какие файлы располагаются.
Подключённую таким образом («смонтированную») файловую систему можно в любой момент отключить — размонтировать (для этого имеется специальная команда umount
), после чего тот каталог, куда она была смонтирована, снова окажется пустым.
Для Linux самой важной является корневая файловая система (root filesystem). Именно к ней затем будут подключаться (монтироваться) все остальные файловые системы на других устройствах. Обратите внимание, что корневая файловая система тоже монтируется, но только не к другой файловой системе, а к «самой Linux», причём точкой монтирования служит «/» (корневой каталог). Поэтому при загрузке системы прежде всего монтируется корневая файловая система, а при останове она размонтируется (в последнюю очередь).
Пользователю обычно не требуется выполнять монтирование и размонтирование вручную: при загрузке системы будут смонтированы все устройства, на которых хранятся части файловой системы, а при останове (перед выключением) системы все они будут размонтированы. Файловые системы на съёмных носителях (лазерных дисках, дискетах и пр.) также монтируются и размонтируются автоматически — либо при подключении носителя, либо при обращении к соответствующему каталогу.
В корневом каталоге Linux-системы обычно находятся только подкаталоги со стандартными именами. Более того, не только имена, но и тип данных, которые могут попасть в тот или иной каталог, также регламентированы стандартом5. Этот стандарт довольно последовательно соблюдается во всех Linux-системах: так, в любой Linux вы всегда найдёте каталоги /etc
, /home
, /usr/bin
и т. п. и сможете довольно точно предсказать, что именно в них находится.
Стандартное размещение файлов позволяет и человеку, и даже программе предсказать, где находится тот или иной компонент системы. Для человека это означает, что он сможет быстро сориентироваться в любой системе Linux (где файловая система организована в соответствии со стандартом) и найти то, что ему нужно. Для программ стандартное расположение файлов — это возможность организации автоматического взаимодействия между разными компонентами системы.
При выполнении операции монтирования, в том числе при выборе точки монтирования во время установки Linux-системы, можно изменять свойства смонтированной файловой системы. Для этого нужно указать утилите mount
один или несколько параметров. Существует ряд параметров монтирования, поддерживаемых всеми файловыми системами. Есть параметры, характерные для одной конкретной файловой системы. Подробно о параметрах монтирования можно прочитать в руководстве к утилите mount
(mount(8)
).
1Файл — область данных, имеющая собственное имя.
2Такой каталог называют корневым каталогом, поскольку он служит корнем дерева файловой системе (в математическом смысле слов «дерево» и «корень»).
3Весьма похожий способ записи полного пути используется в системах DOS и Windows, с той разницей, что корневой каталог обозначается литерой устройства с последующим двоеточием, а в качестве разделителя используется символ «\» («обратный слэш»).
4Это отличается от технологии, применяемой в Windows или Amiga, где для каждого устройства, на котором есть файловая система, используется свой корневой каталог, обозначенный литерой, например «a», «c», «d» и т. д.
5Этот стандарт называется Filesystem Hierarchy Standard («стандартная структура файловых систем»). Стандарт FHS регламентирует не только перечисленные каталоги, но и их подкаталоги, а иногда даже приводит список конкретных файлов, которые должны присутствовать в определённых каталогах. Краткое описание стандартной иерархии каталогов Linux можно получить, отдав команду man hier
. Полный текст и последнюю редакцию стандарта FHS можно найти в пакете fhs
или прочесть по адресу http://www.pathname.com/fhs/
.