Администрирование Linux для начинающих (LPIC-1), тема 106

Этот раздел содержит материал для темы 1.106.2 экзамена 102 Администрирование Linux для начинающих (LPIC-1). Тема имеет рейтинг 3.

В этом разделе вы научитесь:

  • Управлять уровнем выполнения системы
  • Переходить в однопользовательский режим
  • Устанавливать уровень выполнения по умолчанию
  • Выключать или перезагружать систему
  • Предупреждать пользователей перед переключением уровня выполнения
  • Правильно завершать процессы

Уровни выполнения

Уровни выполнения определяют, какие задачи могут быть выполнены в текущем состоянии (или на текущем уровне выполнения) системы Linux. Каждая система Linux поддерживает три базовых уровня выполнения и один или более уровней для обычной работы. Базовые уровни выполнения показаны в Таблице 3.

Таблица 3. Базовые уровни выполнения Linux
Уровень Назначение
0 Выключение (или остановка) системы
1 Однопользовательский режим; обычно имеет псевдоним s или S  
6 Перезагрузка системы

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

Таблица 4. Другие распространенные уровни выполнения Linux
Уровень Назначение
2 Многопользовательский режим без поддержки сети
3 Многопользовательский режим с поддержкой сети
5 Многопользовательский режим с поддержкой сети и системы X Window

Дистрибутив Slackware использует уровень выполнения 4 вместо 5 для полного запуска системы X Window. Debian использует один уровень выполнения для любого многопользовательского режима, обычно это уровень 2. Обращайтесь к документации для вашего дистрибутива.

Уровень выполнения по умолчанию

При запуске Linux уровень выполнения по умолчанию определяется из строки id: файла /etc/inittab. Листинг 15 показывает типичную строку для такой системы, как Red Hat Enterprise Linux, использующей уровень выполнения 5 для системы X Window.

Листинг 15. Уровень выполнения по умолчанию из ./etc/inittab

                    
[root@lyrebird root]# grep "^id:" /etc/inittab
id:5:initdefault:

Изменение уровня выполнения

Есть несколько способов изменить уровень выполнения. Чтобы сделать постоянное изменение, можно отредактировать /etc/inittab и изменить уровень выполнения по умолчанию, как вы только что видели.

Если вам нужно только перевести систему на другой уровень выполнения, у вас есть пара способов сделать это. Например, представьте, что вы только что установили новое ядро, и вам нужно добавить некоторые модули после того, как система загрузилась с новым ядром, но до загрузки системы X Window. Вы, возможно, захотите перевести систему на уровень выполнения 3, чтобы выполнить это. Вы делаете это во время загрузки, редактируя строку ядра (GRUB) или добавляя параметр после имени выбранной системы (LILO). Используйте одну цифру для указания желаемого уровня выполнения (в данном случае 3). Например, вы можете изменить строку из Листинга 5, который вы видели в предыдущем разделе, как показано в Листинге 16.

Листинг 16. Установка уровня выполнения по умолчанию во время загрузки

                           
kernel /boot/vmlinuz-2.4.21-40.EL ro root=LABEL=RHEL3 hdd=ide-scsi 3

Как только вы закончили вашу работу на уровне выполнения 3, вы, возможно, захотели переключиться на уровень выполнения 5. К счастью, вам не надо перезагружать систему. Вы можете использовать команду telinit, чтобы сообщить процессу init, на какой уровень выполнения он должен переключиться.

Вы можете определить текущий уровень выполнения, используя команду runlevel, которая помимо текущего показывает и предыдущий уровень выполнения. Если первый выведенный символ - 'N', то уровень выполнения не менялся с того момента, как система была загружена. Листинг 17 иллюстрирует проверку и изменение уровня выполнения.

Листинг 17. Проверка и изменение уровня выполнения

                    
[root@lyrebird root]# runlevel
N 3
[root@lyrebird root]# telinit 5
[root@lyrebird root]# runlevel
3 5

Если вы используете команду ls, чтобы отобразить длинный листинг команды telinit, вы увидите, что в действительности она является символьной ссылкой на команду init. Команда init знает, каким образом она была вызвана, и ведет себя соответственно. Поскольку init обычно имеет PID 1, она также достаточно инеллектуальна, чтобы знать, если вы запустили ее с помощью init а не telinit. В этом случае она предполагает, что вы хотите, чтобы она вела себя так, как будто вы вызвали telinit вместо нее. Например, вы можете использовать int 5 вместо telinit 5, чтобы переключиться на уровень выполнения 5.

