Понятие «файловая система» для краткости будем обозначать ФС. обычно прочно ассоциируется с неким структурированным и упорядоченным набором директорий где хранятся данных. Среди более продвинутых определений можно встретить трактовки, в которых ФС представляется не просто набором каталогов, но и способами или системными протоколами обработки, хранения и представления информации. На самом деле под «файловой системой» подразумевается гораздо более широкое и неоднозначное, в зависимости от контекста, понятие.
Например, далеко не все знают, что элементами ФС могут являться различные устройства, протоколы взаимодействия, структуры данных системного ядра и даже процессы. Но стоит отметить, что вышесказанное справедливо для Unix-подобных ОС, в число которых входит Linux. Образно говоря, ФС в Linux — это некий глобальный абстрактный интерфейс, на котором построено взаимодействие системного ядра и аппартно-программной среды всей вычислительной системы, а основным «посредником» или даже «проводящей средой» этого взаимодействия является строго организованная структура каталогов и файлов.
Экскурс в историю
С файловой системы когда-то начинала свое развитие Unix. Linux унаследовала её архитектуру, правда, с некоторыми особенностями, но сохранился принцип использования ФС как неотъемлемого абстрактного интерфейса. Поэтому говорить о том, что было, когда Linux ещё не было, подразумевая в качестве ответа «конечно Unix!» не совсем правильно. Когда Linux ещё не было, существовала ФС.
В то время программисты, трудившиеся над созданием Unix, стремились для облегчения своей работы реализовать унифицированный базис, благодаря которому не нужно каждый раз изобретать велосипед при описании новых типов и объектов. Они посчитали разумным представлять такие объекты в виде элементов в составе ФС. Это позволило задействовать единый программный интерфейс и иметь простой и удобный доступ к ресурсам из интерпретатора команд. Таким образом, целые устройства и сложные протоколы легко поддаются управлению и контролю только благодаря тому, что их можно представить и «отобразить» на ядро (т. е. предоставить ресурсы драйверов), в виде обычных файлов, файлы являются элементами ФС.
Основные компоненты файловой системы
Можно видеть, ФС это некий универсальный «узел», через который программы хотя, правильнее сказать, клиенты, обращаются к нужным им серверам и драйверам. Такое взаимодействие обеспечивается несколькими компонентами, составляющими саму ФС:
- API – набор программ, организованных в виде библиотеки (или нескольких систематизированных библиотек), обеспечивающих системные вызовы для управления объектами системы и доступный для использования программистам.
- Пространство имён — спецификация организации единой системы наименований и иерархии объектов.
- Безопасность — схема организации защиты объектов системы и их общего доступа (права доступа).
- Реализация — набор прикладных программ, обеспечивающих связку логических моделей с дисковой подсистемой.
Современные ядра оснащены абстрактным интерфейсом, поддерживающим работу с различными ФС. Для Linux самыми распространёнными являются Ext3, Ext4. Эти ФС журналируемые и поэтому для многих дистрибутивов являются основными.
Монтирование и демонтирование файловой системы
Иерархия каталогов и файлов, т. е. файловое дерево, представляет собой дерево, которое формируется из составных частей, которые также могут являться деревьями. На рисунке показана структура такой системы
В данном контексте такие части принято называть также «файловыми системами», содержащими корневой каталог и список файлов и подкаталогов. Отсюда видно, насколько обширно понятие ФС — т. е. это может быть ещё дерево каталогов с подкаталогами.
Присоединение ФС к дереву осуществляется командой mount. Например команда:
$ sudo mount /dev/sda1 /home
примонтирует на диск /dev/sda1 каталог пользователей home. После этого можно просматривать её содержимое командой:
ls /home
ФС можно монтировать автоматически, в том числе и при старте системы. Это возможно благодаря инструкциям по монтированию хранящимся в файле /etc/fstab.
Демонтируются системы с помощью команды umount. Нужно учитывать, если примонтированная система занята каким либо процессом, то отмонтировать ее не получится.
Чтобы узнать, чем занята ФС, нужно воспользоваться командой fuser, например:
$ fuser -сv /usr В результате будет выведена таблица следующего вида: USER PID ACCESS COMMAND /usr root 444 ....m atd root 499 ....m sshd root 520 ....m lpd
Буквенные значения в столбце Access поясняет нижеследующая таблица:
Коды Значение
f,o — Файл занят процессом для чтения или записи
с — В системе находится текущий каталог
e,t — Запущен исполняемая программа
r — Корневой каталог
m,s — является отображаемым или разделяемой (совместно используемой) библиотекой.
Структура файловой системы
Хотя в Linux имеется строгая спецификация и, в зависимости от типов файлов и их функциональной принадлежности, хранит их в определённых местах, всё же она не до конца стандартизирована. Однако, в общем случае, при работе со структурой каталогов в Linux стоит руководствоваться следующей таблицей:
Каталог Содержимое
Каталог | Описание |
---|---|
/ | Корень, точка монтирования всей ФС |
/bin/ | Исполняемые файлы ОС |
/boot/ | Файлы которые ОС использует для загрузки |
/dev/ | каталог содержащий файлы устройств, диски, cdrom и т.д |
/etc/ | Здесь содержатся различные настройки и конфигурации. |
/home/ | Директория пользователей, где хранятся файлы и настройки пользователей |
/lib/ | Здесь хранятся различные библиотек используемых для работы исполняемых файлов |
/media/ /mnt/ | Обычно используется для монтирования внешних носителей, cdrom, flash, и т.д |
/opt/ | Директория для хранения дополнительных программ |
/proc/ | Директория для хранения запущенных процессов |
/root/ | Домашний каталог пользователя root |
/sbin/ | исполняемые программы используемых для настройки ОС, например firewall. |
/tmp/ | Директория для хранения временных файлов |
/usr/ | Директория для хранения утилит пользователей |
/var/ | Изменяемые файлы, такие как регистрации (log-файлы), временные почтовые файлы |