На этом уроке разберём «Единое дерево каталогов» и стандарт File Hierarchy Standard в Linux. Это действительно очень важная тема!
Единое дерево каталогов
В Linux нет привычных для пользователя Windows дисков, например диск C: или диск D:. Вместо этого в Linux существует единое дерево каталогов. Корневой каталог называется «root» и обозначается так «/».
Получается примерно такая древовидная структура каталогов:
/ /каталог_1 /каталог_1/подкаталог_1 /каталог_1/подкаталог_2 /каталог_1/подкаталог_2/подкаталог_1 /каталог_1/подкаталог_3 /каталог_2 /каталог_2/подкаталог_1 /каталог_2/подкаталог_2 /каталог_2/подкаталог_3/подкаталог_1/подкаталог_1 /каталог_2/подкаталог_3/подкаталог_1 /каталог_3 /каталог_3/подкаталог_1 /каталог_3/подкаталог_2 /каталог_3/подкаталог_3
При этом могут использоваться разные физические диски или разделы на дисках. Схематически это можно представить таким образом:
Диск_1 / /каталог_1 /каталог_1/подкаталог_1 /каталог_1/подкаталог_2 /каталог_1/подкаталог_2/подкаталог /каталог_1/подкаталог_3 Диск_2 /каталог_2 /каталог_2/подкаталог_1 /каталог_2/подкаталог_2 /каталог_2/подкаталог_3 Диск_3 /каталог_2/подкаталог_3/подкаталог_1 /каталог_3 /каталог_3/подкаталог_1 /каталог_3/подкаталог_2 /каталог_3/подкаталог_3
На первый диск установлена корневая файловая система, таким образом, все файлы и подкаталоги, для которых нет отдельного диска лежат на нем.
Но /каталог_2 со всеми своими подкаталогами лежит на диске_2, кроме подкаталога /каталог_2/подкаталог_3/подкаталог_1.
Подкаталог /каталог_2/подкаталог_3/подкаталог_1 лежит на диске_3.
А /каталог_3 со всеми своими подкаталогами лежит на диске_1, так как для него нет отдельного диска или раздела.
Стандарт FHS
Linux дистрибутивы стараются придерживаться стандарта FHS (Filesystem Hierarchy Standard). Этот стандарт описывает как должна выглядеть структура каталогов, то есть по какому пути система будет искать определенные файлы. Например, программы будут лежать в одном каталоге, а библиотеки для этих программ в другом каталоге. И программа будет знать в каком каталоге искать библиотеку для своей работы, если программист создававший эту программу придерживался этого стандарта.
Так как различных дистрибутивов Linux много и программы создаваемые для Linux разрабатываются очень большим числом программистов, то придумали этот стандарт. Придерживаться этого стандарта должны программисты пишущие программы для Linux, а также программисты пишущие дистрибутивы Linux.
Также этот стандарт облегчает жизнь пользователям так как пользователь будет примерно знать где какие файлы находятся, куда установилась программа, где искать конфигурационные файлы для настройки сервера и так далее.
По этому стандарту структура каталогов выглядит так:
- / — корневой каталог
- /bin — основные утилиты, которые могут использовать как обычные пользователи так и системные администраторы, но которые необходимы когда не смонтированы другие файловые системы;
- /boot — файлы нужные для загрузки системы;
- /dev — файлы устройств;
- /etc — конфигурационные файлы;
- /home — домашние каталоги обычных пользователей;
- /lib — библиотеки для программ из каталогов /bin и /sbin и модули ядра;
- /media — точки монтирования для сменных носителей;
- /mnt — точки монтирования для временного монтирования;
- /opt — дополнительное программное обеспечение;
- /proc — псевдофайловая система, показывает состояние ядра и запущенные процессы в системе;
- /root — домашний каталог пользователя root;
- /run — псевдофайловая система, показывает данные, относящиеся к запущенным процессам;
- /sbin — системные программы, которые может выполнять только суперпользователь;
- /srv — данные для сервисов предоставляемых системой;
- /sys — псевдофайловая система, показывает устройства и драйверы;
- /tmp — временные файлы, которые не сохраняются после перезагрузки;
- /usr — вторичная иерархия, например /usr/bin и /usr/sbin — дополнительные программы, а /usr/lib — библиотеки для этих программ;
- /var — изменяемые файлы (логи, базы данных, почтовые файлы), в этом же каталоге есть /var/tmp — временные файлы, которые должны быть сохранены после перезагрузки.
Структура каталогов в Ubuntu 22.04
Чтобы увидеть структуру каталогов можно воспользоваться утилитой tree. Но в Ubuntu её вначале нужно установить, для установки программы выполните команду:
alex@ubuntu:~$ sudo apt install tree
Затем выполните команду tree с опциями -d -L1 и укажите что нужно построить дерево каталогов от корня «/«:
alex@ubuntu:~$ tree -d -L 1 / / ├── bin -> usr/bin ├── boot ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib32 -> usr/lib32 ├── lib64 -> usr/lib64 ├── libx32 -> usr/libx32 ├── lost+found ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/sbin ├── snap ├── srv ├── sys ├── tmp ├── usr └── var 23 directories
Опция -d — говорит что нужно выводить только каталоги, а опция -L 1 — что нужно показать только 1 уровень подкаталогов и не нужно спускаться ниже.
Структура каталогов очень похожа на стандарт FHS, но есть несколько дополнительных каталогов:
- /lib32 и /lib64 — так как каталог /lib содержит библиотеки только для программ из каталогов /bin и /sbin и модули ядра, то в этих каталогах лежат все остальные библиотеки. Причем в каталоге /lib32 — 32-разрядные, а в /lib64 — 64-разрядные;
- /libx32 — а здесь лежат библиотеки для архитектуры x32;
- /lost+found — этот каталог использует утилита fsck. Утилита используется для проверки файловой системы. Если эта утилита в ходе проверки находит данные в файловой системе, которые повреждены или не имеют имени, то такие файлы помещаются в этот каталог.
- /snap — программы в Linux устанавливаются по разному. Один из способов, это использовать snap-пакеты. При этом устанавливаемая из snap программа будет помещена в каталог /snap.
Структура каталогов в Debian 11
В Debian тоже придется установить программу tree, но здесь по умолчанию нет sudo, поэтому для установки нужно выполнить следующие команды:
alex@deb-11:~$ su - Пароль: root@deb-11:~# apt install tree root@deb-11:~# exit
Если помните, то при установке Debian мы придумывали пароль вначале для суперпользователя root, а затем создавали своего пользователя alex. Здесь, первым шагом мы переключаемся на root пользователя и вводим пароль от него. Под ним (обратите внимание $ поменялось на #, об это я рассказывал в прошлой статье) выполняем установку приложения tree и выходим. Полностью установку программ мы разберем на следующих уроках!
Затем выполним уже знакомую команду tree:
alex@deb-11:~$ tree -d -L 1 / / ├── bin -> usr/bin ├── boot ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib32 -> usr/lib32 ├── lib64 -> usr/lib64 ├── libx32 -> usr/libx32 ├── lost+found ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/sbin ├── srv ├── sys ├── tmp ├── usr └── var 22 directories
Здесь все очень похоже на Ubuntu 22.04, но отсутствует каталог /snap. Так как snap по умолчанию в Debian 11 не используется.