Однопользовательский режим

В отличие от таких операционных систем для персональных компьютеров, как DOS или Windows, Linux по свей сути является многопользовательской системой. Однако, бывают ситуации, когда это становится проблемой, например, когда вам нужно восстановить основную файловую систему или базу данных, или установить и протестировать какое-нибудь новое оборудование. Уровень выполнения 1, или однопользовательский режим , - это ваше решение для таких ситуаций. Фактическая реализация зависит от дистрибутива, но обычно вы попадаете в оболочку с минимальными возможностями. Обычно отсутствует поддержка сети, нет (или очень мало) запущенных демонов. На некоторых системах вы должны пройти аутентификацию, но на других вы заходите прямо в оболочку как суперпользователь. Однопользовательский режим может быть вашим спасителем, но вы можете также разрушить систему, поэтому будьте осторожны всякий раз, когда заходите в систему с правами суперпользователя.

Также как и с переключением на обычные многопользовательские уровни выполнения, вы можете переключиться на однопользовательский режим, используя telinit 1. Как видно из Таблицы 3, 's' и 'S' - это псевдонимы для уровня выполнения 1, так что вместо этого вы можете, например, использовать telinit s.

Команды остановки

Помимо использования telinit или init для остановки работы пользователей и перехода в однопользовательский режим, вы также можете вызвать команду shutdown. Команда shutdown отсылает сообщения с предупреждением всем зарегистрированным пользователям и блокирует дальнейшие входы в систему. Затем она посылает сигнал init о переключении уровней выполнения. После этого процесс init посылает всем запущенным процессам сигнал SIGTERM, давая им шанс сохранить данные или корректно завершить работу. После 5 секунд или другой задержки, если она указана, init посылает сигнал SIGKILL, чтобы насильно завершить все оставшиеся процессы.

По умолчанию shutdown переключается на уровень выполнения 1 (однопользовательский режим). Вы можете указать ключ -h, чтобы остановить систему, или ключ -r, чтобы перезагрузиться. Стандартное сообщение выводится вместе с любым указанным вами сообщением. Время можно задать как абсолютное время в формате hh:mm или как относительное время n , где n - количество минут до выключения. Для немедленной остановки используйте now , что эквивалентно +0 .

Если вы вызвали остановку с задержкой, и время еще не прошло, у вас есть возможность отменить остановку, нажав Ctrl-c, если команда работает в настоящий момент, или вызвав shutdown с ключом -c для отмены отложенной остановки. Листинг 18 содержит несколько примеров использования shutdown, а также отмены этой команды.

Листинг 18. Примеры остановки

                    
[root@lyrebird root]# shutdown 5 File system recovery needed

Broadcast message from root (pts/0) (Mon Apr  3 22:44:29 2006):

File system recovery needed
The system is going DOWN to maintenance mode in 5 minutes!

Shutdown cancelled.
[root@lyrebird root]# shutdown -r 10 Reloading updated kernel&
[1] 5388

Broadcast message from root (pts/0) (Mon Apr  3 22:45:15 2006):

Reloading updated kernel
The system is going DOWN for reboot in 10 minutes!
[root@lyrebird root]# fg
shutdown -r 10 Reloading updated kernel

Shutdown cancelled.
[root@lyrebird root]# shutdown -h 23:59&
[1] 5390
[root@lyrebird root]# shutdown -c

Shutdown cancelled.
[1]+  Done                    shutdown -h 23:59

Вы, возможно, заметили, что наш последний пример не вызвал сообщения с предупреждением. Если время до остановки превышает 15 минут, то сообщение не посылается раньше, чем за 15 минут до этого события, как показано в Листинге 19. Листинг 19 также показывает использование ключа -t для увеличения задержки между сигналами SIGTERM и SIGKILL от 5 секунд до 60.

Листинг 19. Другой пример остановки

                    
[root@lyrebird root]# date;shutdown -t60 17 Time to do backups
Mon Apr  3 22:51:45 EDT 2006

Broadcast message from root (pts/0) (Mon Apr  3 22:53:45 2006):

Time to do backups
The system is going DOWN to maintenance mode in 15 minutes!

Листинг 20. Перезагрузка системы

                    
[root@lyrebird root]# reboot

Broadcast message from root (pts/0) (Mon Apr  3 22:58:27 2006):

The system is going down for reboot NOW!

Убедимся, что система перезагрузилась обратно на уровень выполнения 3, что видно из использования команд runlevel и uptime в Листинге 21.

