Глава 4. Настройка системы

Содержание
4.1. Обзор системы
4.2. Выбор ядра

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

4.1. Обзор системы

Важно понять, как система Linux собирается воедино, перед тем как погружаться в различные аспекты её настройки. Linux значительно отличается от систем DOS, Windows или Macintosh (за исключением Mac OS на базе Unix), но эти разделы помогут вам разобраться в этой ситуации, чтобы вы легко смогли настроить свою систему до получения нужного результата.

4.1.1. Структура файловой системы

Первой существенной разницей между Slackware Linux и системами DOS или Windows является файловая система. Специально для новичков: мы не используем буквы дисков для идентификации различных разделов. В Linux существует один главный каталог. Вы можете сравнить его с диском C: в DOS. Все разделы в вашей системе монтируются в подкаталоги главного каталога. Это можно считать неким подобием постоянно расширяющегося жёсткого диска.

Мы называем главный каталог корневым и обозначается он одной косой чертой (/). Такой подход может показаться странным, однако он значительно упрощает жизнь, когда вам нужно увеличить дисковое пространство. Допустим, например, что у вас не хватает места на диске, на котором находится каталог /home. Большинство людей устанавливают Slackware и делают один большой корневой раздел. Поскольку раздел может быть примонтирован в любой каталог, вы можете просто пойти в магазин, приобрести новый жёсткий диск и примонтировать его в /home. Теперь в вашей системе появилось новое дисковое пространство. И всё это без особых затруднений.

Ниже представлены описания главных каталогов верхнего уровня, имеющихся в Slackware.

bin

В нём находятся важнейшие пользовательские программы. Они представляют собой минимальный набор программ, необходимый пользователю для работы в системе. Это программы наподобие командных процессоров и команд для работы с файловой системой (ls, cp и т.п.). Каталог /bin обычно не подвергается изменениям после установки системы. Если это происходит, то, как правило, в виде предоставляемых нами обновлений пакетов.

boot

Файлы, используемые загрузчиком Linux (LILO). В этом каталоге также происходят небольшие изменения после установки системы. В нём находится ядро, начиная со Slackware версии 8.1. В предыдущих релизах ядро хранилось просто в / , однако распространённой практикой является помещение ядра и связанных файлов именно в этот каталог для упрощения двойной загрузки.

dev

В Linux всё является файлом, даже аппаратное обеспечение, наподобие последовательных портов, жёстких дисков и сканеров. Для получения доступа к этому оборудованию должен присутствовать файл, называемый узлом устройства. Все узлы устройств находятся в каталоге /dev. Вы найдёте это справедливым для многих Unix-подобных операционных систем.

etc

В этом каталоге находятся конфигурационные файлы системы: от конфигурационных файлов X Window, базы данных пользователей, до загрузочных скриптов системы. Со временем системный администратор очень хорошо познакомится с этим каталогом.

home

Linux является многопользовательской операционной системой. Каждый пользователь в системе имеет уникальную учётную запись и отдельный каталог для личных файлов. Этот каталог также называется домашним каталогом пользователя. Каталог /home предназначен как раз для размещения в нём домашних каталогов пользователей.

lib

Здесь находятся системные библиотеки, необходимые для базовых операций и работы системы. Среди всего прочего в нём находятся библиотека C, динамический компоновщик, библиотека ncurses и модули ядра.

mnt

В этом каталоге находятся временные точки монтирования для работы с жёскими дисками и съёмными накопителями. В нём вы найдёте точки монтирования своих приводов CD-ROM и дисководов.

opt

Пакеты с опциональным программным обеспечением. Идея, лежащая в основе /opt, заключается в том, чтобы каждый программный пакет устанавливался в /opt/software-package, что упрощает его удаление в будущем. Slackware помещает в /opt некоторые программы (как, например, KDE в /opt/kde), однако вы свободно можете помещать в него всё, что угодно.

proc

Это уникальный каталог. Он является не реальной, а виртуальной частью файловой системы, которая предоставляет доступ к информации о ядре. Различные куски информации, о которых (по мнению ядра) вы хотите знать, представлены в виде файлов в каталоге /proc. С помощью некоторых из этих файлов вы можете также отправлять информацию в ядро. Попробуйте выполнить cat /proc/cpuinfo.

root

Системный администратор известен в системе как root. Домашним каталогом root'а является /root, а не /home/root. Причина довольно проста. Что будет, если /home находится на отдельном разделе (не на /) и не может быть примонтирован? root'у скорее всего потребуется войти в систему и восстановить её работоспособность. Если его домашний каталог находится на повреждённой файловой системе, у него возникнут трудности со входом в систему.

sbin

Здесь находятся важнейшие программы, запускаемые root'ом и во время процесса загрузки системы. Обычные пользователи не запускают программы из этого каталога.

tmp

Место для хранения временных данных. Все пользователи имеют право на чтение и запись в этот каталог.

usr

Это большой каталог в системе Linux. Практически всё остальное находится именно в нём: программы, документация, исходный код ядра и система X Window. Это каталог, в который вы скорее всего будете устанавливать программы.

var

Здесь находятся файлы журналов системы, кэшируемые данные и блокировочные файлы программ. Этот каталог предназначен для часто изменяющихся данных.

Теперь вы хорошо осведомлены о каталогах файловой системы и о том, что они содержат. Более подробная информация о структуре файловой системы доступна на странице руководства hier(7). Следующий раздел поможет вам легко находить нужные файлы без необходимости делать это вручную.

4.1.2. Поиск файлов

Теперь вы знаете, что находится в главных каталогах системы, но это всё-таки не слишком-то и поможет вам найти среди них то, что вам нужно. Имеется в виду, что вы можете вручную рыться в каталогах, однако для этого есть более быстрые методы. Для поиска файлов в Slackware есть четыре основные команды.

4.1.2.1. which

Первая команда - это which(1). which обычно используется для быстрого поиска программ. Она просто выполняет поиск по переменной окружения PATH и возвращает первый найденный результат, а также путь к нему. Взгляните на этот пример:

%  which bash
/bin/bash

В нём видно, что bash находится в каталоге /bin. Это очень ограниченная команда, т.к. она выполняет поиск только в вашей переменной PATH.

4.1.2.2. whereis

Команда whereis(1) работает примерно как и which, однако она также ищет страницы руководства и файлы с исходными текстами. Поиск bash с помощью whereis должен дать следущее:

%  whereis bash
bash: /bin/bash /usr/bin/bash /usr/man/man1/bash.1.gz

Эта команда сообщила нам не только, где находится программа, а также и местонахождение документации к ней. Однако эта команда всё ещё ограниченна. Что, если вам нужно найти определённый конфигурационный файл? Для этого вы не можете использовать ни which, ни whereis.

4.1.2.3. find

Команда find(1) позволяет пользователю выполнять поиск по файловой системе с помощью большого набора поисковых аргументов. Пользователи могут искать файлы по именам с использованием шаблонов подстановки, диапазонов времени их изменения или создания и других расширенных свойств. Например, чтобы найти в системе файл xinitrc, можно воспользоваться следующей командой.

%  find / -name xinitrc
/var/X11R6/lib/xinit/xinitrc

Выполнение find займёт некоторое время, поскольку она должна выполнить сквозной поиск по всему дереву файлов, начиная с корня. Также, если эта команда будет выполнена обычным пользователем, на экран будут выводиться сообщения об ошибке при попытке зайти в каталоги, доступ к которым есть только у root'а. Однако find нашла наш файл, так что всё в порядке. Вот только если бы она была чуточку быстрее...

4.1.2.4. slocate

Команда slocate(1) выполняет поиск по всей файловой системе примерно как и find, однако поиск ведётся по базе данных, а не по самой файловой системе. Обновление базы данных выполняется автоматически каждое утро, чтобы у вас был более свежий список файлов своей системы. Вы можете вручную запустить updatedb(1) для обновления базы данных slocate (перед этим вы должны сначала получить права root'а с помощью su). Вот пример работы slocate:

%  slocate xinitrc   # нам не нужно получать права root'а
/var/X11R6/lib/xinit/xinitrc
/var/X11R6/lib/xinit/xinitrc.fvwm2
/var/X11R6/lib/xinit/xinitrc.openwin
/var/X11R6/lib/xinit/xinitrc.twm

Мы получили даже больше, чем искали, и довольно быстро. С помощью этих команд вы сможете найти в своей системе Linux всё, что угодно.

4.1.3. Каталог /etc/rc.d

В каталоге /etc/rc.d находятся файлы инициализации системы. В Slackware для файлов инициализации используется схема в стиле BSD, а не System V, которая стремится усложнить изменение конфигурации без использования программ, специально разработанных для этих целей. В init-скриптах BSD каждый уровень запуска определён в одном единственном rc-файле. В System V для каждого уровня запуска выделен отдельный каталог, содержащий большое число скриптов инициализации. Таким образом создаётся организованная и простая в обслуживании структура.

Существует несколько разных категорий файлов инициализации: запуск системы, уровни запуска, инициализация сети и совместимость с System V. По традиции всё остальное мы свалим в другую категорию.

4.1.3.1. Запуск системы

Первая программа, запускающаяся в Slackware помимо ядра Linux - это init(8). Эта программа читает файл /etc/inittab(5), чтобы узнать, как запускать систему. Она запускает скрипт /etc/rc.d/rc.S, чтобы подготовить систему перед тем, как перейти на нужный вам уровень запуска. Файл rc.S активирует виртуальную память, монтирует файловые системы, очищает определённые каталоги с журналами, инициализирует устройства Plug-and-Play, загружает модули ядра, настраивает устройства PCMCIA, поднимает последовательные порты и запускает init-скрипты System V (если таковые найдены). Очевидно, что rc.S содержит много информации, однако в /etc/rc.d есть несколько скриптов, которые rc.S вызовет для завершения своей работы:

rc.S

Это скрипт инициализации самой системы.

rc.modules

Загружает модули ядра. С его помощью поднимаются сетевые карты, поддержка PPP и другие службы. Если этот скрипт находит rc.netdevice, он также запустит и его.

rc.pcmcia

Сканирует и настраивает любые устройства PCMCIA, которые могут присутствовать в вашей системе. Это наиболее полезно для пользователей ноутбуков, у которых наверняка имеется модем или сетевая карта PCMCIA.

rc.serial

Настраивает последовательные порты, запуская соответствующие команды setserial.

rc.sysvinit

Ищет скрипты инициализации System V для нужного уровня запуска и запускает их. Более подробно это описано ниже.

4.1.3.2. Скрипты инициализации уровня запуска

После того, как завершена инициализация системы, init приступает к инициализации уровня запуска. Уровень запуска описывает состояние, в котором будет работать ваша машина. Звучит слишком сложно? Другими словами, уровень запуска сообщает init'у, будете ли вы допускать одновременную работу в системе нескольких пользователей или только одного, будут ли запущены сетевые службы и что вы будете использовать для входа в систему: систему X Window System или agetty(8). Представленные ниже файлы определяют различные уровни запуска в Slackware Linux.

rc.0

Останавливает систему (уровень запуска 0). По умолчанию он является символической ссылкой на rc.6.

rc.4

Многопользовательская работа (уровень запуска 4), но в X11 с KDM, GDM или XDM в качестве менеджера входа в систему.

rc.6

Перезагрузка системы (уровень запуска 6).

rc.K

Работа в однопользовательском режиме (уровень запуска 1).

rc.M

Многопользовательский режим (уровни запуска 2 и 3), но со стандартным текстовым входом в систему. Это в Slackware уровень загрузки по умолчанию .

4.1.3.3. Инициализация сети

Уровни запуска 2, 3 и 4 запустят сетевые службы. Следующие файлы отвечают за инициализацию сети:

rc.inet1

Этот файл, созданный netconfig'ом, отвечает за настройку сетевых интерфейсов.

rc.inet2

Запускается после rc.inet1 и запускает основные сетевые службы.

rc.atalk

Запускает службы AppleTalk.

rc.httpd

Запускает веб-сервер Apache. Как и некоторые другие rc-скрипты он может быть использован только для остановки и перезапуска службы. Скрипт rc.httpd принимает аргументы stop, start или restart.

rc.news

Запускает сервер новостей.

4.1.3.4. Совместимость с System V

Совместимость с инициализацией System V была реализована в Slackware, начиная с версии 7.0. Многие другие дистрибутивы Linux используют этот метод вместо BSD-стиля. В общих чертах каждому уровню запуска соответствует отдельный подкаталог со скриптами инициализации, в то время как BSD-стиль предоставляет один скрипт для каждого уровня запуска.

Скрипт rc.sysvinit будет искать любые init-скрипты System V, находящиеся в /etc/rc.d, и запустит их, если выбран соответствующий уровень запуска. Это полезно для определённых пакетов с коммерческим программным обеспечением, которые устанавливают скрипты System V.

4.1.3.5. Другие файлы

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

rc.gpm

Запускает службы общего назначения для работы с мышью, позволяющие вам копировать и вставлять текст в консоли Linux. Изредка gpm может вызвать проблемы с мышью при работе в X Windows. Если у вас возникают проблемы с мышью в X'ах, попробуйте убрать разрешение на выполнение с этого файла и остановить сервер gpm.

rc.font

Загружает определённый экранный шрифт для консоли.

rc.local

Содержит определённые команды запуска для вашей системы. После чистой установки этот файл пуст, т.к. он зарезервирован для локальных администраторов. Этот скрипт запускается после всех инициализаций.

Чтобы задействовать этот скрипт, вам нужно дать ему разрешение на выполнение с помощью команды chmod. Чтобы отключить скрипт, снимите с него это разрешение. Дополнительная информация о chmod доступна в Разд. 9.2.