Chapter 4
|
$ which bash |
/bin/bash |
Таким образом, bash находится в /bin каталоге. Это очень ограниченная команда для поиска, так как она ищет только в вашем PATH.
whereis
Команда whereis(1) работает аналогично программе which, но в дополнение к последней, так же ищет man страницы и исходники программ. Результат выполнения whereis для bash будет следующий:
$ whereis bash |
bash: /bin/bash /usr/bin/bash /usr/man/man1/bash.1.gz |
Эта команда не только говорит, где находится программа, но так же указывает, где находится её онлайн документация. Но она всё ещё весьма ограничена. Что если вам необходимо найти определённый конфигурационный файл? which или whereis тут вам не помогут.
find
Команда find(1) может быть использована для поиска всего, чего угодно. Я хочу задать поиск файла xinitrc во всей системе.
$ find / -name xinitrc |
/var/X11R6/lib/xinit/xinitrc |
find потребует много времени для поиска, так как эта команда пролистает всё дерево каталогов для поиска. И если вы выполните команду, как обычный пользователь, то на экран, вероятно, неоднократно будут выведены сообщения об ошибке доступа к некоторым из каталогов (к тем, которые может просматривать только root). Но find нашла наш файл. Уже хорошо. Если бы только она работала чуточку быстрее...
locate
Команда locate(1) производит поиск по всей файловой системе, в точности как и find, но она просматривает свою базу данных вместо того, чтобы пролистать все каталоги. База данных настроена так, что она автоматически обновляется в 4:40 утра. Вы так же можете вручную выполнить updatedb(1), для обновления этой базы данных (перед запуском её вручную вам следует выполнить su nobody). Вот пример использования locate:
$ locate 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 системе.
Файлы, выполняемые системой при её инициализации, хранятся в каталоге /etc/rc.d. Slackware использует расположение сценариев инициализации в стиле BSD. Каждое задание или runlevel (уровень загрузки) имеет свой rc файл. Таким образом, получается организованная структура, которой легко пользоваться.
Есть несколько категорий сценариев инициализации. Начальная загрузка системы, уровни загрузки, инициализация сети и System V совместимые. По традиции, мы отнесём всё остальное к категории ''других''.
Первая программа, запускаемая в Slackware после ядра Linux -это init(8). Эта программа читает /etc/inittab(5) файл, чтобы узнать, как загружать систему. Запускает /etc/rc.d/rc.S сценарий для подготовки перед переключением на выбранный runlevel. rc.S файл активизирует виртуальную память, подключает файловые системы, очищает определённые log каталоги инициализирует Plug and Play устройства, загружает модули ядра, настраивает PCMCIA устройства, активизирует последовательные порты и запускает System V загрузочные сценарии (если таковые присутствуют). rc.S выполняет много задач самостоятельно, но так же до завершения своей работы, он вызовет ниже перечисленные сценарии из каталога /etc/rc.d:
Уровни загрузки 2, 3 и 4 запустят сетевые сервисы. Следующие файлы ответственны за инициализацию сети:
Совместимость с System V была предоставлена в Slackware 7.0. Много других Linux дистрибутивов используют этот форматом вместо BSD формата. В этом стиле каждому уровню загрузки предоставляется каталог для сценариев, а в BSD-стиле каждому уровню загрузки соответствует только один сценарий.
rc.sysinit сценарий произведёт поиск всех System V init сценариев в /etc/rc.d каталоге и выполнит их, если уровень загрузки соответствующий. Это полезно, если вы пользуетесь коммерческим программным обеспечением, которое устанавливает System V init сценарии, в то же время, вы можете пользоваться и BSD сценариями.
Для активизирования сценария всё, что вам нужно сделать, это добавить ему разрешение на выполнение при помощи chmod программы. Чтобы выключить сценарий, удалите разрешение на выполнение соответствующего файла. Для получения дополнительной справки по chmod, смотрите раздел 5.2.2.
Slackware предоставляет около 60-ти прекомпилированных ядер. Так что перед вами открывается широкий выбор. Каждое из ядер включает в себя набор стандартных драйверов, плюс дополнительные специфические драйвера. Вы можете использовать одно из прекомпилированных ядер, или вы можете самоcтоятельно откомпилировать ядро для вашей системы. В любом случае, вам следует убедиться в том, что используемое вами ядро содержит поддержку аппаратных устройств, присутствующих в системе.
Прекомпилированные Slackware ядра доступны в каталоге /kernels на Slackware CD-ROM, а так же на FTP сайте в основном каталоге Slackware. С появлением новых версий дистрибутива, обновляются и ядра, так что документация в каталоге с ядрами - всегда наиболее полный источник информации по ним. Каталог /kernels содержит под-каталог для каждого из ядер. Имена под-каталогов совпадают с именами ядер. В каждом под-каталоге вы найдёте следующие фалы:
Файл | Назначение |
System.map | Системный map файл для этого ядра |
bzImage (или zImage) | Образ ядра |
config | Конфигурационный файл исходника |
для этого ядра |
Чтобы установить ядро, скопируйте System.map и config в каталог /boot вашей системы, а образ ядра скопируйте в файл /vmlinuz. Запустите /sbin/lilo(8), чтобы установить LILO для нового ядра, а затем пере загрузите систему. Это всё что вам необходимо проделать для установки одного из прекомпилированных ядер в вашу систему.
Ядра, заканчивающиеся на ''.i'' - это IDE ядра. Т.е. они не содержат SCSI поддержки в самом ядре. Ядра, заканчивающиеся с ''.s'' - это SCSI ядра. Они содержат поддержку IDE устройств точно так же, как и ''.i'' ядра, плюс поддержку SCSI.
Новые пользователи часто спрашивают: ''Следует ли мне компилировать ядро для моей системы?''. Ответ, определённо: может быть. Большинству пользователей подойдёт одно из прекомпилированных ядер, с подгружаемыми модулями для устройств, не поддерживаемых самим ядром. Вы захотите откомпилировать ядро в случае, если вы обновляете его версию на более новое, которое мы ещё не предоставили в Slackware, или если вы наложили патч на исходник вашего ядра.
Сборка своего собственного ядра не такой уж сложный процесс. Первым делом необходимо убедиться, что в вашей системе установлен исходный текст ядра. Убедитесь, что вы установили пакеты из раздела K во время установки. Вам так же понадобятся пакеты из раздела D, в частности компилятор C, GNU make и GNU binutils. В общем неплохо бы, чтобы весь раздел D был установлен, если вы собираетесь заниматься разработкой чего либо. Теперь мы готовы к сборке ядра:
$ su - |
Password: |
# cd /usr/src/linux |
Первым делом вернём исходный текст ядра к его первоначальному состоянию. Для этого выполним следующее:
# make mrproper |
Теперь вы можете настроить ядро под вашу систему. Современное ядро предлагает на ваш выбор три способа выполнения этой задачи. Первый метод - это оригинальная текстовая система вопрос-ответ. Вам будет заданно много вопросов, а после этого будет создан конфигурационный файл. Проблема с этим способом в том, что если вы ошиблись, то вы должны начать всё сначала. Метод, предпочитаемый большинством пользователей - метод, основанный на системе меню. Ну и наконец. последний - X-ориентированный инструмент настройки ядра. Выберите, какой вам больше нравится, и наберите соответствующую команду:
# make config (текстовая вопрос-ответ версия) |
#make menuconfig (menu, текстовая версия) |
#make xconfig (X-ориентированная версия, вначале убедитесь, |
что вы в X) |
Figure |
Для новых пользователей, вероятно, menuconfig покажется наиболее простой в использовании. Вы можете найти экраны с помощью, которые объяснят предназначение каждой части ядра. После настройки ядра, выйдите из программы настройки. Она создаст необходимые конфигурационные файлы. Теперь мы можем подготовить дерево исходников ядра к сборке:
# make dep |
# make clean |
Следующий шаг - компиляция ядра. Вначале попробуйте задать команду zImage. Это не пройдёт, если ваше ядро слишком большое. Не волнуйтесь, вы всё ещё можете попробовать bzImage.
# make zImage (Вначале попробуйте так) |
# make bzImage (Если предыдущая команда не |
сработала, попробуйте эту) |
В зависимости от скорости процессора, этот процесс может быть достаточно долгим. Во время процесса сборки вы увидите на экране команды компилятора. После сборки образа ядра вы захотите собрать все те части ядра которые вы указали загружаемыми, как модули.
# make modules |
Теперь мы можем установить свеже-скомпилированное ядро и модули. Чтобы установить ядро в Slackware системе, необходимо воспользоваться следующими командами:
# mv /vmlinuz /vmlinuz.old |
# cat arch/i386/boot/zImage > /vmlinuz |
# mv /boot/System.map /boot/System.map.old |
# cp System.map /boot/System.map |
Замените zImage на bzImage, если вам пришлось собрать большее ядро. Вероятно, вы захотите отредактировать /etc/lilo.conf файл и добавить соответствующий раздел для вашего старого ядра, на тот случай, если новое ядро не работает. После этого выполните /sbin/lilo, чтобы установить новый загрузочный блок. Теперь вы можете пере-загрузиться с новым ядром.
Модули ядра, это другое название драйверов устройств, которые могут быть вставлены в запущенное ядро. Они позволяют вам расширить список аппаратных устройств, поддерживаемых ядром, без установки другого ядра, или пере-компиляции заново.
Модули могут быть загружены или выгружены в любое время, даже во время работы системы. Это позволяет системным администраторам очень легко обновлять драйвера специфических устройств. Новый модуль может быть откомпилирован, старый выгружен, а новый загружен, и всё это без пере-загрузки компьютера.
Модули хранятся в каталоге /lib/modules/<kernel version> вашей системы. Они могут быть загружены во время загрузки компьютера из rc.modules файла. В этом файле есть очень много комментариев и примеров для типичных устройств. Для просмотра загруженных модулей воспользуйтесь командой lsmod(1):
# lsmod | ||
Module | Size | Used by |
parport_pc | 7220 | 0 |
parport | 7844 | 0 [parport_pc] |
Как видно из примера, у меня загружен только модуль параллельного порта. Для выгрузки модуля используйте команду rmmod(1). Модули могут быть загружены командами modprobe(1) или insmod(1). modprobe обычно безопаснее, так как автоматически загрузит модули, необходимые для модуля, который вы пытаетесь загрузить.
Большинство пользователей никогда не загружают или выгружают модули вручную. Они пользуются загрузчиком ядра для менеджмента модулей. Всё что вам надо сделать, это раз-комментировать строчку /sbin/kerneld(8) в /etc/rc.d/rc.modules и автозагрузчик запустится. Он позаботится о загрузке и выгрузке модулей по мере надобности. Автозагрузчик определяет, что нужно загрузить модуль по обращению к устройству, для которого в данный момент модуль не загружен.
Вы можете найти больше информации в man страницах для каждой из команд, а так же в rc.modules файле.
Должно быть, вы теперь знакомы с командами для поиска в файловой системе, с устройством файловой системы, а так же с файлами настроек в каталоге /etc. Эти знания будут вам крайне полезны при более подробном изучении системы. В добавок к этому, вы должны были узнать, как настроить и компилировать ядро из исходников.
Предыдущий | Содержание | Следующий |