Differences between revisions 11 and 12
Revision 11 as of 2008-07-27 22:02:18
Size: 18889
Comment: Perfect, just perfect.
Revision 12 as of 2008-07-27 22:11:03
Size: 18906
Comment: Мелкие поправки, ёизация.
Deletions are marked like this. Additions are marked like this.
Line 7: Line 7:
Иерархия стандартных каталогов в Линукс достаточно жестко предопределена. Файловая система образует единую структуру --- дерево, "растущее" из корня (каталог /). Определенная группа людей выпускает ревизии документа под названием Filesystem Hierarchy Standard (FHS), в который включаются рекомендации по поводу того, как должна выглядеть файловая система в POSIX-совместимой ОС. В ПСПО ALT Linux данный документ поставляется в пакете с соответствующим названием --- fhs. Иерархия стандартных каталогов в Линукс достаточно жёстко предопределена. Файловая система образует единую структуру --- дерево, "растущее" из корня (каталог /). Определённая группа людей выпускает ревизии документа под названием Filesystem Hierarchy Standard (FHS), в который включаются рекомендации по поводу того, как должна выглядеть файловая система в POSIX-совместимой ОС. В ПСПО ALT Linux данный документ поставляется в пакете с соответствующим названием --- fhs.
Line 9: Line 9:
Согласно FHS, каждый из подкаталогов корневого каталога имеет стандартное имя и заранее определенное назначение. Опишем их вкратце. Согласно FHS, каждый из подкаталогов корневого каталога имеет стандартное имя и заранее определённое назначение. Опишем их вкратце.
Line 15: Line 15:
`/dev` --- каталог для "специальных файлов", дающих возможность работать со внешними устройствами системы при помощи файловых операций. Поскольку внешнее устройство --- сущность более сложная, чем файл, то помимо обычных файловых операций есть файловая операция управления вводом-выводом --- ioctl. Каждому устройству может соответствовать свой формат ioctl. Большинство файлов в каталоге /dev обычно используются не пользователем, а самой системой. `/dev` --- каталог для "специальных файлов", дающих возможность работать со внешними устройствами системы при помощи файловых операций. Поскольку внешнее устройство --- сущность более сложная, чем файл, то помимо обычных файловых операций есть файловая операция управления вводом-выводом --- ioctl. Каждому устройству может соответствовать свой формат ioctl. Большинство файлов в каталоге `/dev` обычно используются не пользователем, а самой системой.
Line 17: Line 17:
`/etc` --- каталог для общесистемных конфигурационных (настроечных) файлов. Настройка системы системным администратором сводится в первую очередь к изменению содержимого каталога /etc. Сохранение всего /etc и перечня установленных пакетов делает восстановление ОС (именно ОС, а не хранящихся на диске пользовательских данных!) в случае необходимости довольно несложной операцией. `/etc` --- каталог для общесистемных конфигурационных (настроечных) файлов. Настройка системы системным администратором сводится в первую очередь к изменению содержимого каталога `/etc`. Сохранение всего `/etc` и перечня установленных пакетов делает восстановление ОС (именно ОС, а не хранящихся на диске пользовательских данных!) в случае необходимости довольно несложной операцией.
Line 25: Line 25:
 1. Напишем программу, использующую функцию синус. Предположим, что о существовании "стандартных библиотек" мы не догадываемся, и реализуем известный алгоритм самостоятельно. Быстро выяснится, что синус используется не в одной, а в нескольких программах, а потому исходный текст нашей функции удобно хранить в отдельном файле. Однако компилировать каждый раз один и тот же код довольно неразумно. Естественно сделать это лишь однажды и записать результат в так называемый '''объектный файл'''. Он не будет предназначен для исполнения, однако будет готов к компоновке: когда мы напишем еще одну программу, использующую синус, достаточно будет этот файл подложить в нужный момент компоновщику.  1. Напишем программу, использующую функцию синус. Предположим, что о существовании "стандартных библиотек" мы не догадываемся, и реализуем известный алгоритм самостоятельно. Быстро выяснится, что синус используется не в одной, а в нескольких программах, а потому исходный текст нашей функции удобно хранить в отдельном файле. Однако компилировать каждый раз один и тот же код довольно неразумно. Естественно сделать это лишь однажды и записать результат в так называемый '''объектный файл'''. Он не будет предназначен для исполнения, однако будет готов к компоновке: когда мы напишем ещё одну программу, использующую синус, достаточно будет этот файл подложить в нужный момент компоновщику.
Line 27: Line 27:
 1. Нужных нам функций может набраться довольно много. Наступит момент, когда мы поймем, что сотню функций не слишком-то удобно хранить в сотне файлов. Гораздо лучше собрать все, к примеру, математические функции в один большой файл --- архив специального вида. При сборке программ, использующих эти функции, компоновщик должен уметь разархивировать этот файл и забирать из него нужные фрагменты --- отдельные скомпилированные функции. Такой архив --- сборник объектных файлов --- называется '''библиотекой'''. При компиляции любой из наших программ достаточно будет сказать: "Эта программа должна быть собрана с использованием математической библиотеки".  1. Нужных нам функций может набраться довольно много. Наступит момент, когда мы поймём, что сотню функций не слишком-то удобно хранить в сотне файлов. Гораздо лучше собрать все, к примеру, математические функции в один большой файл --- архив специального вида. При сборке программ, использующих эти функции, компоновщик должен уметь разархивировать этот файл и забирать из него нужные фрагменты --- отдельные скомпилированные функции. Такой архив --- сборник объектных файлов --- называется '''библиотекой'''. При компиляции любой из наших программ достаточно будет сказать: "Эта программа должна быть собрана с использованием математической библиотеки".
Line 29: Line 29:
 1. Оказывается, что и такой подход порождает свои проблемы. Напишем 30 программ, использующих синус, и соберем их с поддержкой нашей математической библиотеки. Результатом будут 30 исполняемых файлов, в каждом из которых будет храниться один и тот же машинный код, вычисляющий синус. Понятно, что это ничем не мотивированный перерасход дискового пространства. Было бы гораздо удобней, если содержимое нашей библиотеки хранилось в файловой системе в единственном экземпляре. Кроме того, есть и более неприятная проблема: если библиотеку потребуется изменить (к примеру, если мы обнаружим ошибку, из-за которой синус нуля дает -7), то все использующие ее программы также потребуют пересборки (а если одну из них мы пересобрать забудем?). Выход один --- следует отказаться от принципа, согласно которому все необходимое для работы программы кладется внутрь ее исполняемого файла при компиляции. Решающая описанные проблемы схема выглядит следующим образом. При сборке наших программ указывается, что для их работы нужно подгрузить математическую библиотеку. Оформленные соответствующим способом библиотеки называются '''динамическими''': они не входят в исполняемый файл, а загружаются в память в момент запуска использующей их программы. Понятно, что если при запуске такой программы нужной для ее работы динамической библиотеки в соответствующем месте не окажется, то запуститься программа не сможет. Чтобы определить, какие динамические библиотеки нужны той или иной программе, пользуются утилитой ldd.  1. Оказывается, что и такой подход порождает свои проблемы. Напишем 30 программ, использующих синус, и соберем их с поддержкой нашей математической библиотеки. Результатом будут 30 исполняемых файлов, в каждом из которых будет храниться один и тот же машинный код, вычисляющий синус. Понятно, что это ничем не мотивированный перерасход дискового пространства. Было бы гораздо удобней, если содержимое нашей библиотеки хранилось в файловой системе в единственном экземпляре. Кроме того, есть и более неприятная проблема: если библиотеку потребуется изменить (к примеру, если мы обнаружим ошибку, из-за которой синус нуля дает -7), то все использующие её программы также потребуют пересборки (а если одну из них мы пересобрать забудем?). Выход один --- следует отказаться от принципа, согласно которому все необходимое для работы программы кладётся внутрь ее исполняемого файла при компиляции. Решающая описанные проблемы схема выглядит следующим образом. При сборке наших программ указывается, что для их работы нужно подгрузить математическую библиотеку. Оформленные соответствующим способом библиотеки называются '''динамическими''': они не входят в исполняемый файл, а загружаются в память в момент запуска использующей их программы. Понятно, что если при запуске такой программы нужной для её работы динамической библиотеки в соответствующем месте не окажется, то запуститься программа не сможет. Чтобы определить, какие динамические библиотеки нужны той или иной программе, пользуются утилитой ldd.
Line 33: Line 33:
`/lost+found` --- при создании большинства файловых систем этот каталог создается автоматически. В него могут помещаться результаты ремонта этой файловой системы --- потерянные и найденные файлы (файлы без имени, найденные при проверке, и пр.). В современных ФС, используемых в ОС Линукс, обычно применяется журналирование, так что оказавшиеся в lost+found файлы --- большая редкость. `/lost+found` --- при создании большинства файловых систем этот каталог создаётся автоматически. В него могут помещаться результаты ремонта этой файловой системы --- потерянные и найденные файлы (файлы без имени, найденные при проверке, и пр.). В современных ФС, используемых в ОС Линукс, обычно применяется журналирование, так что оказавшиеся в lost+found файлы --- большая редкость.
Line 35: Line 35:
`/media` --- это каталог для автоматического подключения устройств хранения данных. Допустим, мы не считаем необходимым выполнять монтирование флешки (подключать располагающуюся на ней часть файловой системы к общему дереву) вручную, а хотим поручить эту операцию специальной программе-роботу. Эта программа будет сама определять, что это за флешка, и выполнять требуемые действия. Согласно стандарту, результат работы этой программы должен быть таким: после того, как флешка подключена к компьютеру, в каталоге /media должен быть создан подкаталог, соответствующий содержимому флешки. При извлечении флешки этот каталог становится пустым или вообще удаляется. `/media` --- это каталог для автоматического подключения устройств хранения данных. Допустим, мы не считаем необходимым выполнять монтирование флешки (подключать располагающуюся на ней часть файловой системы к общему дереву) вручную, а хотим поручить эту операцию специальной программе-роботу. Эта программа будет сама определять, что это за флешка, и выполнять требуемые действия. Согласно стандарту, результат работы этой программы должен быть таким: после того, как флешка подключена к компьютеру, в каталоге `/media` должен быть создан подкаталог, соответствующий содержимому флешки. При извлечении флешки этот каталог становится пустым или вообще удаляется.
Line 39: Line 39:
`/opt` --- каталог, обыкновенно использующийся для программных продуктов, не входящих в дистрибутив или не соблюдающих общепринятые правила оформления (FHS). Дисциплина оформления установки в /opt проста: каталог /opt/имя_продукта (чаще всего --- именно так) содержит необходимые для работы подкаталоги. В большинстве случаев, отметим, каталог /opt пустует. `/opt` --- каталог, обыкновенно использующийся для программных продуктов, не входящих в дистрибутив или не соблюдающих общепринятые правила оформления (FHS). Дисциплина оформления установки в `/opt` проста: каталог `/opt/имя_продукта` (чаще всего --- именно так) содержит необходимые для работы подкаталоги. В большинстве случаев, отметим, каталог `/opt` пустует.
Line 43: Line 43:
`/root` --- домашний каталог суперпользователя. Его не помещают в /home, чтобы сделать суперпользовательские данные доступными и в случае невозможности подключения `/home`. `/root` --- домашний каталог суперпользователя. Его не помещают в `/home`, чтобы сделать суперпользовательские данные доступными и в случае невозможности подключения `/home`.
Line 49: Line 49:
`/sys` --- каталог для еще одной виртуальной файловой системы ОС Linux. Здесь представлена структура аппаратного обеспечения компьютера в том виде, в котором ее воспринимает ядро ОС. Этот каталог удобно использовать, чтобы узнать, что Линукс "думает" об установленном железе. Данная возможность бывает полезна как опытным пользователям, так и выполняющим системные задачи программам-роботам. `/sys` --- каталог для ещё одной виртуальной файловой системы ОС Linux. Здесь представлена структура аппаратного обеспечения компьютера в том виде, в котором её воспринимает ядро ОС. Этот каталог удобно использовать, чтобы узнать, что Линукс "думает" об установленном железе. Данная возможность бывает полезна как опытным пользователям, так и выполняющим системные задачи программам-роботам.
Line 55: Line 55:
 * `/usr/bin`, `/usr/lib`, `/usr/sbin` --- каталоги, аналогичные `/bin`, `/lib` и `/sbin` соответственно, с той разницей, что здесь лежат не являющиеся необходимыми для выведения системы в штатный режим файлы (программы, библиотеки, суперпользовательские утилиты). Так, `/usr/bin` содержит подавляющее большинство пользовательских приложений, `/usr/lib` --- пользовательских библиотек (в том числе необходимых для программирования).  * `/usr/bin`, `/usr/lib`, `/usr/sbin` --- каталоги, аналогичные `/bin`, `/lib` и `/sbin` соответственно, с той разницей, что здесь лежат не являющиеся необходимыми для выведения системы в штатный режим файлы (программы, библиотеки, суперпользовательские утилиты). Так, `/usr/bin` содержит подавляющее большинство пользовательских приложений, `/usr/lib` --- пользовательских библиотек (в том числе, необходимых для программирования).

FHS

  • И вообще, Linux FHS для меня являлся символом устойчивости Unix-подобных систем в меняющемся мире. Созерцание структуры каталогов оказывало на меня примерно такое же действие, как на некоторых представителей человечества -- созерцание эрмитажных атлантов, поддерживающих небо...

    • -- mutabor in sisyphus@

      • -- fortunes.ALT

Иерархия стандартных каталогов в Линукс достаточно жёстко предопределена. Файловая система образует единую структуру --- дерево, "растущее" из корня (каталог /). Определённая группа людей выпускает ревизии документа под названием Filesystem Hierarchy Standard (FHS), в который включаются рекомендации по поводу того, как должна выглядеть файловая система в POSIX-совместимой ОС. В ПСПО ALT Linux данный документ поставляется в пакете с соответствующим названием --- fhs.

Согласно FHS, каждый из подкаталогов корневого каталога имеет стандартное имя и заранее определённое назначение. Опишем их вкратце.

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

/boot содержит файлы, используемые в процессе досистемной загрузки. Как правило, там располагаются файлы, содержащие ядро (для ОС Линукс это чаще всего vmlinuz), виртуальный диск (initrd) --- как ядер, так и виртуальных дисков может быть несколько; иногда --- загрузчик (если используется GRUB).

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

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

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

/lib предназначен для хранения библиотек, необходимых для старта системы.

Отступление: библиотеки

  1. Напишем программу, использующую функцию синус. Предположим, что о существовании "стандартных библиотек" мы не догадываемся, и реализуем известный алгоритм самостоятельно. Быстро выяснится, что синус используется не в одной, а в нескольких программах, а потому исходный текст нашей функции удобно хранить в отдельном файле. Однако компилировать каждый раз один и тот же код довольно неразумно. Естественно сделать это лишь однажды и записать результат в так называемый объектный файл. Он не будет предназначен для исполнения, однако будет готов к компоновке: когда мы напишем ещё одну программу, использующую синус, достаточно будет этот файл подложить в нужный момент компоновщику.

  2. Нужных нам функций может набраться довольно много. Наступит момент, когда мы поймём, что сотню функций не слишком-то удобно хранить в сотне файлов. Гораздо лучше собрать все, к примеру, математические функции в один большой файл --- архив специального вида. При сборке программ, использующих эти функции, компоновщик должен уметь разархивировать этот файл и забирать из него нужные фрагменты --- отдельные скомпилированные функции. Такой архив --- сборник объектных файлов --- называется библиотекой. При компиляции любой из наших программ достаточно будет сказать: "Эта программа должна быть собрана с использованием математической библиотеки".

  3. Оказывается, что и такой подход порождает свои проблемы. Напишем 30 программ, использующих синус, и соберем их с поддержкой нашей математической библиотеки. Результатом будут 30 исполняемых файлов, в каждом из которых будет храниться один и тот же машинный код, вычисляющий синус. Понятно, что это ничем не мотивированный перерасход дискового пространства. Было бы гораздо удобней, если содержимое нашей библиотеки хранилось в файловой системе в единственном экземпляре. Кроме того, есть и более неприятная проблема: если библиотеку потребуется изменить (к примеру, если мы обнаружим ошибку, из-за которой синус нуля дает -7), то все использующие её программы также потребуют пересборки (а если одну из них мы пересобрать забудем?). Выход один --- следует отказаться от принципа, согласно которому все необходимое для работы программы кладётся внутрь ее исполняемого файла при компиляции. Решающая описанные проблемы схема выглядит следующим образом. При сборке наших программ указывается, что для их работы нужно подгрузить математическую библиотеку. Оформленные соответствующим способом библиотеки называются динамическими: они не входят в исполняемый файл, а загружаются в память в момент запуска использующей их программы. Понятно, что если при запуске такой программы нужной для её работы динамической библиотеки в соответствующем месте не окажется, то запуститься программа не сможет. Чтобы определить, какие динамические библиотеки нужны той или иной программе, пользуются утилитой ldd.

(конец отступления)

/lost+found --- при создании большинства файловых систем этот каталог создаётся автоматически. В него могут помещаться результаты ремонта этой файловой системы --- потерянные и найденные файлы (файлы без имени, найденные при проверке, и пр.). В современных ФС, используемых в ОС Линукс, обычно применяется журналирование, так что оказавшиеся в lost+found файлы --- большая редкость.

/media --- это каталог для автоматического подключения устройств хранения данных. Допустим, мы не считаем необходимым выполнять монтирование флешки (подключать располагающуюся на ней часть файловой системы к общему дереву) вручную, а хотим поручить эту операцию специальной программе-роботу. Эта программа будет сама определять, что это за флешка, и выполнять требуемые действия. Согласно стандарту, результат работы этой программы должен быть таким: после того, как флешка подключена к компьютеру, в каталоге /media должен быть создан подкаталог, соответствующий содержимому флешки. При извлечении флешки этот каталог становится пустым или вообще удаляется.

/mnt --- каталог, предназначенный для подключаемых вручную (при помощи команды mount) устройств.

/opt --- каталог, обыкновенно использующийся для программных продуктов, не входящих в дистрибутив или не соблюдающих общепринятые правила оформления (FHS). Дисциплина оформления установки в /opt проста: каталог /opt/имя_продукта (чаще всего --- именно так) содержит необходимые для работы подкаталоги. В большинстве случаев, отметим, каталог /opt пустует.

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

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

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

/srv --- каталог для предоставляемых машиной данных, например сетевой файловой системы. Здесь же, к примеру, должны лежать данные, раздаваемые по протоколу FTP.

/sys --- каталог для ещё одной виртуальной файловой системы ОС Linux. Здесь представлена структура аппаратного обеспечения компьютера в том виде, в котором её воспринимает ядро ОС. Этот каталог удобно использовать, чтобы узнать, что Линукс "думает" об установленном железе. Данная возможность бывает полезна как опытным пользователям, так и выполняющим системные задачи программам-роботам.

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

/usr --- особый каталог с собственной внутренней иерархией подкаталогов. Мы отметим лишь некоторые из его подкаталогов.

  • /usr/bin, /usr/lib, /usr/sbin --- каталоги, аналогичные /bin, /lib и /sbin соответственно, с той разницей, что здесь лежат не являющиеся необходимыми для выведения системы в штатный режим файлы (программы, библиотеки, суперпользовательские утилиты). Так, /usr/bin содержит подавляющее большинство пользовательских приложений, /usr/lib --- пользовательских библиотек (в том числе, необходимых для программирования).

  • /usr/share --- каталог для хранения архитектурно-независимых данных (соответствующие файлы одинаково выглядят, к примеру, на 32- и 64-разрядных машинах). Понятно, что бинарные приложения сюда поместить нельзя (они принципиально другие), а вот, например, документацию --- вполне (она располагается в /usr/share/doc).

/var --- каталог, предназначенный для данных, размер и количество которых заранее неизвестны. В большинстве систем можно найти подкаталоги со следующим содержимым:

  • /var/cache --- разного рода кэши приложений;

  • /var/db --- базы данных нетекстового формата;

  • /var/lib --- специальные изменяемые файлы различных служб (в ПСПО ALT Linux здесь находятся, к примеру, изолированные окружения);

  • /var/lock --- файлы блокировки (запускаемые программы могут создавать здесь файлы, чтобы другие программы по наличию или отсутствию этих файлов получали информацию о возможности доступа к тому или иному ресурсу);

  • /var/log --- системные журналы;

  • /var/mail --- списки почтовых очередей;

  • /var/opt --- изменяемые данные установленных в /opt программ;

  • /var/preserv --- периодически обновляемые копии различных составляющих системы (к примеру, содержимого /etc);

  • /var/run --- информация о том, какие запущены подсистемы (services) и что в этих подсистемах происходит (например, сюда помещаются файлы, содержащие идентификаторы соответствующих процессов).


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

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

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

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

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

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

Level

Maintainer

Start date

End date

69

1

1

1

1

ConstantinYershow, DmitryChistikov, MaximByshevskiKonopko


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex

PspoClasses/080718/05FHS (last edited 2008-10-09 18:44:27 by MaximByshevskiKonopko)