Добавить в избранное | Сделать стартовой страницей

Большая Linux библиотека для пользователей OS Linux и ПО для нее
Есть что сказать? Нужен совет? Посети наш форум.


При поддержке
Продвижение сайта
Продвижение сайта
Раскрутка сайта
Создание сайта
Оптимизация сайта
Интернет реклама
Аудит сайта
Администрирование сервера
настройка сервера
установка сервера
аренда сервера
Администрирование сервера
администрирование сервера
настройка сервера
аренда сервера
Rambler's Top100


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

Автор : Роман RTG ЕПИШЕВ

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

Как-то раз решил поставить я 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.


Обсудить данную тему на нашем форуме "Все о Linux"