FHS

Очень важная тема. В отличие от виндоуса (где есть два каталога - windows и program files, а дальше чёрт ногу сломит), со стандартными каталогами линукса всё более-менее определено. Поскольку у нас есть ровно одна структура файловой системы, мы не пользуемся буквами A, B, C, D... у нас есть корень, из которого всё растёт, то можно себе позволить договориться о том, что именно растёт из этого корня. Есть группа людей, которые занимаются регулярной подготовкой документа FHS (filesystem hierarchy standart), в который включают всякие рекмендации по поводу того, как должна выглядеть файловая система в posix-совместимой системе. У нас даже есть пакет fhs, куда этот текст включается.

В корне у нас находится несколько подкаталогов, больше их не должно быть. У каждого из каталогов, которые находятся в корне структуры каталогов, есть собственное назначение.

/bin/ содержит исполняемые файлы, причём только те, которые необходимы для вывода системы в штатный режим (то есть, те, которые используются при старте).

/boot/ содержит файлы, используемые в процессе досистемной загрузки - это, как правило, два-три вида файлов: ядро, виртуальный диск, иногда загрузчик (grub).

/dev/ - специальный каталог, где хранятся так называемые "специальные файлы", они предназначены для того, чтбы можно было работать непосредственно с внешними устройствами системы, используя файловые операции. Поскольку внешнее устройство - более сложная штука, чем обычный файл, помимо обычных файловых операций есть ещё ioctl (файловая операция управления вводом-выводом). Она очень развесистая; для каждого устройства есть свои форматы ioctl. Обычному пользователю это не очень нужно, это нуно системе.

/etc/ - здесь лежат общесистемные настроечные файлы. Настройка системы системным администратором, как правило, сводится к изменению содержимого каталога /etc. Если вы сохраните каталог /etc, на основании этого каталога (плюс ещё надо знать, какие пакеты были установлены) можно развернуть операционную систему с теми же свойствами, что были раньше.

/home/ - каталог для домашних каталогов пользователей.

/lib/ - предназначен для хранения библитек, необходимых для старта системы. Что такое библиотеки. Вы пишете программу, которая использует функцию синус. Вот вы её написали, подумали, что функцию синус неоткуда брать, и написали алгоритм, вычисляющий синус. Выясняется, что синус нужен в некоторых других программах, и хорошо бы синус держать в отдельном файле, чтобы все другие программы можно было компилировать, используя один и тот же исходный текст функции синус. Потом оказывается, что таких функций много и глупо компилировать это каждый раз. Хорошо бы скомпилировать все эти функции один раз, получится так называесый "объектный файл", то есть файл, который нельзя напрямую выполнить, но он уже готов к компиляции, и когда вы пишете программу, вы говорите "обратиться к функции синус", и происходит компановка: берётся ваш файл про функцию синус, там, арктангенс... и на этапе компановке все они сваливаются в одну кучу, после чего получается бинарник, состоящий из скомпилированного вашего файла и других файлов, взятых из других мест, уже заранее скомпилированных. Следующий этап - когда вам приходит в голову, что не надо сотни функций хранить в сотне файлов, и хорошо бы заархивировать их в один файл и чтобы компилятор умел разархивировать этот файл и из него забирать куски скомпилированных функций. И это (то есть сборник объектных файлов) уже называется библиотека. Там уже не исходный код на языке C, а некоторый скомпилированный вариант. И дальше получается следующее: вы говорите "скомпилировать программу с использованием (допустим,) математической библиотеки". Проблемы начинаются дальше - 30 программ собираются 30 раз, компилируются с поддержкой математической библиотеки и в результате получается 30 исполняемых файлов, в которых 30 раз хранится одно и то же. Жалко места. Было бы удобно, чтобы всё лежало в одном месте, а не в тридцати. Другая проблема хуже - при изменении библиотеки надо пересобирать все файлы, в которых использована эта библиотека. Выход - отказаться от того, чтобы при компиляции программы внутрь исполняемого файла кладётся всё необходимое для её работы. То есть, мы скомпилируем программу и в ней при компиляции напишем, что для того, чтобы она работала, нужно подгрузить математическую библиотеку. Обе задачи решены. Недостаток - программа не запустится, если библиотеки нет. Есть программа ldd, которая показывает, какие библиотеки (они называются динамическими, так как загружаются в память не в момент компиляции, а в момент запуска) нужны конкретной программе.