Листинг 21. Другой пример перезагрузки системы

                    
[ian@lyrebird ian]$ /sbin/runlevel
N 3
[ian@lyrebird ian]$ uptime
 23:05:51  up 6 min,  1 user,  load average: 0.00, 0.06, 0.03

Также возможно использовать telinit (или init) для остановки или перезагрузки системы. Также как и в других случаях использования telinit, пользователям не будет послано никаких сообщенийs, и команда выполнится немедленно, хотя между сигналами SIGTERM и SIGKILL и существует задержка. Про допольнительные ключи telinit, init и shutdown смотрите в соответствующих страницах руководства man.

Остановка, перезагрузка и отключение питания

Вам следует знать еще несколько команд, связанных с остановкой и перезагрузкой.

  • Команда halt останавливает систему.
  • Команда poweroff является символьной ссылкой на команду halt, останавливающей систему и делающей затем попытку отключения питания.
  • Команда reboot - это другая символьная ссылка на команду halt, останавливающая систему и затем перезагружающая ее.

Если какая-то из этих команд вызывается, когда система не находится на уровне выполнения 0 или 6, то вместо нее выполняется соответствующая команда shutdown.

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

Конфигурация уровня выполнения

Теперь вы, возможно, будете удивлены, почему нажатие Ctrl-Alt-Delete на некоторых системах вызывает перезагрузку, и как вообще конфигурируется поведение уровня выполнения. Помните поле

id
 

в /etc/inittab? Что ж, существует еще несколько полей в /etc/inittab, а также набор инициализирующих скриптов в таких каталогах, как rc1.d или rc5.d, где цифра обозначает уровень выполнения, к которому применяются скрипты из этого каталога. Листинг 22 содержит строку для Ctrl-Alt-Delete, таким образом, вы видите, почему это вызывает перезагрузку системы.

Листинг 22. Отлавливание ctrl-alt-delete

                    
[root@lyrebird root]# grep -i ctrl /etc/inittab
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Скрипты, используемые init при запуске системы, изменении уровня выполнения или остановке системы, обычно хранятся в каталогах /etc/init.d или /etc/rc.d.init.d. Наборы символьных ссылок в каталогах rc n .d, по одному каталогу для каждого уровня выполнения n , определяют запускается ли скрипт при входе на уровень выполнения, или останавливается при выходе из него. Эти ссылки начинаются с "K" или "S", за которыми следует число из двух цифр и имя службы, как показано в Листинге 23.

Листинг 23. Скрипты init

                    
[root@lyrebird root]# find /etc -path "*rc[0-9]*.d/???au*"
/etc/rc.d/rc0.d/K95audit
/etc/rc.d/rc0.d/K72autofs
/etc/rc.d/rc1.d/K95audit
/etc/rc.d/rc1.d/K72autofs
/etc/rc.d/rc2.d/S20audit
/etc/rc.d/rc2.d/K72autofs
/etc/rc.d/rc3.d/S20audit
/etc/rc.d/rc3.d/S28autofs
/etc/rc.d/rc4.d/K95audit
/etc/rc.d/rc4.d/S28autofs
/etc/rc.d/rc5.d/S20audit
/etc/rc.d/rc5.d/S28autofs
/etc/rc.d/rc6.d/K95audit
/etc/rc.d/rc6.d/K72autofs
[root@lyrebird root]# cd /etc/rc.d/rc5.d
[root@lyrebird rc5.d]# ls -l ???a*
lrwxr-xr-x    1 root     root           15 Jan 11  2005 S20audit -> ../init.d/audit
lrwxr-xr-x    1 root     root           14 Jan 11  2005 S26apmd -> ../init.d/apmd
lrwxr-xr-x    1 root     root           16 Jan 11  2005 S28autofs -> ../init.d/autofs
lrwxr-xr-x    1 root     root           13 Jan 11  2005 S95atd -> ../init.d/atd

Здесь вы видите, что службы audit и autofs имеют K nn вхождений во всех уровнях выполнения и S nn вхождений для обеих в уровнях выполнения 3 и 5. "S" означает, что служба запускается при входе на уровень выполнения, в то время как "K" означает, что она должна быть остановлена. Компонент nn в имени ссылки определяет приоритетный порядок, по которому служба должна быть запущена или остановлена. В этом примере audit запускается до autofs и останавливается после.

Для большей информации о командах init и inittab обращайтесь к страницам руководства man.


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=5284