2020
При написании приложения под операционную систему на низком уровне разработчик ориентируется на системные вызовы — какие запросы ядру ОС могут быть сделаны и какие ответы могут быть получены
Одним из известных стандартов, описывающих системные вызовы для UNIX-подобных ОС, является POSIX. Если приложение нацелено на POSIX, тогда оно будет работать под всеми ОС, реализующих его
Данный стандарт реализуется в большинстве UNIX-подобных ОС
Для того, чтобы иметь гордое название UNIX, необходимо соответствовать стандарту Single UNIX Specification
Помимо стандарта на системные вызовы разработчикам ПО необходимо определиться с тем как делить общее пространство — файловую систему, ФС
Для решения этой задачи в современном Linux используется Filesystem Hierarchy Standard, в котором описывается структура ФС и местонахождение ряда ключевых файлов для ОС
Нельзя сказать, что этому стандарту на 100% соответствует ФС каждого дистрибутива Linux, однако большая его часть соблюдается во всех. Это позволяет пользователям за разумное время переходить с одного дистрибутива на другой
Знакомая структура позволяет
/
— корневой каталог, содержащий всю файловую иерархию
/bin
содержит приложения, необходимые системы для запуска и функционирования/boot
содержит ядро ОС и настройки загрузчика/dev
содержит файлы, соответствующие физическим и логическим устройствам компьютера, которые воспринимает ядро ОС/etc
содержит конфигурационные файлы для всех приложений, почти все файлы тут являются текстовыми/home
содержит домашние каталоги для обычных пользователей ОС. В них пользователи хранят свои данные/lib
содержит файлы разделяемых библиотек, которые используются ключевыми приложениями ОС. В дистрибутивах Linux по возможности устанавливается одна версия библиотеки, которая используется множеством приложений/media
в современных дистрибутивах используется для автоматического подключения съёмных дисков: флеш-носителей, DVD-дисков/mnt
в старых дистрибутивах использовалась для ручного подключения носителей, в том числе съёмных/opt
используется для установки «опционального», дополнительного, ПО. Обычно используется для установки коммерческого ПО/proc
предоставляет доступ к виртуальной ФС, предоставляемой самим ядром ОС. Файлы в этой директории позволяют считать или изменить состояние ядра Linux/root
домашний каталог суперпользователя root
/run
каталог с временными файлами, необходимыми для системных приложений для поддержания своей работы или корректного завершения. Очищается при выключении компьютера/sbin
содержит исполняемые файлы, необходимые для настройки системы, системные приложения/srv
содержит данные, специфичные для данного сервера, например файлы FTP-сервера/sys
содержит информацию об устройствах, драйверах и некоторых функциях ядра/tmp
содержит временные файлы, создаваемые различными приложениями во время своей работы. Зачастую очищается при перезагрузке/usr
/usr
является наверное самым большим каталогом в обычной установке Linux, так как содержит приложения и файлы, необходимые для их работы
/usr/bin
содержит исполняемые файлы, которые устанавливаются средствами самого дистрибутива ОС. Зачастую содержит тысячи файлов/usr/include
содержит стандартные заголовочные файлы для языка Си/usr/lib
содержит разделяемые библиотеки для исполняемых файлов в /usr/bin
и /usr/sbin
/usr/local
предназначен для установки приложений не через стандартные средства установки приложений дистрибутива. По структуре аналогично дереву каталогов /usr
/usr/sbin
содержит исполняемые файлы для настройки самого дистрибутива/usr/share
содержит данные, которые используются приложениями из /usr/bin
. Включает в себя иконки, звуковые файлы, настройки по умолчанию/usr/share/doc
содержит документацию по установленным приложениям. В ряде дистрибутивов по умолчанию достаточно пуста и требует установки специальных пакетов с документацией/var
/var
в отличие от большинства предыдущих каталогов предназначен для хранения изменяемых данных. Примерами таких данных являются: содержимое баз данных, журналы работы приложений и так далее
/var/cache
содержит кэш для работы различных приложений/var/lib
содержит собственно данные, обрабатываемые различными приложениями: базами данных, пакетными менеджерами и т.д./var/lock
содержит lock-файлы, которые нужны для отображения занятых ресурсов/var/mail
содержит данные почтового сервера/var/opt
дополнительные данные, управляемые приложениями из каталога /opt
/var/spool
содержит задачи для дальнейшей обработки, например задачи для печати документов/var/tmp
содержит временные файлы, которые должны сохраниться после перезагрузкиВ UNIX-подобных ОС структура ФС представляет собой единое дерево. Чтобы добраться до файла или каталога необходимо построить путь
Постоянное использование абсолютных или относительных путей в некоторых ситуациях может быть не удобным:
Для решения поставленных выше задач используются символические ссылки — специальные файлы, которые содержат путь к целевому файлу или каталогу
Когда пользователь взаимодействует с символической ссылкой, то ОС автоматически перенаправляет его на целевой файл
Ссылки де-факто позволяют сделать переходы между каталогами вне системы единого дерева, формируя некоторый граф
Для отображения содержимого ссылки используется ls -l /usr/bin/discord
$ ls -l /usr/bin/discord
lrwxrwxrwx 1 root root 24 сен 10 20:52 /usr/bin/discord ->
../share/discord/Discord
lrwxrwxrwx
l
— тип файла, символическая ссылка1
— количество физических ссылок на данный каталогroot root
— информация о владельце файла24 сен 10 20:52
— дата модификации файла/usr/bin/discord
— путь к файлу-> ../share...
— содержимое ссылки, относительный путьВ стандартной цветовой схеме Bash рабочие ссылки отображаются светло-синим, а сломанные — красным
Жёсткие ссылки появились исторически раньше символических
Основные отличия:
Потенциальное преимущество жёстких ссылок по сравнению с символическими — это скорость доступа, но в текущих реалиях оно минимально
Следует использовать символические ссылки
Для создания ссылок используется приложение ln
с флагом -s
— символические
Быстрый доступ к cdrom
из домашней директории
$ ln -s /mnt/cdrom ~/cdrom
Для удаления ссылки достаточно её удалить как и любой другой файл
Важно если у вас есть ссылка на директорию, то не стоит выполнять это действие рекурсивно