/usr/share – архитектурно-независимые данные
   Каталог предназначен для всех архитектурно-независимых файлов данных, предназначенных только для чтения (неизменяемых). Содержит следующие каталоги:
   • /diet – списки слов (словари);
   • /doc – разнообразная документация;
   • /games – неизменяемые файлы данных для /usr/games;
   • /info – основной каталог информационной системы GNU;
   • /locale – информация для локализации системы;
   • /man – файлы справочной системы;
   • /misc – разнообразные архитектурно-независимые данные;
   • /terminfo – каталог для базы данных terminfo;
   • /zoneinfo – информация и конфигурация временной зоны (Timezone).
   Любая программа или пакет, который содержит или требует данных, не нуждающихся в модификации должны хранится в /usr/share (или /usr/local/share, если программное обеспечение установлено локально).
   /usr/share/dict – списки слов (словари)
   Каталог содержит словари, находящиеся в системе. Традиционно в этом каталоге находится только файл с английскими словами, которые используются программой look и многими программами проверки правописания. В этот каталог можно установить свои файлы, например, с русскими словами.
   /usr/share/man – страницы справочной системы
   Каталог предназначен для хранения данных справочной системы. Вся справочная информация разделена на восемь больших тем, для каждой существует свой отдельный каталог – от /man1 до /man8. Содержит следующие каталоги:
   • /man1 – справочные страницы, описывающие доступные пользователям программы;
   • /man2 – раздел, описывающий все системные вызовы (для взаимодействия с ядром);
   • /man3 – библиотечные функции и подпрограммы. Описывает программные библиотеки, напрямую не взаимодействующие с ядром операционной системы. Этот и второй разделы справочной системы представляют интерес только для программистов;
   • /man4 – описывает специальные файлы, осуществляющие функции драйверов и сетевой поддержки в системе. В основном эти файлы находятся в каталоге /dev;
   • /man5 – документация по множеству файловых форматов;
   • /man6 – содержится документация по разнообразным играм;
   • /man7 – разное. Содержит документацию, которую трудно классифицировать;
   • /man8 – системное администрирование. Программы, используемые системным администратором для администрирования и сопровождения системы.
   Система справочной информации должна поддерживать несколько языков одновременно, поэтому для исключения конфликтов в каталоге /usr/share/man файлы справочной системы принято хранить следующим образом:
   • для каждого языка, установленного в системе (locale, локаль), в каталоге /usr/share/man создается подкаталог, носящий имя своей локали;
   • в этом подкаталоге создаются каталоги /man<раздел>, причем только те, в которых есть справочная информация;
   • в каталоге /man<раздел> хранятся справочные файлы, отдельные для каждой установленной программы, причем стандартом de-facto является то, что справочные файлы хранятся в архивированном виде (никто, однако, не запрещает хранить их в распакованном виде, но для экономии места на жестком диске их упаковывают).
   Программа man при обращении к ней с целью получения справочной информации по какой-то программе сначала пытается получить справочную информацию на языке, соответствующем текущей локали. Если ей это не удается, то берется информация, хранящяяся в /шг/811аге/man/man<раздел>. По умолчанию в этих каталогах содержится англоязычная справочная информация.
   Наименование языковых подкаталогов в /usr/share/man основывается на приложении Е стандарта POSIX 1003.1, который описывает строку-идентификатор локали. Строка-идентификатор локали согласно этому стандарту имеет вид:
 
   <язык>[_<территория>][.<кодовая страница символов>][,<версия>]
 
   • поле <язык> берется из стандарта ISO 639. Это должны быть два символа исключительно в нижнем регистре;
   • поле <территория> должно быть двухсимвольным кодом только в верхнем регистре (согласно стандарту ISO 3166);
   • поле скодовая страница символов> должно быть представлено в стандартном описании кодовой страницы. Если скодовая страница символов> содержит числовую спецификацию, она соответствует интернациональному стандарту, описывающему эту страницу;
   • поле <версия> рекомендуется не использовать без крайней необходимости. Реальное его применение – например, для страны, имеющей один язык и кодировку, но разные диалекты.
   Пример формирования каталогов локализованной справочной системы приведен в табл. 5.3.
Таблица 5.3. Пример формирования каталогов локализованной справочной системы
   Архитектурно-зависимые справочные файлы можно помещать в отдельные каталоги, соответствующие архитектуре. Например, /usr/share/man/<locale>/ man8/i386/ctrlaltdel.8. Однако проще написать общее справочное руководство, в котором особо отметить архитектурно-зависимые случаи, чем разрабатывать справочные файлы для каждой архитектуры.
   Справочная информация для программ и данных, находящихся в /usr/local, размещается в каталоге /usr/local/man. Справочная информация, касающаяся X11R6, размещается в каталоге /usr/X11R6/man.
   Правило размещения справочных руководств на различных языках в отдельные подкаталоги также распространяется и на справочные руководства, хранящиеся в каталогах /usr/local/man и /usr/X11R6/man.
   /usr/share/misc – различные архитектурно-независимые данные
   Каталог содержит различные архитектурно-независимые файлы, которые не требуют отдельного каталога в /usr/share/. Если соответствующие пакеты установлены в системе, в каталоге должны находиться следующие файлы:
   • ascii – ASCII-таблица символов;
   • magic – список «магических» цифр;
   • termcap – база данных совместимости терминалов.
/usr/src – исходные тексты программ
   Любой исходный код нелокальной программы должен помещаться в этот каталог.
   /usr/src/Liriux-2.4.3 – каталог исходного кода ядра Linux
   В каталоге хранятся файлы и каталоги, содержащие исходный код ядра Linux, модулей, различная документация. Имя каталога меняется в зависимости от того, исходный код какой версии ядра Linux находится в каталоге.
   /usr/src/Linux-2.4.3/Documentation – документация к ядру и модулям операционной системы Linux
   В каталоге содержится документация, которая тем или иным образом касается ядра операционной системы Linux или загружаемых модулей. Типичное содержимое каталога приведено ниже:
 
   /arm
   /cdrom
   /cris
   /DocBook
   /fb
   /filesystems
   /i2c
   /i386
   /ia64
   /isdn
   /kbuild
   /m68k
   /mips
   /networking
   /parisc
   /powerpc
   /s390
   /sound
   /sparc
   /sysctl
   /telephony
   /video4linux
   /vm
   /usb
   00-INDEX
   binfmt_misc.txt
   BUG-HUNTING
   cachetlb.txt
   cciss.txt
   Changes
   CodingStyle
   computone.txt
   Configure.help
   cpqarray.txt
   devices.txt
   digiboard.txt
   digiepca.txt
   DMA-mapping.txt
   dnotify.txt
   exception.txt
   floppy.txt
   ftape.txt
   hayes-esp.txt
   highuid.txt
   ide.txt
   initrd.txt
   ioctl-number.txt
   IO-mapping.txt
   IRQ-affinity.txt
   isapnp.txt
   java.txt
   joystick-api.txt
   joystick-paiport.txt
   joystick.txt
   kernel-doc-nano-HOWTO.txt
   kernel-docs.txt
   kernel-parameters.txt
   kmod.txt
   locks.txt
   logo.gif
   logo.txt
   LVM-HOWTO
   magic-number.txt
   mandatoiy.txt
   mca.txt
   md.txt
   memory.txt
   mkdev.cciss
   mkdev.ida
   modules.txt
   moxa-smartio
   mtrr.txt
   nbd.txt
   nfsroot.txt
   nmi_watchdog.txt
   oops-tracing.txt
   paride.txt
   parport-lowlevel.txt
   parport.txt
   pci.txt
   pcwd-watchdog.txt
   pm.txt
   ramdisk.txt
   README.DAC960
   README.moxa
   README.nsp_cs.eng
   riscom8.txt
   rtc.txt
   SAK.txt
   scsi-generic.txt
   scsi.txt
   serial-console.txt
   sgi-visws.txt
   smart-config.txt
   smp.tex
   smp.txt
   specialix.txt
   spinlocks.txt
   stallion.txt
   SubmittingDrivers
   SubmittingPatches
   svga.txt
   sx.txt
   sysrq.txt
   unicode.txt
   VGA-softcursor.txt
   watchdog.txt
   xterm-linux.xpm
   zorro.txt
/usr/X11R6 – X Window System, Version 11 Release 6
   В каталоге X11R6 содержится иерархия каталогов X Window. Информацию о структуре и назначении каталогов следует искать в документации на X Window.

http://www.pathname.com/fhs/ – Filesystem Hierarchy Standard в различных текстовых форматах.
   • http://www.kerael.org/pub/llniix/docs/device-list/devices.txt – список устройств и специальных файлов.
   • proc.txt – документация по файловой системе procfs. Входит в состав документации к ядру Linux.
   • Соответствующие тап-страницы.
   • Соответствующие HOWTO (см. гл. 13):
   – Networking-HOWTO;
   – SMB-HOWTO;
   – DNS-HOWTO;
   – LILO-HOWTO.

