LinuxFilesystemTreeOverview
Ubuntu (like all UNIX-like systems) organizes files in a hierarchical tree, where relationships are thought of in teams of children and parent. Directories can contain other directories as well as regular files, which are the «leaves» of the tree. Any element of the tree can be referenced by a path name; an absolute path name starts with the character / (identifying the root directory, which contains all other directories and files), then every child directory that must be traversed to reach the element is listed, each separated by a / sign.
A relative path name is one that doesn’t start with /; in that case, the directory tree is traversed starting from a given point, which changes depending on context, called the current directory. In every directory, there are two special directories called . and .., which refer respectively to the directory itself, and to its parent directory.
The fact that all files and directories have a common root means that, even if several different storage devices are present on the system, they are all seen as directories somewhere in the tree, once they are mounted to the desired place.
FilePermissions are another important part of the files organization system: they are superimposed to the directory structure and assign permissions to each element of the tree, ultimately decided by whom it can be accessed and how.
Examples
An absolute path name, pointing to what is normally an executable file on an Ubuntu system:
An absolute path name, but pointing to a directory instead of a regular file:
A relative path name, which will point to /usr/bin/test only if the current directory is /usr/:
A relative path name, which will point to /usr/bin/test if the current directory is any directory in /usr/, for instance /usr/share/:
A path name using the special shortcut ~, which refers to the current user’s home directory:
Path names can contain almost any character, but some characters, such as space, must be escaped in most software, usually by enclosing the name in quotation marks:
"~/Examples/Experience ubuntu.ogg"
or by employing the escape character \:
~/Examples/Experience\ ubuntu.ogg
Main directories
The standard Ubuntu directory structure mostly follows the Filesystem Hierarchy Standard, which can be referred to for more detailed information.
Here, only the most important directories in the system will be presented.
/bin is a place for most commonly used terminal commands, like ls, mount, rm, etc.
/boot contains files needed to start up the system, including the Linux kernel, a RAM disk image and bootloader configuration files.
/dev contains all device files, which are not regular files but instead refer to various hardware devices on the system, including hard drives.
/etc contains system-global configuration files, which affect the system’s behavior for all users.
/home home sweet home, this is the place for users’ home directories.
/lib contains very important dynamic libraries and kernel modules
/media is intended as a mount point for external devices, such as hard drives or removable media (floppies, CDs, DVDs).
/mnt is also a place for mount points, but dedicated specifically to «temporarily mounted» devices, such as network filesystems.
/opt can be used to store additional software for your system, which is not handled by the package manager.
/proc is a virtual filesystem that provides a mechanism for kernel to send information to processes.
/root is the superuser’s home directory, not in /home/ to allow for booting the system even if /home/ is not available.
/run is a tmpfs (temporary file system) available early in the boot process where ephemeral run-time data is stored. Files under this directory are removed or truncated at the beginning of the boot process.
(It deprecates various legacy locations such as /var/run, /var/lock, /lib/init/rw in otherwise non-ephemeral directory trees as well as /dev/.* and /dev/shm which are not device files.)
/sbin contains important administrative commands that should generally only be employed by the superuser.
/srv can contain data directories of services such as HTTP (/srv/www/) or FTP.
/sys is a virtual filesystem that can be accessed to set or obtain information about the kernel’s view of the system.
/tmp is a place for temporary files used by applications.
/usr contains the majority of user utilities and applications, and partly replicates the root directory structure, containing for instance, among others, /usr/bin/ and /usr/lib.
/var is dedicated to variable data, such as logs, databases, websites, and temporary spool (e-mail etc.) files that persist from one boot to the next. A notable directory it contains is /var/log where system log files are kept.
LinuxFilesystemTreeOverview (последним исправлял пользователь sydneypacific-seven-seventeen 2016-01-04 14:38:17)
The material on this wiki is available under a free license, see Copyright / License for details
You can contribute to this wiki, see Wiki Guide for details
Sysadminium
На этом уроке разберём «Единое дерево каталогов» и стандарт 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 не используется.