/lost+found/ - в каждой файловой системе создаётся этот каталог, в котором помещаются результаты ремонта этой файловой системы. То есть, здесь лежат потерянные и найденные файлы: файлы без имени, которые нашлись, и всякое такое. Последние неколько лет лектор не видел, чтобы что-то появлялось в этом каталоге в результате ремонта файловой системы, поскольку в линуксе используется журналирование, и с файловой системой может многое случиться, но именно потерянные файлы - это редкость.

/media/ - предназначен для автоматического подключения внешних устройств. Например, вы не хотите подключать руками, скажем, флешку, а делать так, чтобы какой-то робот определял, что это за флешка, и её в какое-то место подключал. Согласно стандарту, результат работ этого робота, после того как вы воткнули флешку в компьютер, должен быть таким: в каталоге /media/ должен быть создан подкаталог, внутри которого будет содержимое вашей флешки. Когда вы её извлекаете, этот каталог пустеет или удаляется.

/mnt/ - если устройство подключается вручную, при помощи команды mount, считается хорошим тоном подключать его не в каталог /media, а сюда. Чтобы не мешать роботу.

/opt/ - предназначен для того, чтобы сваливать в него всё, что не вхдит в дистрибутив, не подчиняется дисциплине оформления програмного продукта, разработанного для вашего дистрибутива. Дисциплина оформления установки в /opt следующая: /opt/имя продукта/ его собственный bin, lib, etc... Обычно этот каталог пустует.

/proc/ - виртуальная файловая система, специфичная в сновном для Linux, где в виде файлов и каталогов представлена структура процессов.

/root/ - домашний каталог суперпользователя, который хранит там свои суперпользовательские штуки. Он не находится в /home для того, чтобы они (суперпользовательские штуки) были доступны тогда, когда /home отвалился.

/sbin/ - там хранятся программы, не нужные обычным людям, но нужные для работы операционной системы и такие, которые используются при старте. Если почитать документацию про эти программы, окажется, что все они связаны с разметкой диска, с работой с внешними устройствами, с работой с сетью.

/srv/ происходит от слова server - там разрешается размещать файлы, которые мы раздаём всем окружающим, например, подключаем как сетевую файловую систему. По FHS, содержимое ftp-сервера должно быть тут.

/sys/ - ещё одна виртуальная файловая система, которая представляет в виде файловой системы структуру аппаратного обеспечения в том виде, в котором её воспринимает ядро линукса. Она удобна для того, чтобы тута заглянуть и узнать, что думает линукс о том железе, на котором вы работаете. Она удобна продвинутым пользователям, ещё более удобна для роботов, которые должны что-то распознать и на этом основании что-то делать.

/tmp/ - каталог для хранения временных файлов

/var/ - каталог, предназначенный для данных, размер и количество которых неизвестны:

/usr/

Всё. Остался только /usr. Давайте посмотрим в /usr. Обратите внимание, что в /usr есть каталог /bin, каталог /lib, какалог /sbin. Такие точно, как в корне. Дело в том, что в каталоге /usr в отличие от корневого хранятся все остальные программы. Если в /bin хранятся программы, нужные для вывода системы в штатный режим, а в /sbin хранятся системные программы, то в каталоге /usr/bin лежат все пользовательские приложения. Их там намного больше, чем в /bin. То же самое относится к /usr/lib: там лежат все библиотеки, необходимые для работы пользователя, в том числе необходмые для программирования. То же самое относится к /usr/sbin. Что ещё важно? Есть /usr/share, в него традиционно складываются файлы, которые не зависят от архитектуры, то есть, те, которые одинаково выглядят как на 32-разрядных машинах, так и на 64-разрядных машинах и вообще на машинах с другой архитектурой. То есть, вы же понимаете, что если мы берём машины с разной архитектурой, скажем, бинарные файлы у них разные принципиально, и бинарные файлы 64-разрядной архитектуры на 32-разрядной просто не запустятся. А что касается содержимого /usr/share, там много чего есть; самый главный каталг - это /usr/share/doc, где лежит вся документация. Предполагается, что представление докуентации не зависит от.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

20

1

1

1

1

ConstantinYershow, DmitryChistikov, MaximByshevskiKonopko


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex