Маленькие хитрости большой системы

Роман RTG ЕПИШЕВ, 30.06.2003, Мой Компьютер Weekly

В этом материале поговорим о некоторых нюансах использования ОС Linux.

Сервисный центр

Как-то раз решил поставить я Apache. Поставил, принял конфигурацию по умолчанию, запустил сервер httpd, но ожидаемого эффекта не было — http://localhost не был найден ни одним из установленных браузеров. Игрушка Maelstrom запускалась-запускалась, а потом взяла, да и перестала работать — не появлялся кораблик на звездном фоне.

Не думал, что эти проблемы могут быть хоть как-нибудь связаны... Оказалось, все произошло из-за отключения мною сервиса network, и поэтому вся система жила без внутренней сети. "Хорошо, с Apache сравнительно понятно, но что случилось с Maelstrom?" — спросите вы. Как выяснилось, некоторые программы (а особенно игры) соединяются сами с собой через эту внутреннюю сеть компьютера. Не имея возможности такого соединения, они либо зависают, либо загружаются не полностью. Поэтому очень советую, если вы точно не знаете, нужен ли вам какой-нибудь сервис или нет, не выключайте его, ведь это может быть что-то важное. Хотя... если у вас стабильный состав оборудования, kudzu нет смысла при каждой загрузке это проверять, а если у вас не ноутбук, то сервису apmd незачем отнимать системные ресурсы.

Для конфигурирования сервисов в вашем дистрибутиве уже должна быть установлена какая-нибудь программа (попробуйте запустить serviceconf), позволяющая в удобном интерфейсе их включать и выключать. Но представим ненадолго, что вы вырубили, например, сервер шрифтов (xfs), и теперь никакие иксы не хотят грузиться, а для текстового режима конфигуратора нет... Как в таком случае указать, какие сервисы нужны, или хотя бы запустить требуемый?

Начнем издалека :-). В Linux существует понятие runlevel (дословно — уровень запуска). Каждому состоянию компьютера и системы присвоен свой runlevel. При переходе из одного уровня в другой (например, из третьего в нулевой) выполняются скрипты из /etc/rc.d/rc[уровень_запуска_в_который_переходим].d (на самом деле, в этих папках — только ссылки на скрипты в /etc/rc.d/init.d/). Если посмотреть на имена ссылок, то нельзя не заметить одну особенность. Возьмем, к примеру, тот же network. Ссылка на него в нормальном, пятом уровне выглядела у меня так:

"Ссылка есть, но почему network не работает?" — опять спросит кто-нибудь. Разберем сначала имя: K — означает, что этот сервис будет "убит" (KILL) при переходе в данный runlevel, цифра 90 позволяет запустить сервисы в определенном порядке, иначе они бы выполнялись в алфавитном, наконец, network — это название сервиса. А чтобы заставить сервис запускаться, нужно всего лишь переименовать ссылку и сделать из буквы K букву S (что означает START):

Для того чтобы выключить сервис, букву S меняем на K (так уж исторически сложилось).

Вот и все, при следующем изменении runlevel'а network будет запущен. Если вы знаете имя сервиса и хотите его запустить из консоли, то наберите

Например, чтобы заставить работать ранее уже упоминавшийся xfs:

Для того чтобы перемещаться между уровнями, можно использовать команду

(она требует прав суперпользователя). Удобно использовать halt (для выключения питания ATX-систем нужно добавить ключ -p) и reboot.

Установка Другой Операционной Системы.

Вот вроде бы и работает Linux, вам он уже начинает нравиться. Но у всех "переходящих" пользователей обязательно на другом разделе еще живет какая-нибудь Windows. В один прекрасный день она дает сбой, и вы принимаетесь переустанавливать ее. Установили, настроили, перезагружаете компьютер, а входа-то в Linux уже и нету — Windows преспокойно затерла загрузочный сектор. Для восстановления загрузчика Linux вам потребуется загрузочная дискета, содержащая ту же версию ядра (если версии не будут совпадать, фокус с дискетой не получится), что и в вашей системе. Бросайте ее в дисковод и с нее загружайтесь, на запрос boot: нажмите Enter, и компьютер должен загрузиться в Linux (разумеется, запускается та система, которая уже у вас установлена, поэтому нет смысла использовать загрузочную дискету на компьютере без Linux). Теперь нужно стать суперпользователем (root) и установить загрузчик:

если у вас (был) установлен grub, то в консоли наберите

где <диск> — физический жесткий диск, откуда грузился прежний grub (обычно тот же диск, на котором установлен Linux);

если же lilo, то достаточно просто набрать

Теперь, если не выдано сообщений об ошибках, система готова к дальнейшей работе.

Бывает так, что загрузочной дискеты нет, но есть компакт-диски с Linux. В RedHat-подобных дистрибутивах можно с этих дисков войти в Rescue Mode, в котором в свою очередь можно "спасти" вашу установленную систему.

Загружайтесь с первого компакт-диска. Далее наберите:

Инсталляционная программа проверит ваши жесткие диски на наличие Linux'а и, если таковой найдется, примонтирует вашу файловую систему куда-то в /mnt/sysimage (об этом будет сказано в специальном сообщении). Теперь вам нужно /mnt/sysimage сделать вашим корневым каталогом:

А сейчас устанавливайте загрузчик — так, как об этом написано выше.

Для того чтобы создать загрузочную дискету, вам нужно выполнить команду

Чтобы узнать вашу версию ядра, наберите

(Будьте внимательны, версия ядра в Rescue-режиме может отличаться от установленной на вашей системе!)

Среда переменных

Как и в DOS/Win, в Линуксе существуют свои системные переменные, и некоторые из них могут быть нам интересны:

$HOME — указывает на домашний каталог пользователя;

$PATH — список каталога запуска;

$LANG — текущая локаль (язык и региональные настройки);

$PWD — текущая рабочая директория;

$USER — текущий пользователь;

$DISPLAY — (если указана — адрес/номер X-сервера, который в данный момент используется).

Итак, что они нам дают? Во-первых, мы всегда сможем узнать имя в системе (echo $USER или команда whoami ('кто я такой')), во-вторых — папку, где находимся (echo $PWD, также команда cwd (current working directory)). Переменная $PATH уже обсуждалась ранее на страницах газеты, разберем подробнее $LANG и $DISPLAY. Когда система только загружается, устанавливается переменная $LANG, ее значение берется из файла /etc/sysconfig/i18n. Когда нужно сменить локаль с русской, например, на английскую, то достаточно выполнить

и все программы, запущенные из данной консоли, будут использовать уже другую локаль, если она установлена в системе.

Также можно прописать в файл ~/.bashrc строчку

а в /etc/sysconfig/i18n —

и вы получите систему, в которой обычный пользователь будет иметь русскую локаль, а root и все системные сервисы — английскую (кодировка для en_US не указывается) Лично я прибегнул к этому затем, чтобы в журналах системы не фигурировали локализированные даты.

Но бывает и так, что менять локаль или любую другую переменную приходится только ради какой-то одной программы — для таких случаев процедура изменения и последующего восстановления значения излишне громоздка. Специально для этого служит еще одна из встроенных Bash-команд — env:

А вот таким образом вы можете запустить Midnight Commander с английской локалью, при этом все программы, запущенные из mc, будут все равно использовать русскую:

Что касается DISPLAY... Вы запускали когда-нибудь приложение, требующее X-сервер, из "голой" консоли? Помните сообщение о невозможности присоединиться к X-серверу, хотя тот у вас уже час как запущен? Правильно, это потому что программа не знает, куда подключаться. Вот эта информация и указывается в переменной $DISPLAY. Для приложений из среды KDE и оконных менеджеров достаточно при запуске указать -display :0 или --display :0, а вот приложения на базе Gtk и проч. могут не иметь такой опции. Но у нас есть env, так что можем запустить:

Теперь перейдите в консоль с X-сервером, и вы увидите, что там открылось окно плейера XMMS. Команда

запустит текстовый редактор kwrite с английским интерфейсом на первом X-сервере.

Скачал с сети и установил как-то раз я оконный менеджер fluxbox и долго не мог понять, как в него войти. Потом вспомнил, как запускаются другие оконные менеджеры, добавил в /etc/X11/xdm/Xsession после строчек, отвечающих за запуск KDE

затем изменил в этой же папке kdmrc, добавив в строчку

еще и fluxbox. Только после этого в kdm появился соответствующий рабочий пункт меню.

Немного закручено, не правда ли? А если менеджер только попробовать хочется?

В таком случае все просто — запускаете

или

и оконный менеджер загрузится в новые иксы.

Икс vs. Консоль

Вот была такая проблема: при инсталляции системы я не выбрал запуск X-сервера при загрузке, наивно полагая, что уже порядком поднаторел работать в консоли. Через час я опять устанавливал Linux, уже с загрузкой X-сервера по умолчанию. А оказалось вот что.

В файле /etc/inittab указывается, каким образом процесс init должен настраивать систему в определенных runlevel'ах, В частности, вы можете указать уровень runlevel по умолчанию (НЕ СТАВЬТЕ 0!), разрешить/запретить использование клавиш Ctrl+Alt+Del во время загрузки системы. Где-то в конце файла Вы найдете строчку

Параметры в inittab существуют в таком виде:

id — уникальное имя для процесса — от 1 до 4 букв/цифр;

runlevel — соответственно, runlevel(ы), при которых процесс будет запущен;

действие — что должен делать init с процессом (см. man inittab; рrespawn — запускать заново, если процесс будет уничтожен);

процесс — какая-нибудь программа (напр. /etc/X11/prefdm).

Вы заметили, что в /etc/init.d нет ничего типа S84Xserver? Правильно — запуск xdm/kdm/gdm происходит из inittab, а те уже в свою очередь запускают Иксы. Для того чтобы отказаться от автоматической загрузки Xserver, вы можете просто в начале файла вместо

написать

заказав runlevel по умолчанию. Так можно сделать, если вы уже достаточно хорошо ориентируетесь в командах и в чисто текстовом режиме чувствуете себя как рыба в воде. Зачем загружать X, если большую часть времени проводишь в консолях?

Все, отключили иксы при загрузке. Но тут вдруг срочно понадобилось запустить, например, grip, а он требует Xserver. У нас три выхода: изменить runlevel на 5 (если вы — root) и загрузить ваш gnome/kde/windowmaker/fluxbox; запустить вручную сервер (прав обычного пользователя для этого достаточно), а там и программу (но окно будет без управления — не запущен оконный менеджер); или же запустить X-сервер, потом GNOME, а в нем уже grip.

Первый вариант будет выглядеть так:

Второй вариант:

А третий:

(X:0 & в круглых скобках потому, что только так мы можем указать более одной команды — bash не понимает конструкцию &;)

Единственный недостаток второго и третьего методов — даже если указать ключи --quiet и перенаправление > dev/null 2>&1, некоторая отладочная информация редко, но все-таки может вылезать на экран. Если вы все же захотите использовать именно эту виртуальную консоль, добавьте еще и знак & в конец последней команды, иначе оболочка будет полностью захвачена работающим процессом.

С помощью таких действий можно, например, запустить mplayer вообще на отдельном сервере и без оконного менеджера (кнопка f переключает в полноэкранный режим):

или The GIMP, но с оконным менеджером Metacity без запуска самого GNOME:

Мы получаем меньшую загруженность системы, следовательно, большую производительность. А переключаться по X-серверам будем кнопками Ctrl+Alt+F7, Ctrl+Alt+F8 и так до F12.





Источник - LinuxBegin.ru
http://linuxbegin.ru

Адрес этой статьи:
http://linuxshop.ru/linuxbegin/article391.html