Глава 6
Процесс загрузки Linux

   Для того чтобы достичь полного контроля над операционной системой крайне важно представлять себе, как происходит процесс ее загрузки.
   Вот нажатием кнопки Power вы включили компьютер. Сначала специальная программа, зашитая в ПЗУ материнской платы, производит тестирование установленного в компьютере оборудования. В случае неудачи вы либо услышите из встроенного динамика компьютера серию гудков, либо программа тестирования оборудования выведет на дисплей предупреждающее сообщение.
   Если система успешно прошла тестирование, на дисплее можно будет увидеть перечень установленного оборудования, емкость оперативной памяти и жесткого диска. После этого программа BIOS (Basic Input/Output System – базовая система ввода/вывода), хранящаяся в ПЗУ материнской платы, определит, с какого устройства будет происходить загрузка (например, с жесткого диска С:), и считает из первого сектора загрузочного диска короткую программу-загрузчик. Эта программа (LILO, GRUB) загружает с жесткого диска ядро Linux, которое имеет имя vmlinuz-x.y.z-a (где x.y.z – это номер версии ядра, например, 2.4.3, а строка а – признак сборки, может быть каким-то числом или словом) и находится в каталоге /boot (для Red Hat-подобных дистрибутивов) или в корне файловой системы (для дистрибутива Slackware). Во время загрузки ядру можно передать различные параметры, позволяющие более тонко настроить систему (об этом немного позже). Сразу после загрузки ядро производит инициализацию устройств, установленных в компьютере. Затем пробует загрузить и монтировать корневую (root) файловую систему. Ядру необходимо тем или иным образом сообщить, где искать корневую файловую систему. Если ядро Linux не может ее найти, оно выдает соответствующее сообщение и останавливается.
   Во многих дистрибутивах и практически всегда при загрузке с дискеты в оперативной памяти создается псевдодиск (RAM-disk, виртуальный диск), который и выступает в роли корневой файловой системы. Для этого есть две причины. Во-первых, оперативная память на несколько порядков быстрее, чем дискета, и во-вторых – на виртуальный диск ядро может загрузить с дискеты и распаковать сжатую файловую систему, что позволяет поместить на дискете намного больше файлов.
   После того как ядро Linux успешно смонтирует корневую файловую систему, оно запускает процесс init. Процесс init – это программа, которая, собственно, и осуществляет переход от начального состояния системы в стандартный многопользовательский режим (или тот, который установлен администратором по умолчанию). Помимо этого, процесс init выполняет множество различных операций, необходимых для корректной работы системы: проверку и монтирование файловых систем, запуск различных сервисов, запуск системы входа пользователя и т. п. А теперь подробнее разберемся с каждым шагом загрузки системы.

Программы-загрузчики

   Используются для загрузки ядра операционной системы Linux, передачи параметров ядру и организации загрузки нескольких операционных систем, установленных на компьютере.

LILO – LInux LOader

   Программа-загрузчик, на сегодняшний день является стандартом de-facto практически для любого дистрибутива Linux. LILO (LInux LOader – загрузчик Linux) без проблем может загружать DOS, OS/2, Linux, FreeBSD, Windows и множество других операционных систем.
   Стандартно сконфигурированная программа LILO после запуска приостановит свое выполнение и выведет на экран графическое изображение с меню, пунктами которого являются варианты загрузки. Несколько секунд LILO ожидает ввода пользователем варианта загрузки (или специальных команд) и, в случае их отсутствия, запускает вариант загрузки, выбранный при конфигурировании по умолчанию. Обычные варианты загрузки в LILO носят название linux и dos (если в системе установлены одновременно операционная система Windows 9х и Linux).
   Конфигурационный файл LILO – /etc/lilo.conf, формат его можно найти в соответствующей справочной документации.

GRUB

   GRand Unified Bootloader (Главный унифицированный загрузчик) – универсальный загрузчик, разработан в Фонде свободного программного обеспечения. Имеет больше возможностей по сравнению с LILO, а также избавлен от некоторых ограничений. В последнее время стал очень популярен, и по распространенности скоро догонит LILO.

LoadLin

   Еще одна программа запуска Linux, которая, правда, не используется при старте компьютера, а позволяет загрузить ядро Linux из командной строки DOS (с параметрами загрузки). Применение LoadLin оправдано в том случае, если мы не хотим устанавливать загрузчик типа LILO в MBR (Master Boot Record) винчестера. Этот загрузчик также необходим, если у нас имеется оборудование, использующее драйвер DOS для установки в определенное состояние.
   Есть еще несколько других программ, которые можно использовать для загрузки Linux, однако они не получили широкого распространения.

Параметры ядра

Обзор параметров строки загрузки

   Программы-загрузчики, описание которых приведено выше, способны также, помимо загрузки самого ядра, передавать ему необходимые параметры загрузки.
   В параметрах загрузки недопустимо использовать пробелы, кроме как между отдельными аргументами. Список значений для одного аргумента должен разделяться запятыми между значениями. К примеру:
 
   ether=9,0x300,0xd0000,0xd4000,eth0 root=/dev/hda1
 
   Посмотреть параметры командной строки, заданные при загрузке, можно набрав /proc/cmdline.

Утилита rdev

   Есть несколько параметров загрузки ядра Linux, хранящих свои значения по умолчанию в его образе. Эти параметры задаются при компиляции ядра, и для того, чтобы не перекомпилировать каждый раз ядро, используется утилита rdev.
   Утилита rdev может изменять следующие параметры:
   • rdev – устройство, с которого производится загрузка;
   • swapdev – устройство, содержащее раздел подкачки (swap);
   • ramsize – параметры RAM-диска;
   • vidmode – видеорежим по умолчанию;
   • rootflags – установка режима монтирования корневого устройства ("только для чтения" или "чтение/запись").
   Более подробную информацию по rdev можно найти в соответствующей справочной документации.

Разбор параметров ядром Linux

   Большая часть параметров загрузки имеет вид:
 
   Имя[=значение_1][,значение_2]…[,значение_11]
 
   где имя – уникальное ключевое слово, идентифицирующее часть ядра, которому передаются связанные значения, но не более одиннадцати параметров. Большая часть разбора параметров загрузки происходит в linux/init/main.c. Сначала ядро проверяет, не являются ли параметры одним из специальных параметров root=, ro, rw или debug. Затем ядро просматривает список функций установки (находящийся в массиве bootsetups) в поиске совпадения заданной строки параметра с функцией установки конкретного устройства или части ядра. Если мы передаем ядру строку foo=3,4,5,6, bar, то ядро будет искать, присутствует ли foo в массиве bootsetups. Если присутствует, то ядро вызовет функцию установки, связанную с foo (foo setup ()) и передаст ей целочисленные значения 3, 4, 5 и 6, указанные в командной строке ядра, и также строковый параметр bar.
   Если строка не подходит ни для одной функции установки, то этот случай считается установкой переменной окружения. Примером может служить указание переменных окружения term=vtioo или boot_image=vmiinuz.bak в качестве параметров загрузки. Как правило, переменные окружения проверяются скриптами инициализации для разрешения или запрещения большого диапазона параметров.
   Любые оставшиеся параметры, не выбранные ядром и не интерпретированные в качестве переменных окружения, будут переданы в дальнейшую обработку, которую обычно выполняет программа init. Чаще всего процессу init в качестве параметра передается слово single, которое сообщает init о необходимости загрузить компьютер в однопользовательском режиме. Список параметров программы init можно найти в соответствующей справочной документации.

Общие неаппаратные параметры загрузки

   В этом разделе рассматриваются параметры загрузки, не связанные с каким-либо оборудованием или периферией, а с параметрами ядра, такими как управление памятью, RAM-диском, корневой системой и т. п.

Опции корневой файловой системы

Параметр root
   Этот параметр сообщает ядру, какое устройство будет использовано в качестве корневой файловой системы во время загрузки. По умолчанию эта установка имеет значение корневого устройства системы, на котором было скомпилировано ядро. Например, на одном компьютере корневая файловая система находится на /dev/hda2, а на другом – на /dev/hda6. Если скомпилировать ядро на втором компьютере, перенести его на первый и не указать в параметре root=/dev/hda2, то ядро будет думать, что оно загружается с /dev/hda6. А такого устройства на этом компьютере нет! Допустимыми корневыми устройствами могут быть следующие:
   • /dev/hdaN, /dev/hdbN, /dev/hdcN, /dev/hddN, которые являются разделами N на IDE-диске;
   • /dev/sdaN, /dev/sdbN, /dev/sdcN, /dev/sddN, /dev/sdeN, которые являются разделами N на SCSI-диске;
   • /dev/fd0, /dev/fdl – привод флоппи-диска с номером N;
   • /dev/nfs, не являющееся флагом, заставляющим ядро получить корневую файловую систему по сети.
   Это один из немногих параметров загрузки ядра, которые хранятся в его образе и могут быть изменены утилитой rdev.
Параметры ro и rw
   Параметр го сообщает ядру о необходимости монтирования корневой файловой системы в режиме «только для чтения». Парный ему параметр rw указывает ядру монтировать корневую файловую систему в режиме «чтение/ запись». Сразу после загрузки ядра и запуска процесса init система должна осуществить проверку подмонтированных файловых систем на отсутствие ошибок. Однако, если корневая файловая система смонтирована в режиме «чтение/запись» надежно проверить целостность файловой системы невозможно. Существует два способа решения проблемы: