Основы работы в ОС Linux

         

Другие режимы отображения


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

Режим "Информация". В этом режиме (рис. 6.3) на панель выводится информация о подсвеченном в другой панели файле и о текущей файловой системе (тип, свободное пространство и число свободных индексных дескрипторов - inode).


увеличить изображение
Рис. 6.3.  Режим "Информация"

Режим "Дерево". В режиме отображения дерева каталогов в одной из панелей выводится графическое изображение структуры дерева каталогов (см. пример на рис. 6.4). Этот режим подобен тому, который вы увидите, выбрав команду Дерево каталогов из меню Команды, только в последнем случае изображение структуры каталогов выводится в отдельное окно.


увеличить изображение
Рис. 6.4.  Режим отображения дерева каталогов



Форматы отображения списка файлов


Вид панелей, в которых отображаются списки файлов и подкаталогов, может быть изменен через команды выпадающих меню левой и правой панелей Левая панель (Left) и Правая панель (Right) главного меню. Если вы хотите изменить формат представления списка файлов в панели, вы можете воспользоваться командой Формат списка... соответствующей (левой или правой) панели. Имеется возможность выбрать один из 4 вариантов представления списка файлов: Стандартный (Full), Укороченный (Brief), Расширенный (Long) и Определяемый пользователем (User).

В "стандартном" формате отображаются имя файла, его размер и время последней модификации.В "укороченном" формате отображаются только имена файлов, за счет чего на панели умещаются две колонки (и видно вдвое больше имен).В "расширенном" формате содержимое каталога представляется так, как это делает команда "ls -l". В этом формате панель занимает весь экран.Если вы выберете формат "определяемый пользователем", вы должны будете задать структуру отображаемой информации.

При задании структуры вначале указывается размер панели: "half" (половина экрана) или "full" (весь экран). После размера панели можно указать, что на панели должно быть две колонки. Это делается добавлением цифры 2 в строку задания формата. Далее надо перечислить имена полей с необязательным параметром ширины поля. В качестве имен полей могут использоваться следующие слова:

name - отображать имя файла.size - отображать размер файла.bsize - отображать размер в альтернативной форме, при которой выводятся размеры файлов, а для подкаталогов выводится только надпись "SUB-DIR" или "UP-DIR".type - отображать одно-символьное поле типа. Этот символ может принимать значения из следующего подмножества символов, выводимых командой ls с параметром -F: * (asterisk) - для исполняемых файлов;/ (slash) - для каталогов;@ (at-sign) - для ссылок (links);= (знак равенства) - для сокетов (sockets);- (дефис) - для байт-ориентированных устройств;+ (плюс) - для блок-ориентированных устройств;| (pipe) - для файлов типа FIFO;~ (тильда) - для символических ссылок на каталоги;! (восклицательный знак) - для оборванных (stalled) символических ссылок (ссылок, указывающих на отсутствующий файл).mtime - время последней модификации файла.atime - время последнего обращения к файлу.ctime - время создания файла.perm - строка, показывающая текущие права доступа к файлу.mode - восьмеричное представление текущих прав доступа к файлу.nlink - число ссылок на данный файл.ngid - идентификатор группы (GID), в цифровой форме.nuid - идентификатор пользователя (UID), в цифровой форме.owner - владелец файла.group - группа, имеющая права на файл.inode - номер inode файла.


Вы также можете использовать следующие имена полей для организации вывода информации на дисплей:

space - вставить пробел при выводе на дисплей.mark - вставить звездочку (asterisk) если файл помечен, пробел - если не помечен.| - вставить вертикальную линию при выводе на дисплей.

Для того, чтобы задать фиксированную ширину поля, нужно добавить двоеточие ':', после которого указать число позиций, которое отводится под это поле. Если после числа поставить символ '+', то указанное число будет интерпретироваться как минимальная ширина поля, и, если экран позволяет, поле будет расширено.

Например, "стандартный" формат вывода задается строкой:

half type,name,|,size,|,mtime

а "расширенный" - строкой:

full perm, space, nlink, space, owner, space, group, space, size, space, mtime, space, name

А вот пример формата, определяемого пользователем:

half name,|,size:7,|,type,mode:3

Отображение списка файлов в любой из панелей может производиться в соответствии с одним из восьми порядков сортировки:

по имени;по расширению;по размеру файла;по времени модификации;по времени последнего обращения к файлу;по номеру узла (inode);без сортировки.

Порядок сортировки вы можете задать, выбрав в меню соответствующей панели команду Порядок сортировки.... При этом появляется диалоговое окно (рис. 6.2), в котором кроме желаемого порядка сортировки можно указать, что сортировка производится в обратном порядке (поставив с помощью клавиши пробела отметку в скобках возле слова Обратный (Reverse)) и с учетом регистра символов.


Рис. 6.2.  Диалоговое окно задание порядка сортировки

По умолчанию подкаталоги отображаются в начале списка, но это можно изменить, проставив отметку возле опции "Смешивать файлы/каталоги" ("Mix all files") команды Конфигурация меню Настройки.

Можно выводить в панель не все списки файлов данного каталога, а только соответствующие определенному шаблону. Команда Фильтр в меню любой панели позволяет задать шаблон, которому должны соответствовать имена файлов, отображаемых в панели (например, "*.tar.gz").

Имена подкаталогов и ссылки на подкаталоги отображаются всегда, независимо от шаблона.

В меню каждой из панелей имеется команда Перечитать (аналог которого в других программах обычно называется "Обновить"). Команда Перечитать (горячие клавиши <Ctrl>+<R>) обновляет список файлов, отображаемый в панели. Это бывает полезно в тех случаях, когда другие процессы создают или удаляют файлы. Если вы выполнили команду меню Критерий панелизации (перенаправление вывода команды на панель, о нем будет рассказано ниже), и вследствие этого на панели находятся результаты работы какой-то программы, по команде Перечитать на панель вновь будет выведено содержимое каталога.


Функциональные клавиши и меню Файл


До сих пор мы рассказывали только о внешнем виде экрана программы Midnight Commander и о том, как изменить этот вид. Теперь пора рассказать и том, как работать с файлами с помощью этой программы.

Наиболее часто выполняемые в Midnight Commander операции привязаны к функциональным клавишам <F1> - <F10>. Приведем сводку в виде табл. 6.4.

Таблица 6.4. Функциональные клавиши

Функциональная клавишаВыполняемое действие
<F1>Вызывает контекстно-зависимую подсказку
<F2>Вызывает меню, создаваемое пользователем
<F3>Просмотр файла, на который указывает подсветка в активной панели
<F4>Вызов встроенного редактора для файла, на который указывает подсветка в активной панели
<F5>Копирование файла или группы отмеченных файлов из каталога, отображаемого в активной панели, в каталог, отображаемый на второй панели. При копировании одного файла можно поменять его имя1). Можно также указать имя каталога, куда будет производиться копирование (если надо скопировать в каталог, отличный от каталога, отображаемого во второй панели)
<F6>Перенос файла или группы отмеченных файлов из каталога, отображаемого в активной панели, в каталог, отображаемый на второй панели. Как и при копировании, можно поменять имя файла или целевого каталога.
<F7>Создание подкаталога в каталоге, отображаемом в активной панели
<F8>Удаление файла (подкаталога) или группы отмеченных файлов
<F9>Вызов основного меню программы (отображаемого над панелями)
<F10>Выход из программы

Перечисленные в этой таблице операции (команды) можно выполнять не только путем нажатия соответствующей функциональной клавиши, но и с помощью щелчка мыши по экранным кнопкам или используя соответствующие команды меню Файл.

Прежде чем выполнять какую-то из операций, указанных в табл. 6.4 или задаваемых командами меню, надо выбрать файл или группу файлов, которые будут объектами операции. Для выбора только одного файла достаточно переместить на него подсветку в активной панели (конечно, вначале надо перейти в соответствующий каталог). Если же вы хотите выполнить какую-то операцию сразу над группой файлов, эти файлы надо отметить. Чтобы отметить файл, на который указывает в данный момент подсветка, используйте клавишу <Insert> или комбинацию <Ctrl>+<T>. При этом имя файла в панели выводится другим цветом. Для снятия отметки с файла используются те же комбинации.

Выделить группу файлов для последующей обработки можно также с помощью команды Отметить группу меню Файл. Эта команда используется для отметки группы файлов по заданному шаблону. Midnight Commander выдаст строку ввода, в которой надо задать регулярное выражение, определяющее желаемую группу имен. Если включена опция Образцы в стиле shell, регулярные выражение строятся по тем же правилам, которые действуют в оболочке shell (см. лекцию 5). Если опция "Образцы в стиле shell" отключена, то пометка файлов производится по правилам обработки нормальных регулярных выражений (см. руководство man ed).

Если выражения начинаются или оканчиваются слэшем (/), то пометка будет ставиться на каталоги, а не на файлы.

"Горячей" клавишей для операции отметки группы файлов является клавиша <+> на цифровой клавиатуре.

Операция "Снять отметку" ("горячая" клавиша - <-> или <\> - обратный слэш) является обратной по отношению к операции отметки группы файлов и использует те же правила формирования шаблонов. Используется для снятия отметки с группы файлов.

Операция "Инвертировать отметку" (<*>) используется для того, чтобы снять отметки со всех помеченных файлов текущего каталога, одновременно отметив все файлы, которые не были помечены.

Если текущий каталог содержит много файлов (так что все они не умещаются на панели), то прежде чем отметить файл, его нужно еще отыскать. В таких случаях удобно пользоваться комбинациями клавиш <Ctrl>+<S> и <Alt>+<S>. После нажатия одной из этих комбинаций инициируется режим поиска имен файлов в текущей директории по первым символам имени. В этом режиме вводимые символы отображаются не в командной строке, а в строке поиска. Если режим Показ мини-статуса (Show mini-status) включен, эта строка отображается на месте строки мини-статуса. При этом в процессе ввода символов линия подсветка перемещается к следующему файлу, название которого начинается с введенной строки символов. Клавиши <Backspace> или <Del> могут использоваться для исправления ошибок. Если <Ctrl>+<S> нажато снова, осуществляется поиск следующего подходящего файла. Надо отметить, что если в текущем каталоге нет файлов с именами, начинающимися на вводимые символы, эти символы не отображаются в строке мини-статуса, что как раз и говорит Вам, что вы здесь не найдете искомого файла.

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

Как уже говорилось, вовсе не обязательно использовать функциональные клавиши для вызова ассоциированных с ними команд. Любую из этих команд можно выполнить через меню Файл. Кроме команд, ассоциированных с функциональными клавишами, меню Файл содержит еще следующие команды (в скобках указаны соответствующие "горячие" клавиши).

Права доступа (<Ctrl>+<X>,<C>). Позволяет изменить права доступа к выделенному или помеченным файлам.Владелец/группа (<Ctrl>+<X>,<O>). Позволяет выполнить команду chown.Права (расширенные). Позволяет изменить права доступа и владения файлом.Жесткая ссылка (<Ctrl>+<X>,<L>). Создает жесткую ссылку на текущий файл.Символическая ссылка (<Ctrl>+<X>,<S>). Создает символическую ссылку на текущий файл. О ссылках мы подробно говорили в лекции 4. Программа Midnight Commander указывает символические ссылки, выводя знак "@" перед именем такой ссылки (кроме ссылок на подкаталоги, которые обозначаются знаком тильды "~"). Если на экран выводится строка мини-статуса (опция "Показывать мини-статус" включена), то в ней отображается имя того файла, на который указывает ссылка.Быстрая смена каталога (<Alt>+<C>). Используйте эту команду, если вы знаете полный путь к каталогу, в который хотите перейти (который хотите сделать текущим).Просмотр вывода команды (<Alt>+<!>). По этой команде на экране появляется строка ввода, в которой вы можете ввести любую команду с параметрами (по умолчанию предлагается использовать в качестве параметра имя подсвеченного файла). Вывод этой команды будет отображаться на экране через встроенную программу просмотра.



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



Клавиатурные команды управления панелями


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

<Tab> или <Ctrl>+<i>. Сменить текущую (активную) панель. Подсветка перемещается с панели, которая была активной ранее, в другую панель, которая становится активной.<Alt>+<G> / <Alt>+<R> / <Alt>+<J>. Используются для перемещения подсветки, соответственно, на самый верхний, средний или нижний файл из числа отображаемых в данный момент на панели.<Alt>+<T>. Циклически переключает режимы отображения списка файлов текущей директории. С помощью этой комбинации клавиш можно быстро переключаться из режима стандартного вывода (long listing) к сокращенному или к режиму, определяемому пользователем.<Ctrl>+<\>. Показать справочник каталогов и перейти к выбранному каталогу.<Home> или <Alt>+<'<'>. Перемещает подсветку на первую позицию списка файлов (здесь я вынужден отойти от соглашения об обозначении клавиш).<End>, <Alt>+<'>'>. Перемещает подсветку на последнюю позицию списка файлов.<Alt>+<O>. Если в активной панели подсвечено имя каталога, а на второй панели отображается список файлов, то вторая панель переходит в режим отображения файлов подсвеченного каталога. Если в активной панели подсветка указывает на файл, то во второй панели отображается содержимое каталога, родительского по отношению к текущему.<Ctrl>+<PageUp>, <Ctrl>+<PageDown>. Только если mc запущен с консоли Linux: выполняется, соответственно, переход (chdir) к родительскому каталогу ("..") или к выделенному подсветкой каталогу.<Alt>+<Y>. Перемещение к предыдущему каталогу из истории перемещения по каталогам; эквивалентно нажатию мышкой на символ '<' в верхнем углу панели.<Alt>+<U>. Перемещение к следующему каталогу из истории перемещения по каталогам; эквивалентно нажатию мышкой на символ '>'.



Командная строка оболочки


Как было сказано при описании внешнего вида экрана Midnight Commander, в нижней части экрана всегда присутствует командная строка оболочки.

Для того, чтобы во время работы с Midnight Commander запустить любую команду операционной системы, вы должны либо набрать имя соответствующей программы в командной строке, либо выбрать его в одной из панелей (переместив подсветку на имя файла программы), а затем нажать клавишу <Enter>. Если вы нажимаете клавишу <Enter> в тот момент, когда подсветка указывает на имя файла, не являющегося исполняемым, Midnight Commander сравнивает расширение выбранного файла с расширениями, прописанными в "файле расширений" ~/mc.ext. Если в файле расширений найдется подраздел, задающий процедуры обработки файлов с данным расширением, то обработка файла производится в соответствии с заданными в этом подразделе командами. Перед обработкой выполняются простые макро-подстановки.

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

<Alt>+<Enter>. Копирует подсвеченное имя файла или каталога в командную строку.<Ctrl>+<Enter>. То же самое, что <Alt>+<Enter>, но работает только в консоли.<Alt>+<Tab>. Пытается выполнить операцию "Завершение ввода" (completion) имени файла, названия команды, переменной, имени пользователя или имени хоста (в зависимости от того, что вы начали набирать и какой элемент команды вводите), то есть пытается угадать еще не набранные вами символы, исходя из списка файлов текущего каталога, списка команд и т. д.<Ctrl>+<X>, <T>. Копирует в командную строку имена помеченных файлов (или подсвеченное имя, если нет помеченных) из активной панели.<Ctrl>+<X>, <Ctrl>+<T>. Копирует в командную строку имена помеченных файлов из пассивной панели.<Ctrl>+<X>,<P>. Копирует в командную строку имя текущего каталога (т. е. каталога, отображаемого в активной панели).<Ctrl>+<X>, <Ctrl>+<P>. Копирует в командную строку имя каталога, отображаемого в пассивной панели.<Ctrl>+<Q>. Вставляет символы, которые каким-то образом интерпретируются самой программой Midnight Commander (например, символ '+').<Alt>+<P>. Вызывает перемещение на команду назад по списку ранее запускавшихся команд (истории команд).<Alt>+<N>. Перемещение на одну команду вперед в истории команд.<Alt>+<H>. Выводит историю текущей строки ввода (для командной строки - историю команд).


Строки ввода - это не только командная строка оболочки shell, но и строки ввода в диалоговых окнах различных подпрограмм. Во всех случаях, когда на экране появляется строка ввода, можно пользоваться управляющими комбинациями клавиш, перечисленными в табл. 6.5.

Таблица 6.5. Команды управления строкой вводаКомбинация клавишВыполняемое действие
<Ctrl>+<A>Перемещает курсор в началу строки
<Ctrl>+<E>Перемещает курсор в конец строки
<Ctrl>+<B>Перемещает курсор на одну позицию влево
<Ctrl>+<F> или <0>Перемещает курсор на одну позицию вправо
<Alt>+<F> или <0>Перемещает курсор на одно слово вперед
<Alt>+<B>Перемещает курсор на одно слово назад
<Ctrl>+<H> или <Backspace>Удаляет символ, предшествующий курсору
<Ctrl>+<D> или <Delete>Удаляет символ в позиции курсора
<Ctrl>+<@>Устанавливает метку для того, чтобы вырезать (скопировать в буфер) часть текста
<Ctrl>+<W>Копирует текст, расположенный между курсором и меткой, в буфер, удаляя текст из строки ввода
<Alt>+<W>Копирует текст, расположенный между курсором и меткой, в буфер (без удаления из строки ввода)
<Ctrl>+<Y>Вставляет содержимое буфера в строку ввода перед позицией курсора
<Ctrl>+<K>Удаляет текст от курсора до конца строки
<Alt>+<P> и <Alt>+<N>Эти комбинации используются для перемещения по истории команд. <Alt>+<P> перемещает к предыдущей команде, <Alt>+<N> - к следующей
<Ctrl>+<Alt>+<H> или <Alt>+<Backspace>Удалить предшествующее слово
<Alt>+<Tab>Пытается выполнить завершение ввода (completion) имени файла, команды, переменной, имени пользователя или имени хоста

Маски файлов для операций копирования/переименования


При выполнении операций копирования и перемещения (или переименования) файлов вы имеете возможность изменить имена копируемых или перемещаемых файлов. Для этого вы должны задать маску для имен файлов-источников и маску для имен файлов, которые будут созданы (файлы-приемники). Обычно эта вторая маска представляет собой несколько символов замены (wildcards) в конце строки, определяющей место назначение создаваемых файлов. Задание масок осуществляется в строках ввода, отображаемых в окне, появляющемся после обращения к командам копирования / переноса (рис. 6.6).

Все файлы, удовлетворяющие маске источника, будут переименованы (скопированы или перемещены с новыми именами) в соответствии с маской файла-приемника. Если имеются помеченные файлы, то копируются (перемещаются) только помеченные файлы, удовлетворяющие заданной маске для файлов-источников.


увеличить изображение
Рис. 6.6.  Диалоговое окно для переименования файлов

Есть еще несколько опций, которые влияют на выполнение операций копирования/перемещения файлов, и которые устанавливаются в том же окне запроса, где задаются маски имен файлов, либо через команду меню Настройки | Конфигурация.

Опция Разименовывать ссылки (Follow links) определяет, будут ли при копировании жестких или символических ссылок в каталоге-приемнике (и рекурсивно в подкаталогах) создаваться такие же ссылки, или будут копироваться файлы (и подкаталоги), на которые эти ссылки указывают.

Опция Внутрь каталога, если есть (Dive into subdirs) определяет, что делать, если в каталоге-приемнике уже существует подкаталог, имя которого совпадает с именем файла (каталога), который копируется (источника). По умолчанию (опция отключена) содержимое каталога-источника копируется в каталог-приемник. Если опция включена, то в каталоге приемнике будет создан новый подкаталог с тем же именем, в который и будет осуществляться копирование.

Лучше показать это на примере. Пусть вы хотите скопировать содержимое каталога one в каталог /two/one, который уже существует. Обычно (опция отключена) mc будет просто копировать все файлы из one в /two/one. Если опцию включить, копирование файлов будет производиться в /two/one/one.

Опция Сохранять атрибуты (Preserve attributes) определяет, будут ли при копировании/перемещении сохранены атрибуты исходного файла: права доступа, временные метки и, если вы root, UID и GID исходного файла. Если опция отключена, атрибуты будут установлены в соответствии с текущим значением umask.

На процедуры копирования и перемещения файлов оказывает также влияние установка опции Образцы в стиле shell в меню Настройки / Конфигурация. Когда эта опция включена, вы можете использовать символы замены (wildcards) '*' и '?' в маске источника. Они обрабатываются аналогично тому, как это делается в shell. В маске приемника разрешается использовать только '*' и '\<цифра>'. Первый символ '*' в маске приемника соответствует первой группе символов замены в маске источника, второй символ '*' соответствует второй группе и т. д. Аналогично, символ замены '\1' соответствует первой группе символов замены в маске источника, символ '\2' - второй группе и т. д. Символ '\0' соответствует целому имени файла-источника. Приведем пару примеров.

Пример 1. Если маска источника "*.tar.gz", а маска приемника - "/two/*.tgz", и имя копируемого файла - "foo.tar.gz", копия будет называться "foo.tgz" и будет находиться в каталоге "/two".

Пример 2. Предположим, вы хотите поменять местами имя и расширение файла, так чтобы "file.c" стал файлом "c.file". Маска источника для этого должна иметь вид "*.*", а маска приемника - "\2.\1".

Когда опция Образцы в стиле shell ("Use shell patterns") выключена, mc не осуществляет автоматической группировки. Для указания групп символов в маске источника, которые будут соответствовать символам замены в маске приемника, вы должны в этом случае использовать скобки '\(...\)'. Этот способ более гибкий, но требует больше усилий при вводе. Снова приведем два примера

Пример 3. Если маска источника имеет вид "^\(.*\)\.tar\.gz$", копирование производится в "/two/*.tgz" и копируется файл "foo.tar.gz", то результатом будет "/two/foo.tgz".

Пример 4. Предположим, что вы хотите поменять местами имя файла и его расширение, так чтобы имена вида "file.c" приняли вид "c.file".

Маска источника для этого - "^\(.*\)\.\(.*\)$", а маска приемника - "\2.\1".

При выполнении операций копирования/перемещения вы можете также преобразовать регистр символов в именах файлов. Если вы используете '\u' или '\l' в маске приемника, то следующий символ имени будет образован в верхнем (заглавные символы) или нижнем (строчные) регистре соответственно.

Если использовать в маске приемника '\U' или '\L', то к соответствующему регистру будут преобразованы все последующие символы, вплоть до следующего вхождения '\L' или '\U', или же до конца имени файла.

Применение '\u' и '\l' обеспечивает более широкие возможности, чем '\U' и '\L'.

Например, если маска источника есть '*' (опция Образцы в стиле shell включена) или '^\(.*\)$' (опция Образцы в стиле shell выключена), а маска приемника есть '\L\u*', имена файлов будут преобразованы таким образом, что первые буквы имени будут заглавными, а все остальные - строчными.

Символ '\' в масках используется для отмены специальной интерпретации отдельных символов. Например, '\\' означает просто обратный слэш (как литерал) и '\*' означает просто звездочку (asterisk).



Меню Команды


Выпадающее подменю Команды главного меню позволяет выполнить еще ряд операций по управлению файловой системой, а также выполнить некоторые команды, изменяющие вид панелей Midnight Commander и отображаемую в панели информацию.

При обращении к команде меню Дерево каталогов выводится окно, отображающее структуру каталогов файловой системы.

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

Чтобы избавиться от долгих задержек во время создания дерева каталогов, Midnight Commander создает дерево путем просмотра только небольшого подмножества всех каталогов. Если каталог, который вам нужен, не отображен, перейдите в его родительский каталог и нажмите <Ctrl>+<R> или <F2>. Если каталог не содержит вложенных подкаталогов, ничего не произойдет. В противном случае развернется еще один уровень дерева подкаталогов.

Существует два режима отображения дерева каталогов. В статическом режиме перемещения для выбора каталога (т. е. перемещения подсветки на имя другого каталога) используются только клавиши <0> и <0>. Показываются все известные программе на данный момент подкаталоги. В динамическом режиме клавиши <0> и <0> используются для перехода на соседний каталог того же уровня. Для перехода в родительский каталог используется клавиша <0>, а по клавише <0> происходит переход к потомкам текущего каталога, т. е. на один уровень ниже. При этом отображаются только вышележащие каталоги (включая родительский и выше), соседние каталоги того же уровня и непосредственные потомки. Вид дерева каталогов динамически изменяется после каждого перемещения по дереву.


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

<F1> (Help) Вызов подсказки с отображением раздела помощи об окне дерева каталогов.<Esc> или <F10> Выход из окна дерева каталогов. Смены текущего каталога не происходит.

В окне просмотра дерева каталогов поддерживается мышка. Двойной щелчок аналогичен нажатию клавиши <Enter>.

Команда Поиск файла (горячие клавиши <Meta>+<?> или <Esc>,<?>) выпадающего меню Команда позволяет вам найти на диске файл с заданным именем. После выбора этой команды меню вначале запрашивается имя искомого файла и имя каталога, с которого необходимо начинать поиск. Нажав экранную кнопку Дерево, вы можете выбрать начальный каталог поиска из дерева каталогов. В поле Содержание (Contents) можно задать регулярное выражение по правилам команды egrep. Это значит, что перед символами, имеющими специальное значение для egrep, необходимо вставить символ "\", например, если вам нужно найти строку "strcmp (", вы должны указать шаблон поиска в виде "strcmp \(". Для того, чтобы начать поиск, нажмите экранную кнопку Дальше. Во время поиска его можно приостановить кнопкой Остановить и продолжить по кнопке Продолжить.

Список найденных файлов можно просматривать, перемещаясь с помощью клавиш <Стрелка вверх> и <Стрелка вниз>. Кнопка Перейти используется для перехода в каталог, в котором находится подсвеченный файл. Кнопка Повтор служит для задания параметров нового поиска.

Кнопка Выход служит для выхода из режима поиска.

Нажатие на кнопку Панелизация приведет к тому, что результаты поиска будут отображены на текущую активную панель, так что вы можете производить с выбранными файлами еще какие-то действия (просматривать, копировать, перемещать, удалять и так далее). После вывода на панель можно нажать <Ctrl>+<R> для возврата к обычному списку файлов.

Кроме того, имеется возможность задать список каталогов, которые команда Поиск файла будет пропускать в ходе поиска (например, вы знаете, что искомого файла нет на CD-ROM или не хотите искать в каталогах, подключенных через NFS по очень медленному каналу). Каталоги, которые надо пропустить, должны быть указаны в переменной find_ignore_dirs в секции Misc Вашего файла ~/.mc/ini.

Имена каталогов разделяются двоеточиями, следующим образом:

[Misc] find_ignore_dirs=/cdrom:/nfs/wuarchive:/afs



Вы можете использовать перенаправление вывода на панель (см. ниже Критерий панелизации) для выполнения некоторых усложненных последовательностей действий, в то время как Поиск файла позволяет выполнять только простые запросы.

Команда Переставить панели (<Ctrl>+<U>) меняет местами содержимое правой и левой панелей.

По команде Отключить панели (<Ctrl>+<O>) показывается вывод последней из выполнявшихся команд shell. Эта команда работает только через xterm и на консоли Linux.

По команде Сравнить каталоги (<Ctrl-X>, <D>) сравнивается содержимое каталогов, отображаемых на левой и правой панелях.

Существует три метода сравнения. При быстром методе сравниваются только размер и дата создания файлов с одинаковыми именами. В результате в обоих каталогах будут подсвечены файлы, отсутствующие во втором каталоге, или более новые версии соответствующих файлов. После этого вы можете воспользоваться командой Копировать (<F5>) для того, чтобы сделать содержимое каталогов одинаковым.

При побайтном методе сравнивается содержимое файлов (побайтно). Этот метод недоступен, если машина не поддерживает системный вызов mmap(2). При сравнении по размеру сравниваются только размеры соответствующих файлов, а дата создания не проверяется.

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

[user]$ find . -type l -print

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

Если вы захотите, то можете сохранить часто используемые команды панелизации под отдельными информативными именами, чтобы иметь возможность их быстро вызвать по этим именам. Для этого нужно набрать команду в строке ввода (строка "Команда") и нажать кнопку Добавить. После этого вам потребуется ввести имя, по которому вы будете вызывать команду. В следующий раз вам достаточно будет выбрать нужное имя из списка, а не вводить всю команду заново.

Команда меню История команд выводит окно со списком ранее выполнявшихся команд. Подсвеченную строку из истории можно скопировать в командную строку оболочки (перемещение подсветки - клавишами <Стрелка вверх> и <Стрелка вниз>, копирование - по клавише <Enter>).

Доступ к истории команд можно получить также по комбинациям клавиш <Alt>+<P> или <Alt>+<N>, однако в этом случае вы не видите окна с перечнем команд. Вместо этого в командную строку выводится одна команда из списка и по комбинации <Alt>+<P> происходит смена этой команды на предыдущую, а по <Alt>+<N> - на следующую команду из истории команд.

Команда меню Справочник каталогов (<Ctrl>+<\>) позволяет создать список каталогов, которые часто используются, и обеспечить быстрый переход к нужному каталогу из этого списка. Для этого создается список меток (условных имен), присвоенных наиболее часто используемым каталогам. Этот список можно использовать для быстрого перехода в нужный каталог. Пользуясь диалоговым окном справочника каталогов, вы можете добавить новую метку в список или удалить ранее созданную пару метка/каталог. Для добавления метки можно также использовать комбинацию клавиш (<Ctrl>+<X>, <H>), по которой текущий каталог добавляется в справочник каталогов. Программа выдаст запрос на ввод метки для этого каталога.

Команда меню Фоновые задания позволяет вам управлять фоновыми заданиями, запущенными из Midnight Commander (такими заданиями могут быть только операции копирования и перемещения файлов). Используя эту команду меню или "горячие" клавиши <Ctrl>+<X>, <J>, вы можете остановить, возобновить или снять любое из фоновых заданий.

После выбора команды меню Файл расширений вы получаете возможность редактировать файл mc.ext, в котором можете связать с определенным расширением файла (окончанием имени после последней точки) программу, которая будет запускаться для обработки (просмотра, редактирования или выполнения) файла с таким расширением. Запуск выбранной программы будет осуществляться после установки подсветки на имя файла и нажатия клавиши <Enter>.

Команда Файл меню используется для редактирования пользовательского меню (которое появляется после нажатия клавиши <F2>).


Настройка программы Midnight Commander


Программа Midnight Commander имеет ряд установок (опций), каждая из которых может быть включена или выключена, для чего служат несколько диалоговых окон, доступных через меню Настройки. Опция включена, если поставлена (с помощью клавиши пробела) звездочка или знак "x" в скобках перед названием опции. Рассмотрим последовательно команды меню Настройки, через которое включаются / отключаются эти опции.

Команда Конфигурация.

При выборе этой команды меню появляется диалоговое окно, изображенное на рис. 6.7. Параметры конфигурации, задаваемые в этом окне, делятся на три группы: "Настройки панелей", "Пауза после исполнения" и "Прочие настройки".


увеличить изображение
Рис. 6.7.  Окно настроек параметров конфигурации

В поле "Настройки панелей" вы задаете значения следующих параметров.

Показывать резервные файлы. По умолчанию программа Midnight Commander не показывает файлы, имена которых заканчиваются на '~' (подобно опции -B команды ls ).Показывать скрытые файлы. По умолчанию Midnight Commander показывает все файлы, в том числе файлы, имена которых начинаются точкой (как ls -a).Отметка перемещает курсор. Когда вы отмечаете файл (клавишами <Ctrl>+<T> или <Insert>), то по умолчанию подсветка на имени файла смещается на одну строку вниз.Выпадение меню при вызове. Если эта опция включена, то при вызове главного меню нажатием клавиши <F9>, будет сразу отображаться перечень команд меню (выпадающее меню). В противном случае активизируются только команды главного меню и вы должны (после выбора одного из них клавишами стрелок) нажать клавишу <Enter>, либо выбрать нужную команду по первой букве названия, и только после этого получите возможность выбрать команду выпадающего меню.Смешивать файлы/каталоги. Если эта опция включена, имена файлов и каталогов отображаются вперемежку. Если опция отключена, каталоги (и ссылки на каталоги) показываются в начале списка, а имена файлов - после имен всех каталогов.Быстрая загрузка каталога. По умолчанию эта опция выключена. Если вы активизируете ее, Midnight Commander будет использовать для вывода содержимого каталога следующий трюк: содержимое каталога перечитывается только в том случае, если изменилась запись в i-node каталога, т. е. если в каталоге создавались или удалялись файлы; если изменялись только записи в i-node файлов каталога (изменялся размер файла, режим доступа или владелец и т.п.) содержимое панели не обновляется. В этом случае (если опция включена) вы должны обновлять список файлов вручную (клавишами <Ctrl>+<R>).


Поле Пауза после исполнения. После выполнения Вашей команды Midnight Commander может обеспечить паузу, чтобы вы могли просмотреть и изучить вывод команды. Есть три варианта установки этой опции.

Никогда. Это значит, что вы не хотите видеть вывод команды. На консоли Linux или при использовании xterm вы можете просмотреть этот вывод, нажав <Ctrl>+<O>.На "тупых" терминалах. Пауза будет создаваться на терминалах, которые не способны обеспечить показ вывода последней из выполнявшихся команд (это любые терминалы, отличные от xterm или Linux-консоли).Всегда. Программа обеспечит паузу после выполнения любой команды.

В поле Прочие настройки вы задаете значения следующих параметров:

Детали операций (Verbose operation). Этот переключатель определяет, будет ли при выполнении операций копирования, перемещения и удаления выводится дополнительное окно, отображающее ход выполнения операции. Если у вас медленный терминал, вы можете отключить этот вывод. Он отключается автоматически, если скорость Вашего терминала меньше 9600 bps.Подсчитывать общий размер (Compute totals). Если эта опция включена, Midnight Commander перед выполнением операций копирования, перемещения и удаления подсчитывает общее число обрабатываемых файлов и их суммарный размер и показывает ход выполнения операции над этими файлами в виде диаграммы-полоски (правда, это слегка замедляет выполнение операций). Эта опция не работает, если отключена опция "Детали операций".Образцы в стиле shell (Shell Patterns). По умолчанию команды отметки группы файлов (Select), снятия отметки (Unselect) и вывода списка файлов по фильтру (Filter) используют регулярные выражения, которые строятся по правилам, действующим в оболочке. Для того, чтобы достичь такого эффекта, выполняются следующие преобразования: '*' заменяется на '.*' (ноль или больше символов); '?' заменяется на '.' (в точности один символ) и '.' заменяется на обычную точку (literal dot). Если опция отключена, то регулярные выражения должны строиться так, как описано в man 1 ed.Автосохранение настроек. Если эта опция включена, то при выходе из программы Midnight Commander значения всех настраиваемых параметров сохраняются в файле ~/.mc/ini.Автоматические меню. Если эта опция включена, пользовательское меню будет автоматически вызываться на экран при запуске программы. Это бывает полезно, если на компьютере работают неопытные пользователи (операторы), которые должны выполнять только стандартные операции.Встроенный редактор. Если эта опция включена, то для редактирования файлов вызывается встроенный редактор. Если опция выключена, то будет использоваться редактор, указанный в переменной окружения EDITOR. Если такой редактор не задан, будет вызываться vi.Встроенный просмотр. Если эта опция включена, для просмотра файлов вызывается встроенная программа просмотра. Если опция выключена, вызывается программа, указанная в переменной окружения PAGER. Если такая программа не задана, используется команда view.Дополнение: показывать все. В процессе ввода команд Midnight Commander может выполнять "Завершение ввода" при нажатии на клавиши <Alt>+<Tab>, пытаясь угадать окончание вводимой команды. По умолчанию при первом нажатии <Alt>+<Tab> он ищет все возможные варианты завершения и, если завершения неоднозначны (имеется много разных вариантов), то только издает звуковой сигнал. При втором нажатии <Alt>+<Tab> отображаются все возможные завершения. Если вы хотите видеть все возможные варианты завершения после первого нажатия <Alt>+<Tab>, включите эту опцию.Вращающийся индикатор. Если эта опция включена, Midnight Commander отображает в верхнем правом углу вращающуюся черточку, как индикатор того, что выполняется какое-то задание (операция).Навигация в стиле lynx. Если эта опция включена, вы имеете возможность использовать клавиши <0> для перехода в подсвеченный в данный момент каталог и <0> для перехода в родительский по отношению к текущему каталог (при условии, что командная строка пуста). По умолчанию опция отключена.Расширенная команда chown. Если эта опция включена, то при обращении к командам chmod или chown вместо них будет вызываться Расширенная команда chown.Смена каталога по ссылкам. Установка этой опции приводит к тому, что Midnight Commander будет следовать логической цепочке подкаталогов при выполнении команд смены каталога как в панели, так и по команде cd. Так же ведет себя по умолчанию bash. Если же опция не включена, Midnight Commander будет при выполнении команды cd следовать реальной структуре каталогов, так что если вы вошли в текущий каталог по ссылке на него, то по команде cd .. вы окажетесь в его родительском каталоге, а не в той директории, где расположена ссылка.Безопасное удаление. Если эта опция включена, непреднамеренно удалить файл будет сложнее. В диалоговом окне подтверждения удаления предлагаемая по умолчанию кнопка изменяется с "Да" на "Нет" и операция удаления непустого каталога должна будет подтверждаться путем выбора кнопки "Да". По умолчанию эта опция отключена.

Диалоговое окно Внешний вид дает вам возможность изменить некоторые параметры отображения главного окна программы Midnight Commander на экране монитора (рис. 6.8).


Рис. 6.8.  Настройки внешнего вида программы



Диалоговое окно Внешний вид дает вам возможность изменить некоторые параметры отображения главного окна программы Midnight Commander на экране монитора (рис. 6.8).


Рис. 6.8.  Настройки внешнего вида программы

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

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

По умолчанию вся информация отображаются одним цветом, но вы можете сделать так, что права доступа и типы файлов были выделены другими цветами. Если включено выделение цветом прав доступа, поля perm и mode в форматах вывода, показывающие права пользователя, запустившего программу Midnight Commander, выделены цветом, определенным ключевым словом selected в секции [Colors] инициализационного файла ~/.mc/ini. Если включено выделение цветом типов файлов, то разными цветами выделяются каталоги, дампы памяти (файлы core), исполняемые файлы и т. д.

Если включена опция Мини-статус, в нижней части каждой панели выводится строка информации о выделенном подсветкой файле или каталоге каждой панели.

В диалоговом окне Биты символов... (рис. 6.9) вы указываете, в каком формате Ваш терминал будет обрабатывать (вводить и отображать на дисплее) информацию, представленную байтами (например, записанную в файле).


Рис. 6.9.  Настройка вывода

Если терминал поддерживает только 7-битный вывод, то нужно выбрать установку 7 бит. Выбрав "ISO-8859-1" вы получите все символы из таблицы ISO-8859-1, а выбор установки Полный 8-битный вывод имеет смысл на тех терминалах, которые могут отображать все 8-битовые символы. Чтобы при просмотре или редактировании файлов в Midnight Commander видеть на экране кириллицу, установите опции Полный 8-битный вывод и Полный 8-битный ввод (как на рис. 6. 9) и нажмите экранную кнопку Дальше.

Установка опции Полный 8-битный вывод позволяет просматривать на экране файлы, набранные в кодировке KOI8-R. Если вам необходимо работать и с другими кодировками (например, cp1251), то имейте в виду, что Валерий Студенников написал чудесную заплату (patch), которая позволяет выбирать кодовые страницы при просмотре и редактировании файлов в Midnight Commander (см. http://www.linux.zp.ua:8100/mc/ или http://www.sama.ru/~despaire/mc/my-patches.html). Только вам придется самому скомпилировать версию mc с этой возможностью. Однако это не так уж сложно (см. лекцию 10).

Используя команду меню Подтверждения, вы можете сделать так, чтобы перед выполнением операций удаления, перезаписи и запуска файла на выполнение, а также перед выходом из программы mc, выдавался дополнительный запрос на подтверждение (либо отменить такие запросы, что несколько рискованно).

Команда Распознавание клавиш: (Learn keys:) вызывает диалоговое окно, в котором вы можете протестировать работу некоторых клавиш (<F1> - <F20>, <Home>, <End>), которые работают не на всех типах терминалов. В диалоговом окне появляется таблица с названиями клавиш, которые подлежат тестированию. Вы можете перемещать подсветку по названиям, используя клавишу <Tab> или клавиши, применяемые в редакторе vi (<h> - влево, <j> - вниз, <k> -вверх, <l>- вправо). Если один раз нажать на клавиши со стрелками, после чего возле их названий в таблице появится пометка OK, то их тоже можно будет использовать для управления перемещением.

Для тестирования работы клавиш нужно нажать каждую клавишу из перечисленных в таблице. Если она работает нормально, возле ее названия в таблице появится пометка OK. После появления такой пометки клавиша начинает работать в ее обычном режиме. Например, первое нажатие на клавишу <F1> приводит только к появлению пометки OK (если клавиша работает нормально), а при следующих нажатиях будет вызываться окно подсказки. То же самое относится к клавишам стрелок. Клавиша <Tab> работает всегда. Если какая-то клавиша не работает, то после нажатия на нее пометка OK не появится. В таком случае можно связать ту реакцию системы, которая должна была последовать за нажатием неработающей (отсутствующей) клавиши, с нажатием другой клавиши или комбинации клавиш. Для этого надо переместить подсветку на название неработающей клавиши (используя мышь или клавишу <Tab>) и нажать <Enter> или клавишу пробела. Должно появиться окно красного цвета, в котором вас просят нажать клавишу, которая будет использоваться вместо неработающей. Для отмены операции нажмите <Esc> и дождитесь, пока красное окно исчезнет. Либо выберите и нажмите ту комбинацию клавиш, которая будет служить заменой для неработающей клавиши (и тоже дождитесь закрытия окна). Когда закончите тестирование и настройку всех клавиш, вы можете сохранить эти настройки в секции [terminal:TERM] Вашего файла ~/.mc/ini (где TERM - название используемого терминала) либо отказаться от запоминания изменений. Если все клавиши работают нормально, то сохранение, конечно, не требуется.

Команда Виртуальные ФС вызывает диалоговое окно, в котором вы можете задать значения некоторых параметров, связанных с использованием виртуальных файловых систем.

Команда Сохранить настройки обеспечивает сохранение выбранных значений параметров в ini-файле программы.

Я надеюсь, что приведенный в этом разделе материал позволит вам начать работать с программой Midnight Commander. Но возможности этой программы гораздо шире, чем это описано в настоящем разделе. В лекции 12 вы еще прочитаете о встроенном редакторе CoolEdit программы Midnight Commander. Кроме того, можно воспользоваться встроенной подсказкой, вызываемой по клавише <F1>. Перевод файла подсказки на русский язык (в виде bzip2-архива) вы можете найти на сайте http://linux-ve.chat.ru. Разархивируйте его, поместите в каталог /usr/lib/mc, заменив расположенный там файл mc.hlp, и вы будете при нажатии клавиши <F1> получать подсказку на русском языке.

  1)

  (Замечание прислано М.Зотовым) Это можно сделать при копировании любого количества файлов, если копирование производится в соответствии с каким-либо шаблоном.

© 2003-2007 INTUIT.ru. Все права защищены.

Поддержка мыши


Программа Midnight Commander обеспечивает поддержку мыши. Это свойство реализуется, если запущен драйвер мыши gpm, независимо от того, работаете ли вы на консоли Linux или программа Midnight Commander запущена через терминал xterm (даже если вы используете соединение с удаленной машиной из xterm через telnet, rlogin или ssh).

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

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

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

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

Если Commander запущен с поддержкой мыши, вы можете производить копирование и вставку блоков текста, если будете удерживать клавишу <Shift>. Для этого нужно нажать клавишу <Shift> и, удерживая ее нажатой, выделить мышью нужный кусок текста, затем отпустить <Shift>, перенести курсор в нужное место, снова нажать <Shift> и щелнуть правой кнопкой мыши. Отметим, что это свойство не работает в окне эмулятора терминала.



Получение помощи


При работе с программой Midnight Commander практически в любой момент можно обратиться к интерактивной подсказке, вызов которой осуществляется нажатием клавиши <F1>. Подсказка организована как гипертекст, т. е. в ее тексте встречаются гипертекстовые ссылки на другие ее разделы. Такие ссылки выделены голубым фоном.

Для перемещения в окне просмотра подсказки вы можете использовать клавиши перемещения курсора (стрелки) или мышь. Кроме общих комбинаций управления перемещением, приведенных в табл. 6.1, программа просмотра помощи воспринимает также комбинации, используемые в подпрограмме просмотра файлов:

Таблица 6.2. Управление перемещением при просмотре файлов

КлавишаВыполняемое действие
<B> или <Ctrl>+<B> или <Ctrl>+<H> или <Backspace> или <Delete>Перемещение на одну страницу назад
<Пробел>Перемещение на одну страницу вперед
<U> ( <D> )Перемещение на половину страницы назад (вперед)
<G> (<Shift>+<G>)Перемещение к началу (к концу)

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

Таблица 6.3. Управление перемещением при просмотре подсказки

КлавишаВыполняемое действие
<Tab>Переход на следующую ссылку
<Alt>+<Tab>Переход на предыдущую ссылку
<Стрелка вниз>Переход на следующую ссылку или смещение текста на одну строку вверх
<Стрелка вверх>Переход на следующую ссылку или смещение текста на одну строку вниз
<Стрелка вправо> или <Enter>Переход по текущей ссылке
<Стрелка влево> или <L>Возврат к ранее просмотренным разделам подсказки
<F1>Помощь по использованию самой подсказки
<N>Переход к следующему разделу помощи
<P>Переход к предыдущему разделу помощи
<C>Переход к оглавлению подсказки
<F10>, <Esc>Выход из окна просмотра подсказки

Вы можете использовать клавишу пробела для перехода к следующей странице подсказки и клавишу <B> для перехода к предыдущей странице. Программа запоминает последовательность переходов по ссылкам и позволяет вернуться к ранее просмотренным разделам, воспользовавшись клавишей <L>.

Если включена поддержка мыши, то при просмотре подсказки можно пользоваться мышью. По щелчку левой клавиши мыши происходит переход по ссылке или перемещение по тексту подсказки. Щелчок правой кнопкой мыши используется для перехода к ранее просмотренным разделам.



Сообщения MC при выполнении операций копирования/перемещения файлов


Когда вы выполняете операции копирования, перемещения или удаления файлов, Midnight Commander отображает на экране диалоговое окно, в котором показано, какой(ие) файл(ы) в данный момент обрабатывается и как идет процесс обработки. Для отображения процесса обработки на экран выводится до трех диаграмм-полосок (progress bars). Первая (file bar) показывает, какая часть текущего файла обработана (например, скопирована). Вторая (count bar) показывает какая доля помеченных файлов обработано на текущий момент. Третья (bytes bar) показывает долю выполненных работ в процентах от суммарного объема (в байтах) помеченных файлов. Если отключена опция Детали операций (см. команду меню Настройки/Конфигурация), две последних диаграммы не отображаются.

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

В процессе выполнения файловых операций вы можете увидеть окна еще трех видов.

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

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

Ниже выведены два вопроса. На первый вопрос ("Переписать этот файл?") предлагается три варианта ответа:

согласиться (кнопка Да);отказаться, т. е. пропустить перезапись текущего файла (кнопка Нет);дописать содержимое файла-источника в конец файла-приемника (кнопка Дописать в Конец).


Ответ на второй вопрос ("Переписать все файлы?") позволяет принять одно из 4 возможных решений по всем выбранным для обработки файлам (чтобы окно запроса не появлялось каждый раз):

Все - перезапишутся без дополнительных вопросов все выбранные файлы;Устаревшие - перезапишутся (затрутся) только файлы, которые созданы раньше файла-источника;Ни одного - не перезаписывать файлы (но если не существует файла-приемника, то копирование источника будет произведено);Различающиеся по длине.

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

Окно запроса на рекурсивное удаление появляется в том случае, когда вы пытаетесь удалить непустой каталог. По кнопке Да каталог будет удален вместе со всеми файлами, Нет означает отказ от удаления каталога, Все надо выбирать, если вы отметили группу подкаталогов для удаления и уверены в своем выборе, Ни одного -чтобы пропустить все непустые каталоги из числа помеченных, Прервать означает отказ от выполнения операции удаления. Выбирайте Да или Все только в том случае, когда вы действительно уверены, что хотите удалить каталог со всеми вложенными подкаталогами.

Если вы пометили для обработки группу файлов, то после выполнения операции будет снята отметка только с тех файлов, которые успешно обработаны. Пропущенные файлы останутся помеченными.


Управление панелями


Панели программы Midnight Commander чаще всего отображают содержимое каталогов файловой системы (поэтому называются иногда панелями каталогов). Однако на панель может быть выведена и некоторая другая информация. В настоящем разделе будет рассказано, как изменить вид панели или способ представления информации на панели.



Установка программы Midnight Commander


Хотя для управления файловой системой и вообще для работы с файлами можно использовать такие команды операционной системы, как pwd, ls, cd, mv, mkdir, rmdir, cp, rm, cat, more и т. д., гораздо удобнее делать большую часть работы по обслуживанию файловой системы с помощью программы Midnight Commander, которая наглядно представляет все выполняемые действия, облегчая тем самым выполнение указанных операций.

Midnight Commander (или просто mc) - это программа, которая позволяет просмотреть структуру каталогов и выполнить основные операции по управлению файловой системой. Другими словами, это файловый менеджер. Если вы имеете опыт работы с Norton Commander (nc) в MS-DOS или с FAR в Windows, то вы легко сможете работать и с mc, поскольку даже основные комбинации "горячих клавиш" у них совпадают. В этом случае для того, чтобы работать с Midnight Commander, вам достаточно бегло просмотреть приводимый ниже материал. Для тех же, кто не знаком с nc или FAR (да есть ли такие?), рекомендую внимательно проработать этот раздел, потому что Midnight Commander существенно облегчает работу с операционной системой.

Примечание

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

Примечание

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

В большинстве дистрибутивов программа Midnight Commander не устанавливается автоматически при инсталляции системы. Но соответствующий rpm-пакет, как правило, имеется на дистрибутивном диске, и установка Midnight Commander из rpm-пакета проходит без каких-либо сложностей (о том, как произвести установку ПО из rpm-пакета, см. лекцию 10). А, поскольку наличие этой программы существенно облегчит Вашу дальнейшую жизнь, я настоятельно рекомендую вам установить ее сразу же, как только вы произвели установку ОС.



Внешний вид экрана Midnight Commander


Для того, чтобы запустить Midnight Commander, надо набрать в командной строке оболочки mc и нажать <Enter>. Если программа не запустилась, надо найти, где расположен исполняемый файл с именем mc, воспользовавшись командой find / name mc, после чего указать в командной строке полный путь, например, у меня это /usr/bin/mc. После запуска вы увидите голубой экран, очень напоминающий экран программы Norton Commander для MS-DOS или программы FAR Е. Рошаля, которая широко используется в DOS-окне под Windows.


увеличить изображение
Рис. 6.1.  Внешний вид экрана при работе с Midnight Commander

Почти все пространство экрана при работе с Midnight Commander занято двумя "панелями", отображающими списки файлов двух каталогов. Над панелями расположена строка меню, причем к выбору команд в этом меню можно переключиться по клавише <F9> или с помощью мыши (если сразу после запуска mc вы не видите строки меню, не огорчайтесь - видна или нет строка меню, определяется настройками программы).

Самая нижняя строка представляет собой ряд экранных кнопок, каждая из которых ассоциирована с одной из функциональных клавиш <F1> - <F10>. Можно считать эту строку подсказкой по использованию функциональных клавиш, а можно и непосредственно запускать соответствующие команды, щелкая мышкой по экранной кнопке. Отображение строки с экранными кнопками можно отключить, если вы хотите сэкономить пространство экрана (об этом будет рассказано позже, когда будем говорить о настройках программы). Такая экономия оказывается оправданной по двум причинам. Во-первых, вы достаточно быстро запомните назначение этих 10 клавиш, и подсказка вам становится не нужна (а мышкой по этим клавишам щелкать не всегда удобно). Во вторых, если даже вы забыли, какая именно клавиша вам нужна для выполнения необходимого в данный момент действия, вы всегда можете воспользоваться меню Файл главного меню программы (только помните, что выход в главное меню осуществляется по клавише <F9>). Через меню Файл обеспечивается возможность выполнения любой операции из числа ассоциированных с функциональными клавишами кроме <F1> и <F9>.

Вторая снизу строка на экране - это командная строка программы Midnight Commander (точнее - командная строка текущей оболочки shell), где можно ввести и выполнить любую команду системы. Выше нее (но под панелями) может отображаться поле "полезных советов" (hint4s), которое можно убрать, соответствующим образом отрегулировав настройки программы.

Каждая панель состоит из заголовка, списка файлов какого-либо каталога и строки мини-статуса (последняя может быть не видна, это тоже задается настройками программы). В заголовке панели указан полный путь к каталогу, содержимое которого отображается в панели, а также три экранных кнопки - "<", "v" и ">", которые используются для управления программой с помощью мыши (эти кнопки не работают, если вы запустили mc в эмуляторе терминала). В строке "мини-статуса" отображаются некоторые данные о том файле или каталоге, на который в данный момент указывает подсветка (например, размер файла и права доступа к нему).

Одна из панелей является текущей (активной), о чем свидетельствует подсветка имени каталога в заголовке панели и подсветка одной из ее строк. Соответственно, в той оболочке, из которой была запущена программа Midnight Commander, текущим является каталог, отображаемый в активной панели. В этом каталоге и выполняются почти все операции. Операции типа копирования (<F5>) или переноса файла (<F6>) используют каталог, отображаемый на второй панели, в качестве целевого каталога (в который осуществляется копирование или перенос).

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

Таблица 6.1. Общие клавиши управления перемещением

КлавишаВыполняемое действие
<Стрелка вверх> или <Ctrl>+<P>Перемещение на одну строку назад или вверх
<Стрелка вниз> или <Ctrl>+<N>Перемещение на одну строку вперед
<PageUp> или <Alt>+<V>Перемещение на одну страницу назад
<Page Down> или <Ctrl>+<V>Перемещение на одну страницу вперед
<Home>Перемещение к началу
<End>Перемещение к концу



Графическая среда KDE


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

Однако имеет смысл вначале просмотреть возможности одной из разработанных в последние годы интегрированных графических сред. В английской терминологии часто используют сокращение GUI - Grafical User Interface, т. е. графический интерфейс пользователя. Будем его использовать в качестве сокращения, причем без перевода, именно как GUI. GUI представляет собой уже подобранную и проверенную совокупность программ для работы в графическом режиме, включающую в себя и менеджер окон и набор других программ, обладающих единообразным интерфейсом. Пожалуй, можно сказать, что именно единообразие интерфейса является ключевым моментом, определяющим преимущества использования GUI вместо создания собственной среды.

Существует уже несколько графических сред, как свободно распространяемых, так и коммерческих. Из свободно распространяемых наибольшую известность приобрели KDE и GNOME. Мне лично больше нравится KDE. Возможно, это определяется тем обстоятельством, что именно эта среда была первой, с которой я начал работать, и притом вполне успешно. В то время как первая встреча с GNOME была несколько неудачной. Говорят, что в последнее время коллектив разработчиков GNOME сделал большой шаг вперед, но я пока остаюсь приверженцем KDE.

В лекции 15 я попытаюсь ближе познакомить вас с графической средой KDE. Здесь же я хочу рассказать только о том, как добиться, чтобы оболочка KDE запускалась у вас по команде startx. После инсталляции некоторых дистрибутивов (например, Black Cat Linux версии 6.02) по этой команде по умолчанию запускается GNOME. Справиться с этой проблемой очень просто. Если вы внимательно прочитали предыдущий подраздел, то знаете, что startx просто вызывает команду xinit с нужными параметрами, одним из которых является файл /etc/X11/xinit/xinitrc (если подобного файла нет в вашем домашнем каталоге). А в файле /etc/X11/xinit/xinitrc производится вызов либо файла Xclients из домашнего каталога пользователя, либо общесистемного файла /etc/X11/xinit/Xclients:

if [ -f $HOME/.Xclients ]; then exec $HOME/.Xclients elif [ -f /etc/X11/xinit/Xclients ]; then exec /etc/X11/xinit/Xclients

Просмотрев, в свою очередь, файл /etc/X11/xinit/Xclients, вы увидите, что выбор графической среды определяется тем, что прописано в файле /etc/sysconfig/desktop.

Если при установке такой файл не был создан, создайте его сами и запишите в него одно слово: KDE (создать такой файл можно командой cat > /etc/sysconfig/desktop). После перезапуска графической оболочки вы получите желаемый результат: будет запущена графическая оболочка KDE. А уж о том, как настроить ее, читайте в лекции 15 или на русской версии сайта KDE (http://www.kde.ru).



Использование менеджера дисплея


Систему X Window можно запускать автоматически при включении компьютера, используя программу, которая называется менеджером дисплея (X Display Manager - xdm). В этом случае пользователь сразу видит привлекательную графическую среду, и нет необходимости специально запускать графический интерфейс командой startx. При этом сохраняется возможность переключиться в текстовую консоль, набрав <Ctrl>+<Alt>+<F#>, а потом вернуться обратно в графическую среду, используя комбинацию <Ctrl>+<Alt>+<F7>.

Для того, чтобы запускать xdm при загрузке ОС, надо отредактировать файл /etc/inittab. В этом файле имеется строка вида

id:3:initdefault:

определяющая уровень запуска по умолчанию (об уровнях запуска можно почитать в лекции 8). Замените эту строку строкой следующего вида:

id:5:initdefault:

Такое изменение заставляет Linux при запуске переходить на 5-й уровень. А в конце того же файла /etc/inittab обычно прописана строка

x:5:respawn:/usr/bin/X11/xdm -nodaemon,

которая означает, что на этом уровне запуска должен запускаться менеджер дисплея xdm.

Если вы решили запускать xdm при старте и хотите использовать, например, глубину цвета 24 бита на пиксел вместо применяемой по умолчанию 8 bpp (и ваша видеокарта и монитор поддерживают ее), вы должны изменить файл /etc/X11/xdm/Xservers (в нем всего одна строка) следующим образом:

:0 local /usr/X11R6/bin/X -bpp 24

Если вы установили KDE, то вместо xdm, вероятно, запускается kdm. После установки Black Cat Linux, например, строка в /etc/inittab, определяющая менеджер дисплея, имеет вид:

x:5:respawn:/etc/X11/prefdm -nodaemon, а /etc/X11/prefdm есть ссылка на /usr/bin/kdm

Очень важное примечание:

Имейте в виду, что команда respawn в только что приведенной строке означает, что при попытках перезапуска системы будет происходить перезапуск менеджера дисплея. В частности, нажатие "магической" комбинации <Ctrl>+<Alt>+<Del> будет повторно запускать систему в той же конфигурации. Поэтому если вы после установки xdm будете как-то менять системные настройки и в результате ошибочных действий нарушите хрупкое равновесие системы X Window, вы попадете в очень затруднительную ситуацию. У меня, например, после одного из опытов с редактированием файла /etc/X11/XF86Config экран после загрузки стал черным и дальше компьютер ни на что не реагировал, кроме <Ctrl>+<Alt>+<Del>, а по этой комбинации происходила просто перезагрузка и выход в ту же ситуацию. На этот случай надо помнить, как перевести систему в однопользовательский режим, а прочитать об этом вы можете в следующей лекции (точнее, в лекции 8).



Как работает видеосистема компьютера


Вы должны понимать, что этот раздел не является руководством для специалистов по созданию видеосистем. Изложение работы видеосистемы здесь дается очень поверхностное, только с той целью, чтобы читатель понимал значение параметров, которые ему придется как-то изменять при настройке графического режима. В основу этого раздела положена статья И. Николаева "FAQ по настройке монитора в Xfree" (http://knot.pu.ru/faq/xfaq.html).

Видеосистема компьютера состоит из видеоадаптера и монитора (когда мы будем говорить о мониторах, будут иметься в виду мониторы, построенные на электронно-лучевых трубках).

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

Функцию управления монитором осуществляет видеоадаптер. Видеоадаптер передает в монитор три сигнала: видео сигнал (RGB), строчную синхронизацию (HS), и кадровую синхронизацию (VS). По сигналу горизонтальной (строчной) синхронизации происходит возврат луча с конца каждой строки к началу следующей, а сигнал вертикальной (кадровой) синхронизации определяет момент возврата луча из правого нижнего угла экрана в верхний левый. Частоты генерации этих двух сигналов (измеряемые числом импульсов в секунду) необходимо знать для правильной установки и настройки X сервера. Значения частот горизонтальной и вертикальной синхронизации должны быть указаны в документации к вашему монитору. Частота вертикальной синхронизации (обозначим ее VSF) обычно указывается в герцах (Hz) и находится в пределах 50-180 Гц. Частота горизонтальной синхронизации (HSF) задается в килогерцах (KHz) и принимает значения в диапазоне от 31 до 135 КГц.

Современные мониторы обычно являются многочастотными, т. е. допускают выбор частот вертикальной и горизонтальной синхронизации из определенного диапазона допустимых значений. Некоторые мониторы (особенно дешевые) могут иметь несколько фиксированных значений допустимых частот. Целесообразно выбирать максимально возможные значения частот синхронизации из числа допустимых для получения наилучшего разрешения. Однако будьте осторожны: установка значений, превышающих допустимые, может повредить монитор!

Есть еще одна важная частота - число точек, которые могут быть отображены на экране за одну секунду. Электронный луч перемещается по экрану с конечной скоростью (которая ограничена не скоростью перемещения самого луча, а параметрами микросхем видеоадаптера). В английской документации эта частота называется "the card's dot clock". Будем называть эту частоту тактовой частотой развертки, и обозначать как DCF (dot clock frequency).

Следующий существенный параметр - это частота обновления экрана (которую будем обозначать как SRR - screen refresh rate). Чем выше эта частота, тем меньше устают глаза при работе с компьютером, потому что уменьшается мерцание экрана. Не рекомендуется выбирать частоту обновления экрана меньше 60 Гц - частоты мерцания флуоресцентных ламп. Стандарт VESA рекомендует выбирать для нее значение не менее 72 Гц.

Но задать очень большое значение частоты обновления экрана невозможно, потому что она не может быть больше, чем тактовая частота развертки (DCF), поделенная на произведение числа точек в строке и числа строк на экране. На самом деле частота обновления экрана еще меньше, потому что на перемещение электронного луча от конца строки в начало следующей и из левого нижнего угла экрана в правый верхний требуется некоторое время, т. е. дополнительные такты работы тактового генератора видеоадаптера. Кроме того, для создания четких границ изображения на экране, электронный луч обычно перемещается на несколько точек левее и правее видимой части изображения, а также пробегает одну-две строки выше и ниже изображения (это темные полосы, окружающие изображение на экране). Поэтому фактически число необходимых для вывода изображения точек в строке (обозначим его HFL - Horizontal Frame Length - размер фрейма по горизонтали) и число необходимых строк на экране (Vertical Frame Length - VFL) больше, чем размеры видимого изображения. Точнее

HFL = (число невидимых точек слева) + (число видимых точек в строке) + (число невидимых точек справа) + (число тактов, необходимых для перевода луча к началу новой строки)


Аналогичное соотношение действует для размера фрейма по вертикали - VFL и поэтому имеет место формула:

SRR = DCF / (HFL * VFL)

Именно эта частота и является частотой обновления экрана (SRR = VSF) и должна лежать в границах, заданных для частоты вертикальной синхронизации вашего монитора. Таким образом, частота вертикальной синхронизации монитора и тактовая частота видеоадаптера накладывают ограничения на предельное разрешение изображения на экране.

Еще одно ограничение накладывается обьемом памяти на плате видеоадаптера. В цветном мониторе каждая точка высвечивается тремя электронными лучами, которые одновременно направлены в данную точку. Цвет каждой отдельной точки на экране формируется путем смешивания трех основных цветов: красного (R), зеленого(G) и голубого(B). Интенсивность каждого из этих трех цветов определяется уровнем сигнала в соответствующем луче. Изображение для вывода на экран формируется в видеопамяти, которая физически расположена на плате видеоадаптера, но входит в общее адресное пространство оперативной памяти компьютера. Изображение хранится в памяти в цифровом виде, и преобразование его в аналоговый сигнал RGB является одной из основных задач видеоадаптера, для чего на плате видеоадаптера обычно ставится цифро-аналоговый преобразователь - ЦАП.

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

Формула, определяющая ограничения на разрешение экрана и количество воспроизводимых цветов, очень проста: (объем видеопамяти в байтах) должен быть не меньше, чем (число видимых точек в строке) * (число видимых строк на экране) * (число байт на точку).

Например, если вы хотите выбрать разрешение экрана 1024 * 768 и иметь 16 миллионов цветов для каждой точки (4 байта на точку), то вам надо иметь 1024 * 768 * 4 = 3145728 байт памяти. Если же у вас всего 2 Мбайт памяти, то придется либо выбрать меньшее разрешение, либо меньшее количество цветов. Вы легко можете сами составить таблицу соответствий между различными комбинациями значений видеопараметров и объемом необходимой памяти.

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


Конфигурирование X-сервера


Рассмотрим ситуацию, когда после инсталляции Linux вы либо не можете выйти в графический режим, либо недовольны тем, как выводится изображение в графическом режиме. Если вы при инсталляции задали автоматический выход в графический режим, то вам может показаться, что система вообще отказывается загружаться. Именно поэтому я рекомендовал вам при инсталляции отказаться от автоматической загрузки в графику. Если вы все же попали в такую ситуацию, то попробуйте выйти в однопользовательский режим. О том, как это сделать, рассказано в лекции 8.

Итак, в графический режим вы выйти не можете, но текстовый режим вам доступен, и, значит, можно воспользоваться некоторыми программами или командами ОС Linux для настройки графического режима. Будем предполагать, что пакет XFree86 у вас установлен, и все файлы, упоминаемые ниже, на диске имеются. Если это не так, то сначала установите пакет XFree86, (о том, как устанавливаются программные пакеты, рассказано в лекции 10). Если эти предварительные условия выполнены, я надеюсь, что приводимые ниже инструкции по настройке графического режима позволят вам осуществить эту настройку.

Предупреждение

Согласно документации к Xfree86 для некоторых типов мониторов, особенно старых моделей, задание недопустимых значений частот вертикальной и горизонтальной развертки может повредить монитор. Поэтому автор не может гарантировать, что, следуя приведенным ниже советам, вы получите желаемый результат, и не повредите вашему компьютеру! Все, что вы будете делать, вы будете делать на свой страх и риск!



Настройка /etc/X11/XF86Config


Теперь, когда вы знаете, как устроен файл XF86Config, определяющий настройки X сервера, и где какую настойку задавать, давайте подробно разберем, как его (X сервер) настроить, редактируя файл /etc/X11/XF86Config. Точнее, нашей целью пока что будет только получение на экране серого прямоугольника с крестиком-курсором посередине, а процедура запуска графической среды в целом будет рассматриваться позже.

Как было сказано выше, создать первоначальную версию файла /etc/X11/XF86Config можно с помощью программы Xconfigurator в 3 й версии XFree86 или командой:

[root]# /usr/X11R6/bin/XFree86 -configure

в 4-й версии XFree86. В последнем случае создается конфигурационный файл /root/XF86Config.new. Его можно опробовать с помощью команды

[root]# XFree86 -xf86config /root/XF86Config.new

явно указывая X-серверу, какой конфигурационный файл использовать. Но проще сразу перенести его в каталог /etc/X11 под именем XF86Config-4 и работать стандартным образом.

Итак, вы имеете какой-то вариант файла /etc/X11/XF86Config-4. Попробуйте просто запустить графический режим командой X (еще раз напомню, что это просто ссылка на сервер и если команда не работает, то ссылка должна быть создана, либо нужно вместо X указывать имя используемого сервера, может быть, даже с указанием полного пути). Если вам удалось запустить X-сервер, и вы увидели курсор посредине экрана, то, значит, вы можете пропустить оставшийся текст данного подраздела и перейти к следующему разделу.

Если вы увидели черный экран или какие-то мелькающие полоски, то вернитесь в текстовый режим, нажав комбинацию <Ctrl>+<Alt>+<Backspace> (эта комбинация может выручить вас в случае многих затруднений с графическим режимом, так что рекомендую запомнить, что она позволяет завершить работу X-сервера, а, значит, и графического режима в целом). Однако не слишком торопитесь воспользоваться этой магической комбинацией, поскольку переход в графический режим требует определенного времени; я вначале несколько раз прерывал загрузку комбинацией <Ctrl>+<Alt>+<Backspace> и не мог понять, почему у меня графика не запускается, хотя вся причина заключалась в моей поспешности.

Однако, поскольку существует опасность повредить монитор неправильным заданием параметров, лучше не заниматься экcперементами с непредсказуемыми последствиями. Целесообразней вначале протестировать тот вариант файла, который был создан, и посмотреть, нет ли в нём явных ошибок. Для этого нужно воспользоваться командой

[root]# X -probeonly > probe.log 2>&1


Эта команда запускает X-сервер в тестовом режиме и выдает протокол в файл probe.log. После запуска этой команды на экране что-то помелькает, и вновь появится командная строка оболочки, а в текущем каталоге появится файл probe.log.

В этом файле много очень полезной информации, которую надо использовать при настройке X Window (отметим, что в файле протокола /var/log/XFree86.0.log содержится еще больше информации, но нам достаточно и того, что есть в probe.log). В первых строках файла probe.log содержатся сообщения о версии XFree86 и версии ядра Linux. Затем идет сообщение о том, куда записывается протокол работы (обычно это /var/log/XFree86.0.log), и какой конфигурационный файл используется (Помните, выше было сказано, что программа ищет этот файл в нескольких местах? Так что не лишне будет узнать, какой именно файл используется.).

(==) Log file: "/var/log/XFree86.0.log", Time: Mon Feb 12 17:20:25 2001 (==) Using config file: "/etc/X11/XF86Config-4"

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

(--) - означает, что соответствующие значения получены путем тестирования;(**) - означает, что установки взяты из конфигурационного файла (в нашем случае - из /etc/X11/XF86Config-4);(++) - означает, что установки взяты из командной строки запуска;(==) - означает, что используются установки по умолчанию;(II) - за таким значком следует информационное сообщение;(WW) - за таким значком следует предупреждение;(EE) - за таким значком следует сообщение об ошибке.

Ошибки надо, естественно, постараться исправить путем соответствующей модификации файла /etc/X11/XF86Config-4. Но мы пока продолжим рассмотрение файла probe.log, в котором далее идет несколько чисто информационных строк (отметим, что в них отображена взаимосвязь секций конфигурационного файла):

(**) |-->Screen "Screen0" (0) (**) | |-->Monitor "Monitor0" (**) | |-->Device "Card0" (**) |-->Input Device "Mouse0" (**) |-->Input Device "Keyboard0" (**) FontPath set to "unix/:-1" (**) RgbPath set to "/usr/X11R6/lib/X11/rgb" (**) ModulePath set to "/usr/X11R6/lib/modules" (--) using VT number 7



и сообщения о том, какие модули загружаются, вроде следующего:

(II) Loading /usr/X11R6/lib/modules/fonts/libbitmap.a (II) Module bitmap: vendor="The XFree86 Project" compiled for 4.0.2, module version = 1.0.0

После исправления тех ошибок, о которых сообщают строки, помеченные значком (EE), беремся за строки с предупреждениями. В частности, вы наверняка увидите строки следующего вида:

(WW) MGA(0): Monitor0: Using default hsync range of 28-33kHz (WW) MGA(0): Monitor0: using default vrefresh range of 43-72Hz

вслед за которыми последует множество указаний на отбраковку каких-то видеорежимов монитора:

(WW) MGA(0): Default mode "1856x1392" deleted (hsync out of range)

Строки эти являются сообщениями о тех режимах, которые X-сервер не в состоянии отображать. О важности правильного выбора частот вертикальной и горизонтальной синхронизации было уже сказано неоднократно. Тем не менее, здесь появляется повод вспомнить об этом снова. Проверьте правильность их задания еще раз.

Снова выполнив после этого команду

[root]# X -probeonly > probe.log 2>&1

и заглянув в файл probe.log, вы увидите, какие режимы для вас недоступны (обычно это режимы с высоким разрешением, типа 1600 * 1200).

Давайте теперь отыщем в файле probe.log две строки следующего вида (цифры у вас, конечно, могут быть другими):

(--) MGA(0): Virtual size is 640x480 (pitch 640) (**) MGA(0): Default mode "640x480": 25.2 MHz, 31.5 kHz, 60.0 Hz

а также строку вида (она находится где-то отдельно от двух предыдущих)

(**) MGA(0): Depth 24, (--) framebuffer bpp 24

В совокупности эти три строки указывают на то, что у вас (точнее, у меня) используется глубина цвета 24 и разрешение экрана "640 x 480" с частотой обновления картинки 60 Гц. Такие параметры совершенно неудовлетворительны, поэтому снова обращаемся к корректировке /etc/X11/XF86Config-4. Вначале надо задать нужную глубину цвета. Естественно, побольше. Предельно допустимое значение определяется объемом видеопамяти. О том, как его рассчитать, было сказано в предыдущем подразделе.



секции Screen. Чтобы изменить разрешение экрана, например, на значение 1024 ? 768, вставляем во все подсекции Display секции Screen строку

Modes "1024x768"

(разрешение выбираете по своему вкусу из стандартного ряда "640 x 350", "640 x 400", "640 x 480", "800 x 600", "1024 x 768", "1152 x 864", "1280 x 1024", "1600 x 1200" и т.д.). Можно ограничиться добавлением только одной такой строки в ту подсекцию Display, которая задана строкой DefaultDepth (или DefaultColorDepth). После этого снова выполняем команду

[root]# X -probeonly > probe.log 2>&1

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

Надо иметь в виду, что отсутствие указаний на ошибки еще не гарантирует успешный запуск графического режима. Если результатом этой команды снова будет черный экран, то выйдите из графического режима с помощью комбинации <Ctrl>+<Alt>+<Backspace> и снова внимательно проанализируйте вывод команды

[root]# X -probeonly > probe.log 2>&1

Если графический режим не запускается, попытайтесь задать меньшее разрешение или меньшую глубину цвета. Обычно таким образом удается добиться успешного запуска графического режима при желаемом разрешении "1024 x 768".

Но может быть и иначе. У меня, например, на одном из компьютеров никак не удавалось запустить графический режим с разрешением "1024 x 768", графическая оболочка нормально загружалась только при разрешении "800 x 600", а при более высоком - загрузка осуществлялась, но экран дрожал и трясся. С этой проблемой мне удалось справиться путем явного задания строки Modeline в секции Monitor и подбора указанных в ней значений параметров. Делал я это следующим образом. Вначале, не обращая внимания на мерцание и дрожание экрана, запустил графический режим и программу xvidtune (о ней будет рассказано ниже). С ее помощью (кнопка "Show") определил, что по умолчанию используется режим, имеющий следующие параметры:

# 1024x768 @ 85 Hz, 68.31 kHz hsync Modeline "1024x768" 94.5 1024 1072 1168 1376 768 769 772 808 +hsync



Я прописал эти две строки явным образом в секции Монитор и стал менять различные параметры строки Modeline. В конце концов, удалось определить, что причиной дрожания изображения являлась слишком высокая частота тактового генератора (DotClock) - 94.5 МГц. Уменьшение ее до 94 МГц привело к стабилизации изображения. Частота обновления экрана при этом снизилась до 84,55 Гц, но это, на мой взгляд, несущественно. Впрочем, при желании ее можно даже повысить, если еще поэкспериментировать с программой xvidtune. Я же этим ограничился, а окончательную корректировку изображения провел с помощью аппаратных средств монитора.

О программе xvidtune надо рассказать отдельно. Эта программа очень полезна для окончательного выбора оптимального видеорежима. Но запустить её можно только после того, как запустится графический режим. Выйдите в графический режим командой startx и запустите xvidtune в окне эмулятора терминала. Вы увидите вначале суровое предупреждение:


Рис. 7.2.  Первое сообщение программы xvidtune

в котором сообщается, что ни разработчик программы, ни XFree86 Project Inc. не несут никакой ответственности за последствия ее применения. И если вы не понимаете, что делаете, то лучше не беритесь! Говорят, что на старых типах мониторов неправильной установкой параметров можно добиться того, что ваш монитор начнет дымиться (за счет неправильной установки частот синхронизации, насколько я понимаю). Но я надеюсь, что вы будете достаточно осторожны и семь раз подумаете, прежде чем применить какое-то значение режима. Если так, то вперед!

Закрываем окно с предупреждением (кнопка OK) и видим основное окно программы xvidtune (рис. 7.3).


Рис. 7.3.  Основное окно программы xvidtune

Теперь вы можете начать настраивать изображение на мониторе. Если вы хотите сместить его вправо, то щелкните мышкой по кнопке Right (обратите внимание на изменение некоторых цифр в окне программы), а затем по кнопке Apply. Вы увидите, что изображение сдвинется вправо. Аналогично можно подвинуть его влево (кнопка Left), вверх (Up) и вниз (Down). Можно также увеличить размер изображения по горизонтали (Wider) или вертикали (Taller) и, наоборот, уменьшить (соответственно Narrower и Shorter).

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

Кнопка Auto является переключателем, т. е. в режиме Auto (изображение кнопки инвертируется, т. е. отображается белыми буквами на черном фоне) нажатие на кнопки Up/Down/Right/Left и Wider/Narrower/Shorter/Taller приводит к немедленному (без щелчка по кнопке Apply) изменению размера или положения изображения.

Кнопка Test временно переключает установки в указанные значения. Кнопка Show служит для того, чтобы вывести выбранные значения на стандартный вывод (практически - в окно эмулятора терминала, из которого была запущена программа). Строка выводится в формате "Modeline", т. е. в том виде, как она должна быть записана в файле XF86Config. Кнопка Next переключает X-сервер в следующий видеорежим, а кнопка Prev - в предыдущий видеорежим (как они заданы в строке "Modes").

После того, как вы подобрали оптимальные с вашей точки зрения значения параметров видеорежима, запишите эти значения на бумагу. Не забудьте записать и приведенные в правом нижнем углу значения частот вертикальной и горизонтальной синхронизации. Формально они не нужны, но обычно пишутся в комментарии к строке "Modeline". На всякий случай нажмите кнопку Show и завершите работу программы нажатием кнопки Quit. После этого осталось проверить, правильно ли вы записали значения и вписать новую строку "Modeline" в файл XF86Config.

Теперь еще обратите внимание на то, что как бы мы не изменяли положение изображения, остается неизменным значение Pixel Clock в правом нижнем углу окна программы xvidtune. Этот параметр не поддается изменению в рамках программы xvidtune. Но после того, как выбраны размеры и положение изображения на экране, можно и нужно рассчитать наилучшее значение этого параметра. Принцип расчета прост: берем максимально допустимое для вашего монитора значение частоты горизонтальной синхронизации и делим его на размер фрейма по горизонтали (это последнее число в группе HTimings), выданное программой xvidtune. Это предельно допустимое значение частоты DotClock, которое может быть задано в строке "Modeline". Для перестраховки я немного округляю это значение в сторону уменьшения, чтобы не превысить максимальное значение частоты горизонтальной синхронизации. На этом формирование строки "Modeline" можно считать завершенным.

Аналогично можно подобрать значения для других таких строк (для других разрешений), но, честно признаюсь, что мне эксперименты по изменению видеорежимов через некоторое время наскучили. Я выбрал для себя один режим работы дисплея и успокоился. Думаю, что так же будет и у вас. Но прежде, чем затвердить свой выбор, создайте по одной подсекции Display для каждого из возможных значений глубины цвета. В файле XF86Config имеется как минимум одна такая подсекция, соответствующая глубине цвета 8 бит. Таких подсекций в секции Screen может быть несколько, поэтому не изменяйте существующую, а скопируйте ее (можно несколько раз) и подкорректируйте новые экземпляры в соответствии со своими пожеланиями. А выбор той подсекции, которая будет использоваться, осуществляется заданием нужной глубины цвета в параметре DefaultColorDepht секции Screen, таким вот примерно образом: DefaultColorDepht 24. Пример того, как может выглядеть секция Screen в итоге, был уже приведен выше, когда описывалась структура файла XF86Config, так что здесь не будем приводить его повторно.

На этом рассказ о настройке X-сервера закончен и можно перейти к вопросу о настройке графического режима в целом и как можно на этот процесс повлиять.


Сбор необходимых данных


Для настройки вам потребуются некоторые данные, а именно:

названия фирм-производителей видеоадаптера и монитора (берутся из документации; если нет, можно обойтись и без них);тип набора микросхем, применяемых в видеоадаптере (по нему определяется тип X-сервера, который должен работать у вас);объем имеющейся видеопамяти;допустимые интервалы частот горизонтальной и вертикальной синхронизации для вашего монитора (берутся из документации на монитор; эти две частоты надо узнать обязательно).

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

Кое-какую информацию можно получить с помощью программы SuperProbe (её вывод можно перенаправить в файл, например, sprobe.txt):

[root]# SuperProbe > sprobe.txt

Заглянув в этот файл (воспользуйтесь клавишей <F3> в программе Midnight Commander), вы узнаете тип набора микросхем и обьем имеющейся у вас видеопамяти. У меня, например, SuperProbe выдала в одном случае

Chipset: S3 Trio64 (Port Probed) Memory: 1024 Kbytes RAMDAC: Generic 8-bit pseudo-color DAC (with 6-bit wide lookup tables (or in 6-bit mode))

в другом случае

Chipset: Trident 3DImage985 (PCI Probed) Memory: 4096 Kbytes RAMDAC: Trident Built-In 15/16/24-bit DAC (with 6-bit wide lookup tables (or in 6-bit mode))

Тип микросхем видеоадаптера необходимо знать в том случае, если у вас третья версия XFree86. Вообще говоря, программа инсталляции Linux автоматически определяет, какой сервер у вас должен стоять и инсталлирует его. Одновременно в каталоге /etc/X11/ формируется ссылка с именем X на этот сервер примерно такого вида:

@X -> /usr/X11R6/bin/XF86_SVGA (для 3 й версии XFree86) @X -> /usr/X11R6/bin/XFree86 (для 4 й версии XFree86)

Загляните в каталог /etc/X11 и если обнаружите, что файла-ссылки с именем X там нет, создайте такую ссылку командой

[root]# ln -s /usr/X11R6/bin/XFree86 X

(естественно, файл /usr/X11R6/bin/XFree86 должен существовать).



Структура файла /etc/X11/XF86Config


Конфигурация X-сервера определяется файлом /etc/X11/XF86Config (для 3 й версии XFree86) или /etc/X11/XF86Config-4 (для 4 й версии XFree86), поэтому самый правильный способ настройки X-сервера состоит в прямом редактировании этого файла.

Примечание

Если быть точным, то X-сервер при запуске ищет конфигурационный файл в нескольких местах, а именно:

/etc/X11/XF86Config-4/etc/XF86Config/etc/X11/XF86Config/usr/X11R6/etc/XF86Config<XRoot>/lib/X11/XF86Config

где <XRoot> означает каталог, в котором была установлена система XFree86 (обычно это /usr/X11R6).

Создавать файл XF86Config полностью с нуля не стоит. Если вы не отказались от установки X Window в процессе инсталляции системы (именно от установки, а не от автоматического запуска, не путайте!), то такой файл у вас уже есть. Если по каким-то причинам вы устанавливали XFree86 отдельно от установки Linux, то запустите одну из программ, которые позволяют такой файл сформировать. Когда у меня стояла 3-я версия XFree86, я пользовался для создания этого файла программой Xconfigurator. В 4 й версии для создания конфигурационного файла можно воспользоваться утилитами xf86config или xf86cfg, или же использовать опцию configure X-сервера. Для этого дайте такую команду:

[root]# /usr/X11R6/bin/XFree86 -configure

Эта команда молча отрабатывает, сообщая в конце, что создала новый конфигурационный файл /root/XF86Config.new. Ниже приводится файл /root/XF86Config.new, который сформировался у меня (в дальнейшем речь пойдет в основном о версии 4 XFree86, так что особых упоминаний об этом делать не будем.).

Section "ServerLayout" Identifier "XFree86 Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection

Section "Files" RgbPath "/usr/X11R6/lib/X11/rgb" ModulePath "/usr/X11R6/lib/modules" FontPath "/usr/X11R6/lib/X11/fonts/misc/" FontPath "/usr/X11R6/lib/X11/fonts/Speedo/" FontPath "/usr/X11R6/lib/X11/fonts/Type1/" FontPath "/usr/X11R6/lib/X11/fonts/CID/" FontPath "/usr/X11R6/lib/X11/fonts/75dpi/" FontPath "/usr/X11R6/lib/X11/fonts/100dpi/" EndSection


Section "Module" Load "extmod" Load "xie" Load "pex5" Load "glx" Load "dri" Load "GLcore" Load "dbe" Load "record" EndSection

Section "InputDevice" Identifier "Keyboard0" Driver "keyboard" EndSection

Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "PS/2" Option "Device" "/dev/mouse" EndSection

Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" EndSection

Section "Device" Identifier "Card0" Driver "trident" VendorName "Trident" BoardName "3DImage985" BusID "PCI:1:0:0" EndSection

Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" SubSection "Display" Depth 8 EndSubSection SubSection "Display" Depth 15 EndSubSection SubSection "Display" Depth 16 EndSubSection SubSection "Display" Depth 24 EndSubSection EndSection

Section "DRI" EndSection

Как видите, файл XF86Config состоит из нескольких секций, имеющих следующую структуру:

Section "Название_секции" Identifier "Name" SectionEntry ... EndSection



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

Секция ServerLayout имеет наивысший приоритет, т. е. именно с нее начинается анализ файла XF86Config при загрузке X-сервера. Эта секция определяет, какие устройства ввода/вывода будут использоваться в X-сессии. Устройства ввода - это клавиатура и мышь, которые задаются в секциях InputDevice (такие секции создаются отдельно для каждого устройства). Устройства вывода обычно состоят из нескольких независимых компонентов (графический адаптер и монитор), которые связываются воедино в секции Screen, на которую указывает ссылка в секции ServerLayout. Таким образом, секция ServerLayout должна содержать, как минимум, следующие строки:

Section "ServerLayout" Identifier "MainSection" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer"> InputDevice "Keyboard0" "CoreKeyboard"> EndSection

Секция Screen определяет используемые монитор и видеоадаптер и задает режимы работы экрана. Она может иметь примерно такой вид:

Section " Screen" Identifier "Screen0" Device "Trident 3DImage985 (generic)" Monitor "ViewSonic|ViewSonic G771" DefaultColorDepth 24 Subsection "Display" Depth 8 Modes "1024x768" "800x600" "640x400" ViewPort 0 0 EndSubsection Subsection "Display" Depth 16 Modes "1024x768" "800x600" "640x480" ViewPort 0 0 EndSubsection Subsection "Display" Depth 24 Modes "1024x768" "800x600" "640x480" ViewPort 0 0 EndSubsection Subsection "Display" Depth 32 Modes "1024x768" "800x600" "640x480" ViewPort 0 0 EndSubsection EndSection

Как видите, она содержит указания на используемый графический адаптер (задается в секции Device с идентификатором "Matrox Millenium G200") и монитор (задается в секции Monitor с идентификатором "Monitor0").

Cекция Screen может содержать несколько подсекций (Subsection) Display, по одной такой подсекции на каждую глубину цвета. В каждой такой подсекции вы должны прописать те режимы монитора, которые будете использовать. Режимы задаются в строке Modes. Они указываются путем перечисления их наименований, взятых из секции Monitor (в точности в том виде, как эти названия указаны после слова Modeline). В одной строке можно перечислить любое число таких имен режимов. Первый из указанных режимов будет запускаться по умолчанию, в остальные можно будет переключаться (циклически), нажимая комбинацию клавиш <Ctrl>+<Alt>+<+> или <Ctrl>+<Alt>+<-> (используются клавиши <+> и <-> на цифровой клавиатуре).

В этой подсекции указывается также размер виртуального экрана, который будет использоваться сервером. Соответствующая строка имеет вид "Virtual xdim ydim", где xdim и ydim - размерности виртуального экрана. Например, вы можете иметь дисплей с разрешением 800 * 600, а размер виртуального экрана задать равным 1024 * 768. Тогда в каждый момент времени вы будете видеть на дисплее только часть полного изображения. Надо, однако, учитывать, что видеопамять должна хранить изображение, равное по размеру виртуальному экрану, а также то, что нежелательно занимать всю память хранением виртуального экрана, поскольку в этом случае не остается резерва на кэширование, что может повлечь потерю 30-40% производительности сервера.

Секция Monitor обычно начинается тремя строками, в которых указывается производитель монитора и его модель, однако если у вас только одна секция Monitor, то эти строки вполне могут иметь вид:

Identifier "Unknown" VendorName "Unknown" ModelName "Unknown"



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

HorizSync 30-70 VertRefresh 50-180

Для мульти-частотных мониторов с фиксированными частотами:

HorizSync 31.5, 35.2 VertRefresh 60, 65

Для мульти-частотных мониторов с несколькими интервалами допустимых частот:

HorizSync 15-25, 30-50 VertRefresh 40-50, 80-100

Частоты горизонтальной синхронизации задаются в килогерцах, частоты вертикальной синхронизации (обновления экрана) - в герцах.



Внимание!

Обязательно проверьте, что здесь указаны значения, соответствующие характеристикам вашего монитора, приведенным в документации.
Секций Monitor в файле может быть несколько, они различаются уникальными идентификаторами (первая строка в секции). В 4-й версии XFree86 перечисление режимов монитора в этой секции является необязательным, поскольку X-сервер использует встроенный список стандартных VESA-режимов. Однако явное задание режима в секции Monitor и не возбраняется, причем, если заданный вами режим получит такое же название, как один из стандартных режимов, будут использованы ваши установки. Встроенные режимы с именами, не встречающимися в секции Monitor, будут использоваться сами по себе.

Видеорежимы могут быть заданы также в секции Modes. Таких секций в файле тоже может быть несколько. Каждая из них задает некоторый набор видеорежимов, на который можно сослаться из секции Monitor, используя ключевое слово UseModes.

Режимы могут задаваться в двух эквивалентных форматах: в виде одной строки или несколькими строками. Вот пример задания одного и того же режима в этих двух форматах:

Modeline "640x480example" 25.175 640 664 760 800 480 491 493 525 -HSync +VSync

Mode "640x480example" DotClock 25.175 Htimings 640 664 760 800 VTimings 480 491 493 525 Flags "-HSync +VSync" EndMode

Первое слово в каждом формате (Modeline или Mode), как и слово EndMode, являются служебными. По ним X-сервер определяет, что данная строка или группа строк служат для задания видеорежима. Следующее слово (в кавычках) является названием данного режима. Вы можете выбрать это название по своему вкусу (хотя, как пишет Игорь Николаев http://knot.pu.ru/faq/xfaq.html, "я бы не стал использовать в названии ничего, кроме цифр и букв латинского алфавита").

Следующее число (оно может быть дробным) задает тактовую частоту развертки (частоту вывода точек на экран) в мегагерцах.

Далее следуют четыре целых числа (группа Htimings), определяющих параметры строки, а, значит, разрешение по горизонтали. Первое из этих чисел задает число видимых точек в строке. Чтобы пояснить значение следующих трех чисел, надо иметь в виду, что началом строки на экране считается не самая левая точка в строке (она попадает в невидимую, затемненную область экрана), а левая граница видимого изображения. Поэтому первое число в этой группе определяет число точек от начала до конца видимой части строки. Второе число - число точек от начала строки до начала импульса горизонтальной синхронизации (в этот момент начинается перемещение электронного луча с правой границы экрана на левую).

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

Аналогично формируются следующие 4 числа (VTimings) в описании формата, только в данном случае речь будет идти о числе строк на экране (видимых и невидимых) и импульсе вертикальной синхронизации (началом экрана считаем верхнюю границу видимой части изображения).

О последней группе параметров в описании видеорежима (группа Flags) мы поговорим позже, когда рассмотрим вопрос о том, как правильно сформировать значения числовых параметров.

В большинстве случаев нет необходимости в наличии секции Modes и строки UseModes, так как достаточно встроенного в сервер набора видеорежимов, соответствующих стандарту VESA. При запуске X-сервера он автоматически выбирает из возможных режимов лучший вариант, поддерживаемый монитором и видеокартой (решение принимается на основе значений, указанных в строках HorizSync и VertRefresh секции Monitor, так что очень важно, чтобы они были заданы корректно).

Следующая секция Device, описывает вашу видеоплату. По-видимому, самая важная строка в этой секции - указание на драйвер. У меня эта строка имеет вид:

Driver "mga"



В этой секции могут быть также указаны следующие данные:

тип набора микросхем (Chipset);количество видеопамяти (указывается в килобайтах);допустимые значения тактовой частоты развертки (dot-clocks) или наименование используемого генератора тактовой частоты;тип RAMDAC (RAMDAC - это часть графического контроллера, отвечающая за преобразование изображения из цифровой в аналоговую форму).

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

Две секции InputDevice определяют мышь и клавиатуру (в 3-й версии XFree86 вместо секций InputDevice имелись секции: Keyboard и Pointer). Во-первых, здесь нужно указать тип клавиатуры. Помните, что обычная клавиатура для персональных компьютеров обозначается как "Generic 102-key PC (intl)" вместо предлагаемого по умолчанию варианта "Generic 101-key PC". Однако наиболее часто сейчас встречаются 104-клавишные клавиатуры, так что секция, определяющая конфигурацию клавиатуры должна содержать следующие строки:

Option "XkbRules" "xfree86" Option "XkbModel" "pc104" Option "XkbLayout" "ru" Option "XkbOptions" "grp:ctrl_shift_toggle"

Последняя из этих строк определяет переключатель, который будет менять раскладку клавиатуры с американской на русскую (в данном примере - <Ctrl>+<Shift>).

Кроме того, здесь можно указать протокол для работы с клавиатурой (Xqueue или Standart), скорость повтора (the repeat rate), а также переопределить значения некоторых клавиш. Для начала, пожалуй, не стоит тут слишком экспериментировать. Подробнее о настройке клавиатуры будет рассказано в разд. 9.3.

В отдельной секции InputDevice задаются параметры работы мыши. Самые существенные в этой секции 2 строки (для примера привожу строки из своего файла):

Option "Protocol" "PS/2" Option "Device" "/dev/mouse"



определяющие протокол и файл устройства. Если ваша мышь подключена к специальному ("мышиному") разъему, то в качестве параметра Protocol должно быть указано либо "PS/2", либо более длинное слово, оканчивающееся на "PS/2". Остальные протоколы используются для мышей, подключаемых через последовательный порт. Обратите внимание на то, что не всегда протокол совпадает с названием фирмы-производителя. Так, некоторые из мышей фирмы Logitech используют либо протокол MouseMan, либо Microsoft. Если ваша мышь выпущена относительно недавно, можно поставить "Auto" в графе Protocol.

Секция Files содержит несколько строк, в которых прописаны пути к файлу с базой цветов (это таблица, задающая соответствия между цифровым и словесным заданием цветов, эту строку не стоит редактировать) и каталогам с файлами шрифтов. Путей к каталогам со шрифтами может быть задано несколько. Убедитесь только, что все указанные каталоги существуют и действительно являются каталогами шрифтов (там должен быть специальный файл fonts.dir, создаваемый командой mkfontdir, этот файл не рекомендуют создавать вручную). Если при запуске сервер будет выдавать сообщение типа "Can't open default font 'fixed'" или что-то еще в таком роде, это свидетельствует о том, что в секции Files ошибка в указании пути к файлу шрифтов (нужный шрифт не найден).

В этой же секции могут быть заданы пути к каталогам, содержащим загружаемые модули. Какие именно модули загружаются, и параметры загрузки определяются в секции Module, о которой мы сейчас говорить не будем, как и о секциях ServerFlags, VideoAdaptor, DRI, Vendor. Оставьте эти секции в том виде, как они созданы программой конфигурации.


Выбор и настройка менеджера окон


Если вам удалось добиться того, что X Window работает, у вас имеется масса возможностей для дальнейшей настройки. Конкретный набор этих возможностей зависит от того, какой менеджер окон вы используете. Менеджеров окон существует много, и можно организовать выбор менеджера окон на этапе загрузки графического режима. Вот пример, показывающий как можно сделать это с помощью файла .xinitrc:

#!/bin/sh # $HOME/.xinitrc usermodmap=$HOME/.Xmodmap xmodmap $usermodmap xset s noblank # отключаем хранитель экрана xset s 300 2 # запуск screensaver-а через 5 мин. xset m 10 5 # установка ускорения мыши rxvt -cr green -ls -bg black -fg white -fn 7x14 \ -geometry 80x30+57+0 & if [ "$1" = "" ] ; then WINMGR=wmaker # по умолчанию WINMGR=wmaker else WINMGR=$1 fi $WINMGR

Хотя это и не обязательно, можно сделать этот файл исполняемым с помощью команды

[user]$ chmod +x .xinitrc.

Этот вариант .xinitrc позволяет вам выбрать менеджер окон, попробуйте, например:

[user]$ startx startkde

Если администратор хочет создать одинаковое начальное окружение для всех пользователей, можно сделать так, чтобы по умолчанию для пользователя создавался скрипт .xinitrc, который ссылается на общий стартовый скрипт:

#!/bin/sh . /usr/local/lib/site.xinitrc



XFree86 и его составные части


Графический интерфейс в Linux строится на основе стандарта X Window System (заметьте, что Window, а не Windows) или просто "X" (в просторечии - "иксы"), первоначальный вариант которого был разработан в 1987 году в Массачусетском технологическом институте. Начиная со второй версии этот стандарт поддерживался консорциумом X, созданным в январе 1988 г. с целью унификации графического интерфейса для ОС UNIX. С 1997 года консорциум X преобразован в X Open Group (http://www.x.org). В настоящее время действует версия 11 выпуск 6 стандарта на графическую подсистему для UNIX-систем, которая кратко обозначается как X11R6.

Свободно распространяемая реализация стандарта X11R6 для UNIX-систем с процессорами 80386/80486/Pentium (в том числе для ОС Linux) была создана группой программистов, которую вначале возглавлял Дэвид Вексельблат (David Wexelblat). Эта реализация известна как XFree86 (http://www.xfree86.org), и может использоваться не только в Linux, но и в System V/386, 386BSD, FreeBSD и других версиях UNIX для систем на базе процессоров Intel x86. В настоящее время выпущена уже 4-ая версия XFree86, однако, и 3-я версия еще широко используется и входит в состав основных дистрибутивов Linux.

Система X Window построена на основе модели "клиент/сервер". Правда, модель эта в данном случае используется как бы в "перевернутом" виде. Дело в том, что X сервер работает на компьютере пользователя (а не на каком-то удаленном "сервере") и обеспечивает вывод изображения на экран монитора. X-сервер работает непосредственно с "железом": видеосистемой, устройствами ввода и динамиком. Может быть, для некоторых читателей назначение этой программы будет понятнее, если назвать ее драйвером видеосистемы. Эта программа захватывает оборудование и предоставляет его возможности другим программам как ресурсы (собственно, именно поэтому она и считается сервером) по особому протоколу, который называется X-протокол, или протокол сетевой связи (X Network Protocol). Кстати, специализированный компьютер, на котором исполняется исключительно X-сервер, называется (аппаратным) X-терминалом.

Но сам X-сервер изображение не формирует, он только "доставляет" графику видео-драйверу. Если запустить только X-сервер, вы увидите просто серый экран с характерным крестиком курсора посредине. С помощью мыши этот крестик можно перемещать по экрану. И все! На нажатие кнопок мыши и клавиш никакой видимой реакции не следует. И невидимой тоже - сервер готов передавать эти сигналы своим клиентам, а клиенты пока не запущены. Хотя на самом деле некоторые комбинации клавиш X перехватывает и обрабатывает. Это <Ctrl>+<Alt>+<Backspace> - завершение работы сервера (если эта возможность не запрещена при конфигурации), <Ctrl>+<Alt>+<+> и <Ctrl>+<Alt>+<-> - "горячее" переключение доступных видеорежимов, и <Control>+<Alt>+<F#> - переключение в другую виртуальную консоль.

Чтобы получить на экране какие-то более содержательные изображения, одного X-сервера недостаточно, надо запустить менеджер окон и хотя бы одну программу-клиент, которая будет формировать изображение. В роли "клиентов" X-сервера выступают приложения, работающие с X Window, например графический редактор GIMP, текстовый редактор Corel WordPerfect, эмулятор терминала xterm и другие.

Между клиентами и сервером стоят еще два очень важных компонента графического интерфейса: библиотека графических функций X-lib и менеджер окон (рис. 7.1)1). X-Lib содержит графические функции, которые обеспечивают выполнение низкоуровневых операций с графическими образами. Менеджер окон вызывает функции из X-Lib для управления дисплеем и выполнения любых преобразований изображений в окнах.


Рис. 7.1.  Архитектура графической системы в Linux

Когда X-приложение запускается, оно передает управление менеджеру окон. Менеджер окон обеспечивает выполнение всех операций с окнами: прорисовку рамок, меню, иконок, полос прокрутки и других элементов окна, а также предоставляет возможность изменять вид и положение окна в процессе работы в соответствии с потребностями пользователя.

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


Можно упомянуть также Motif - коммерческий продукт, используемый во многих UNIX-системах, или его бесплатный аналог LessTif (http://www.lesstif.org), а также Xview - Linux-версию интерфейса OpenLook фирмы Sun.

Описание нескольких оконных менеджеров (Window Maker, IceWM, FLWM, FailSafe) и их сравнительный анализ вы можете найти в книге А.Федорчука [П1.6].

Разные менеджеры окон могут обеспечивать различный вид окон за счет использования различных рамок и оконных меню. Но все они используют одну и ту же базовую графическую утилиту X Window - X сервер.

Итак, вы теперь в общих чертах представляете, из каких основных частей формируется графический интерфейс в Linux. Как видите, строится он по модульному принципу и вполне возможно "собрать" его самостоятельно из отдельных компонент. Но для начинающего пользователя этот путь не самый легкий. К счастью, и не обязательно этим путем идти, поскольку разработаны (и включены практически во все дистрибутивы) так называемые интегрированные графические среды. Наиболее известными представителями таких сред являются KDE (http://www.kde.org) и GNOME (http://www.gnome.org).

Основу интегрированной графической среды KDE (K Desktop Enviroment) образует расширенная библиотека графических функций Qt фирмы TrollTech (http://www.trolltech.com/). С использованием этой библиотеки построены собственный оконный менеджер kwm, файл-менеджер kfm, центр управления KDE (аналог панели управления Windows) и множество других компонентов, вплоть до собственного офисного пакета KOffice. Сказанное не означает, что все эти компоненты разрабатываются какой-то одной фирмой. Просто различные и независимые разработчики используют единый подход, единую идеологию создания и оформления программных продуктов. В результате получается функционально полный пакет программ, в рамках которого могут быть решены практически все задачи управления компьютером и программной средой (если не сказать, что вообще все задачи, решаемые на компьютере).

В состав версии 2.1 KDE включен файловый менеджер Konqueror, который предоставляет уникальные возможности доступа к файлам. Кроме того, что он позволяет просматривать файлы большинства известных форматов на локальных дисках, он является и интернет-браузером, по своим возможностям вполне сравнимым с Internet Explorer или Netscape Navigator.

Другой графической средой того же класса, что и KDE, является пакет GNOME (GNU Network Object Model Environment), который разрабатывается в рамках проекта GNU, а значит, относится к классу свободно распространяемого ПО (KDE до недавнего времени не полностью соответствовал этому понятию, потому что библиотека Qt распространялась не на условиях GPL; хотя сейчас ситуация изменилась и KDE тоже является свободно распространяемым). GNOME строится на основе библиотеки графических функций GTK+.

Существуют и другие разработки интегрированных графических сред, которые, однако, пока не достигли той степени развития, как KDE или GNOME, например, Xfce (http://www.xfce.org), dfm (http://www-c.informatik.uni-hannover.de/~kaiser/dfm/dfm.html) и другие.

До недавнего времени установка и настройка графического интерфейса Linux представляла собой довольно непростую задачу. Однако программы инсталяции последних версий дистрибутивов Linux (например, русифицированой версии Red Hat Linux 7.1) уже вполне успешно с ней справляются, автоматически определяя тип монитора и видеоадаптера и выбирая подходящее разрешение экрана. Но я все же приведу здесь некоторые рекомендации по настройке X Window для начинающих пользователей, имея в виду, что с некоторыми вариантами аппаратного обеспечения настройки все же придется подбирать вручную. А для того, чтобы подходить к процессу настройки осознанно, надо в общих чертах представлять, как работает видеосистема вашего компьютера.


Запуск системы X Window


Запустить X Window можно несколькими способами. Иногда при инсталляции ОС соглашаются с предложением инсталлятора запускать их автоматически. Если при инсталляции все прошло нормально, то вы будете сразу после запуска ОС попадать в графический режим. Однако, судя по моему опыту (особенно по опыту работы с 3-й версией XFree86), система X далеко не всегда устанавливается автоматически, поэтому в разделе об инсталляции ОС я советовал отказаться от автоматического запуска. Как же запустить графическую оболочку?

Из предыдущего текста вы должны знать, что вначале необходимо запустить X-сервер. Это можно сделать, непосредственно запустив на выполнение подходящий сервер из каталога /usr/X11R6/bin. Вы уже знаете, что в результате вы увидите на экране серый прямоугольник с крестиком курсора мыши посередине. Но дальше вы вряд ли чего-нибудь добьетесь, поскольку не запущен менеджер окон и ни одной программы-клиента. Поэтому просто нажмите комбинацию клавиш <Ctrl>+<Alt>+<Backspace> для того, чтобы завершить работу X-сервера.

Несколько более успешный (но все еще не самый правильный) способ выхода в графический режим состоит в том, что вы даете команду xinit.

Программа xinit (она расположена в каталоге /usr/X11R6/bin) предназначена для запуска сервера системы X Window и хотя бы одной программы-клиента.

Если в командной строке не указано, какой именно X-сервер запускать, xinit ищет в домашнем каталоге пользователя файл .xserverrc, чтобы выполнить содержащийся в нем скрипт запуска сервера. Если такого файла нет, xinit по умолчанию выполняет следующий скрипт:

X :0

т. е. запускает программу с именем X на дисплее с номером 0. При этом предполагается, что в одном из каталогов, перечисленных в путях поиска, найдется программа с именем X. Как вы уже знаете, это должна быть ссылка на подходящий сервер. Используя скрипт .xserverrc, удостоверьтесь, что по команде exec в нем запускается существующий X-сервер. В противном случае загрузка будет происходить очень медленно и завершится немедленным выходом.

Если в командной строке запуска xinit не указана клиентская программа, которую надо запускать, программа xinit ищет в домашнем каталоге пользователя файл .xinitrc, чтобы выполнить его как скрипт, запускающий клиентские программы. Если такого файла не существует, xinit по умолчанию выполняет вместо этого скрипта команду:

xterm -geometry +1+1 -n login -display :0


Если вы после установки Red Hat Linux еще не создали свой файл .xinitrc, и просто запустите команду xinit из командной строки, вы увидите почти пустой рабочий стол с единственным окном терминала. Поскольку менеджера окон нет, вы ничего не можете сделать с этим окном (переместить, изменить размер и т. д.), но вы можете в этом окне запустить другие программы, в том числе менеджер окон. Перейдите, например, в каталог /usr/X11R6/bin и дайте команду fvwm или twm (один из этих оконных менеджеров обычно по умолчанию установлен). После этого вид экрана несколько изменится, вы сможете перемещать окна (обычным способом, захватывая мышкой заголовок окна), а по щелчку левой кнопкой по пустому полю рабочего стола получите выход в меню.

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

Ниже приведен пример скрипта .xinitrc, который запускает часы, несколько терминалов и оставляет менеджер окон в качестве "последнего" клиента.

#!/bin/sh xrdb -load $HOME/.Xresources xsetroot -solid gray & xclock -g 50x50-0+0 -bw 0 & xload -g 50x50-50+0 -bw 0 & xterm -g 80x24+0+0 & xterm -g 80x24+0-0 & twm

Важно отметить, что программы, запускаемые из .xinitrc, должны запускаться в фоновом режиме, если только они не завершаются немедленно. Иначе эти программы будут препятствовать запуску других программ. Однако одна из запущенных программ (обычно менеджер окон или эмулятор терминала) должна выполняться не в фоновом режиме, а на переднем плане, чтобы работа скрипта не завершалась (завершением работы этой программы пользователь сообщает программе xinit, что закончил работу и что сама программа xinit должна завершиться). В приведенном примере, если менеджер окон правильно сконфигурирован, то для завершения работы в X-сессии достаточно выбрать команду Exit в меню менеджера twm.

Аргументы, заданные в командной строке вызова xinit, позволяют обойти выполнение скриптов .xinitrc и .xserverrc. В командной строке может быть указана альтернативная программа-клиент и/или альтернативный сервер. Клиентская программа должна быть первым аргументом в командной строке вызова xinit. Для того чтобы вызвать конкретный X-сервер, добавьте двойное тире (после указания программы-клиента и ее аргументов), после которого укажите имя нужного сервера.



Этой командой будет запущен сервер, на который указывает ссылка (линк) X, и выполнен пользовательский скрипт .xinitrc, если таковой существует, а иначе просто запущен xterm.

[user]$ xinit -- /usr/X11R6/bin/Xqdss :1

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

[user]$ xinit -geometry =80x65+10+10 -fn 8x13 -j -fg white -bg navy

По этой команде будет запущен сервер, на который указывает ссылка X, и запускаемой по умолчанию команде xterm будут переданы аргументы, перечисленные в командной строке. Скрипт .xinitrc будет проигнорирован.

[user]$ xinit -e widgets -- .Xsun -l -c

В этом случае для запуска сервера используется команда .Xsun -l -c, а запускаемому по умолчанию программе-клиенту xterm будет переданы аргументы -e widgets.

Поскольку пользователю-новичку обычно не хватает квалификации для создания собственного варианта скрипта .xinitrc, администраторы сайтов могут помочь им в вызове графического интерфейса, создав общедоступный скрипт, выполняющий эту функцию. Такие скрипты обычно называются x11, xstart, или startx и являются удобным способом создания простого интерфейса для пользователей-новичков. Вот пример простейшего скрипта такого вида:

#!/bin/sh xinit /usr/local/lib/site.xinitrc -- /usr/X11R6/bin/X bc

При инсталляции стандартной версии Red Hat Linux создается более сложный вариант скрипта startx, который расположен в каталоге /usr/X11/bin (вы можете его просмотреть). Для него существует и man-страница, в которой говорится, что этот скрипт создается просто как образец для администраторов сайтов, и предназначен для создания собственных вариантов такого скрипта.

Если просмотреть стандартный вариант скрипта startx, мы увидим, что практически он сводится к выполнению всего-навсего трех команд:

xauth add $display . $mcookie xauth add `hostname -f`$display . $mcookie xinit $clientargs -- $display $serverargs

То есть, в конечном итоге, startx вызывает уже рассмотренную нами команду xinit, только предварительно формирует нужные значения аргументов командной строки для нее. Первый аргумент - имя файла xinitrc, причем если в домашнем каталоге пользователя есть файл .xinitrc, то берется он (с указанием пути), а если в домашнем каталоге нет такого файла, то берется общесистемный файл /etc/X11/xinit/xinitrc, т. е. "clientargs" = "/etc/X11/xinit/xinitrc".

Аналогично формируется значение переменной serverargs: если существует файл .xserverrc в домашнем каталоге пользователя, то переменная serverargs будет указывать на него. Если такого файла нет, то serverargs укажет на /etc/X11/xinit/xserverrc. Переменной display присваивается значение: 0. Далее в скрипте startx производится анализ аргументов, которые были заданы в командной строке при его вызове (эту часть мы пока не будем детально разбирать, поскольку для начала будем вызывать скрипт без параметров) и, наконец, в конец строки вызова xinit добавляется -auth $HOME/.Xauthority. Таким образом, сразу после установки системы (пока пользователь не создал файлов .xinitrc и .xserverrc в своем домашнем каталоге) будет вызываться в следующем виде:

xinit /etc/X11/xinit/xinitrc -- :0 /etc/X11/xinit/xserverrc -auth $HOME/.Xauthority

Команды xauth и опция -auth $HOME/.Xauthority, передаваемая X-серверу, служат для авторизации пользователя, запускающего графический режим. Механизмы авторизации нас пока не интересуют, так что рассматривать эту часть не будем (если интересно, см. интерактивное руководство man с параметром Xsecurity).


Другие файлы, влияющие на процесс загрузки


Кроме файлов /etc/inittab, /etc/rc.d/rc.sysinit, /etc/rc.d/rc, /etc/rc.d/rc.local на процесс загрузки (и, следовательно, формирующуюся в результате конфигурацию системы), оказывают влияние те скрипты и отдельные программы, которые вызываются из только что перечисленных файлов, а также некоторые чисто конфигурационные файлы. Рассмотреть их все невозможно, но о некоторых необходимо упомянуть.

Все важнейшие общесистемные конфигурационные файлы расположены в каталоге /etc и его подкаталогах. Приведем краткий список с указанием на роль некоторых из этих файлов в системе и ссылки на то, где искать более подробную информацию.

/etc/lilo.conf - файл, определяющий конфигурацию загрузчика lilo (о структуре этого файла было сказано несколько слов в лекции 2);/etc/modules.conf (или /etc/conf.modules) - файл, определяющий конфигурацию загружаемых модулей ядра (см. man-страницу по modules.conf);/etc/fstab - содержит информацию, необходимую для автоматического монтирования файловых систем (см. разд. 4.8 и разд. 8.3);/etc/passwd - различная регистрационная информация, включая пароли;/etc/profile - глобальный файл профилей - устанавливает переменную $PATH и другие важнейшие переменные; заглянув в него, вы увидите, что в нем вызываются все файлы из подкаталога /etc/profile.d, в частности, файл, задающий параметры локализации системы;/etc/bashrc - глобальный файл конфигурации bash, устанавливает синонимы (алиасы) и функции, и т.п.;/etc/issue - содержит сообщение, выдаваемое на терминал перед входом в систему (перед запросом имени и пароля); однако редактировать этот файл с целью изменения текста сообщения не стоит, потому что сам он формируется инициализационным скриптом /etc/rc.d/rc.local;/etc/motd - устанавливает сообщение, выдаваемое пользователю после входа в систему (после правильного ввода пароля);/etc/redhat-release - содержит название и номер версии дистрибутива, используется скриптом rc.local.

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



Файлы и разделы подкачки


Выше уже было сказано, что в тех случаях, когда системе Linux не хватает оперативной памяти, имеется возможность выгрузить часть исполняющихся (но временно простаивающих) программ и их данных на жесткий диск. Это называется свопированием (swaping). В Linux существует два варианта организации той области на диске, в которую осуществляется выгрузка данных из ОП:

в виде файла подкачки (swap-файл);в виде отдельного раздела диска (swap partition).

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

О том, как создавать отдельный раздел подкачки, вы могли прочитать в лекции 2. А файл подкачки создается с помощью команды dd:

[root]# dd if=/dev/zero of=/swapfile bs=1k count=size

где size - размер файла подкачки в килобайтах. Некоторое время назад значение параметра size должно было находиться в пределах от 40 до 131 073 и, следовательно, размер файла подкачки мог быть не более 133 890 048 байт (это чуть меньше 128 Мбайт). То же самое ограничение действовало и для разделов подкачки. Однако последние версии ядра позволяют использовать области подкачки размером до 2 Гбайт (правда, это требует выделения дополнительной памяти для ядра).

Отметим, что для создания файла подкачки нельзя использовать команду cp, поскольку этот файл должен занимать непрерывную область на диске, что не обеспечивается командой копирования1).

После создания области подкачки (будь это хоть раздел, хоть файл) на ней необходимо создать соответствующую файловую систему, что делается командой mkswap следующим образом:

[root]# mkswap -c swapfile [size]


или

[root]# mkswap -c /dev/hdb3

Опция - c обеспечивает проверку указанной области на наличие плохих блоков. Если таковые обнаружены, сообщается их количество.

Linux использует страничную организацию памяти и области подкачки. Размер страницы можно указать в команде mkswap, используя опцию -p. Типичные значения, указываемые после этой опции, 4096 и 8192. Надо сказать, что команда mkswap отказывается работать с областями подкачки, размер которых менее 10 страниц, чем и объясняется то, что размер файла подкачки должен быть не менее 40 Кбайт.

Команда mkswap подготавливает область подкачки к использованию, но чтобы система могла ее использовать, необходимо эту область инициализировать (эта операция аналогична монтированию обычных файловых систем). Инициализация выполняется с помощью команды swapon. Обычно это делается во время выполнения инициализационного скрипта /etc/rc.d/rc.sysinit. Но если вы создали файл подкачки после запуска ОС, надо выполнить эту команду отдельно. Команда swapoff производит демонтаж указанных областей подкачки. Эта команда необходима для того, чтобы ядро могло снова считать в память данные из области подкачки.

ОС Linux может одновременно работать с несколькими областями подкачки (до 8). Сколько их задействовано в системе, можно увидеть с помощью команды swapon -s или просмотрев файл /proc/swaps.


Команда nohup


Предположим, вы запустили из оболочки bash несколько процессов, часть из них в фоновом режиме. И по каким-то причинам завершили текущую сессию работы в оболочке. При завершении сессии оболочка посылает всем порожденным ею процессам сигнал "отбой", по которому некоторые из порожденных ею процессов могут завершиться, что не всегда желательно. Если вы хотите запустить в фоновом режиме программу, которая должна выполняться и после вашего выхода из оболочки, то ее нужно запускать с помощью утилиты nohup. Делается это так:

nohup команда &

Запускаемый таким образом процесс будет игнорировать посылаемые ему сигналы (если это возможно, см. табл. 8.1). Стандартный выходной поток и стандартный поток ошибок при таком запуске команд перенаправляются в файл nohup.out или $HOME/nohup.out.

Команда nohup имеет побочный эффект, заключающийся в том, что значение nice для запускаемого процесса увеличивается на 5, т. е. процесс выполняется с более низким приоритетом.



Команда ps


Когда я заглянул в man-страницу, посвященную команде ps, я был поражен, как много у нее разных опций. Как оказалось, GNU-версия этой программы, входящая в состав Linux, поддерживает опции в стиле трех разных типов UNIX. Опции в стиле Unix98 состоят из одного или нескольких символов, перед которым(и) должен стоять дефис. Опции в стиле BSD имеют аналогичный вид, только используются без дефиса. Опции, характерные только для GNU-версии представляют собой слово, перед которым должно стоять два дефиса. Их нельзя объединять, как однобуквенные опции двух предшествующих типов. Таким образом, существует три равноправных формата задания этой команды:

ps [-опции] ps [опции] ps [-- длинное_имя_опции [-- длинное_имя_опции] ...]

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

Первая группа опций регулирует вывод команды. Независимо от наличия опций этой группы команда ps выдает для каждого процесса отдельную строку, но содержимое этой строки может быть разным. В зависимости от заданных опций могут присутствовать следующие поля:

USER - имя владельца процесса;PID - идентификатор процесса в системе;PPID - идентификатор родительского процесса;%CPU - доля времени центрального процессора (в процентах), выделенного данному процессу;%MEM - доля реальной памяти (в процентах), используемая данным процессом;VSZ - виртуальный размер процесса (в килобайтах);RSS - размер резидентного набора (количество 1K-страниц в памяти);STIME - время старта процесса;TTY - указание на терминал, с которого запущен процесс;S или STAT - статус процесса;PRI - приоритет планирования;NI - значение nice (см. описание команды nice ниже);TIME - сколько времени центрального процессора занял данный процесс;CMD или COMMAND - командная строка запуска программы, выполняемой данным процессом;

а также и другие поля, полный список которых приведен на man-странице, посвященной команде ps.

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

R - выполнимый процесс, ожидающий только момента, когда планировщик задач выделит ему очередной квант времени;S - процесс "спит";D - процесс находится в состоянии подкачки на диске;T - остановленный процесс;Z - процесс-зомби.


Рядом с указателем статуса могут стоять дополнительные символы из следующего набора:

W - процесс не имеет резидентных страниц;< - высоко-приоритетеный процесс;N - низко-приоритетный процесс;L - процесс имеет страницы, заблокированные в памяти.

Вторая группа опций регулирует то, какие именно процессы включаются в вывод команды. Чтобы получить список всех процессов надо использовать команду ps с опциями ax или -A. Вывод в этих двух случаях отличается только в поле CMD: в первом случае выдается полная командная строка запуска программы, а во втором - только имя запущенной программы.

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

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

[user]$ ps -e

Можно к той же команде добавить опцию -o, после которой указать через запятую, какие именно поля вы хотите видеть в выводе команды:

[user]$ ps -eo pid,user,cmd

Для того, чтобы увидеть все процессы в системе, используя форму вывода BSD-систем:

[user]$ ps ax

Для того, чтобы увидеть все процессы в системе, с применением графического отображения отношения "предок-потомок":

[user]$ ps -ef

Впрочем, для того, чтобы увидеть "лес" деревьев "предок-потомок", лучше воспользоваться очень интересным аналогом команды ps -ef - командой pstree.

Для того, чтобы увидеть, сколько % ЦПУ и памяти занимают запущенные вами процессы:

[user]$ ps -u

Чтобы узнать приоритет процесса и значение nice, воспользуйтесь опцией -l:

[user]$ ps -l


Команда top


Команда ps позволяет сделать как бы "моментальный снимок" процессов, запущенных в системе. В отличие от ps команда top отображает состояние процессов и их активность "в реальном режиме времени". На рисунке 8.5 изображено окно терминала, в котором запущена программа top.


увеличить изображение
Рис. 8.5.  Вывод команды top

Как видите, в верхней части окна отображается астрономическое время, время, прошедшее с момента запуска системы, число пользователей в системе, число запущенных процессов и число процессов, находящихся в разных состояниях, данные об использовании ЦПУ, памяти и свопа. А далее идет таблица, характеризующая отдельные процессы. Число строк, отображаемых в этой таблице, определяется размером окна: сколько строк помещается, столько и выводится. Графы таблицы обозначены так же, как поля вывода команды ps, так что дополнительных пояснений здесь не требуется.

Содержимое окна обновляется каждые 5 секунд. Список процессов может быть отсортирован по используемому времени ЦПУ (по умолчанию), по использованию памяти, по PID, по времени исполнения. Переключать режимы отображения можно с помощью команд, которые программа top воспринимает. Это следующие команды (просто нажимайте соответствующие клавиши, только с учетом регистра, то есть вместе с клавишей Shift):

<Shift>+<N> - сортировка по PID;<Shift>+<A> - сортировать процессы по возрасту;<Shift>+<P> - сортировать процессы по использованию ЦПУ;<Shift>+<M> - сортировать процессы по использованию памяти;<Shift>+<T> - сортировка по времени выполнения.

Кроме команд, определяющих режим сортировки, команда top воспринимает еще ряд команд, которые позволяют управлять процессами в интерактивном режиме. С помощью команды <K> можно завершить некоторый процесс (его PID будет запрошен), а с помощью команды <R> можно переопределить значение nice для некоторого процесса. Таким образом, эти две команды аналогичны командам kill и renice, которые рассматриваются далее.



Настройка окружения пользователя


Как вы уже знаете, при входе любого пользователя в систему для него запускается особый экземпляр оболочки - login shell. В процессе запуска в качестве login shell bash ищет следующие файлы:

/etc/profile~/.bash_profile~/.bash_login~/.profile

(в указанном порядке) и выполняет содержащиеся в них команды. Если bash запускается повторно из командной строки в интерактивном режиме (т. е. не для выполнения какой-то одиночной команды), то он находит файл ~/.bashrc и выполняет содержащиеся в нем команды. Впрочем, в дистрибутиве Mandrake файл ~/.bashrc вызывается и для login shell, а из него вызывается еще и общесистемный файл /etc/bashrc. Так что, как видите, тут возможны варианты.

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

Файлы /etc/profile и /etc/bashrc определяют общесистемные настройки пользовательской среды, а остальные перечисленные файлы определяют индивидуальную среду конкретного пользователя. Сравнительно небольшие добавления или исправления в индивидуальных файлах настройки, изменяющие значения, заданные по умолчанию, могут сделать значительно более приятной для вас работу в системе (о вкусах, как известно, не спорят, и вряд ли люди, которые определяли настройки по умолчанию, угадали ваши предпочтения). Поэтому давайте кратко рассмотрим основные переменные пользовательской среды и то, каким образом вы сами можете их изменять.

Вначале посмотрите переменные окружения, которые заданы по умолчанию. Как мы уже говорили в лекции 5, это можно сделать с помощью команд set (и аналогичной ей команды typeset) или env. Значение, присвоенное отдельной переменной, можно просмотреть с помощью команды echo $name, где name - имя переменной.

Из всех переменных, которые вы увидите по команде set, обычно меняют вид приглашения PS1 и перечень путей поиска PATH. О том, как поменять значения этих переменных, было подробно рассказано в лекции 5. Если вы почему-либо пропустили этот раздел, загляните в него сейчас. Так что осталось только решить, в каком именно скрипте задать этим переменным новые значения. Рассмотрим этот вопрос на примере переменной PATH.

Переменная PATH формируется в двух скриптах: /etc/profile (пути, общие для всех пользователей) и в одном из пользовательских скриптов (например, в ~/.bash_profile), где к ранее сформированному перечню пользователь может добавить пути по своему желанию. Только не стоит делать это в файле ~/bashrc, так как последний перезапускается каждый раз при запуске второго, третьего и т. д. экземпляра оболочки. Для добавления пути в переменную PATH надо вписать в выбранный скрипт строку следующего вида (в этом примере в перечень добавляется путь /home/user/bin):

PATH=$PATH:/home/user/bin


Обратите внимание на то, что двоеточия в конце нет. И имейте в виду, что каталоги просматриваются в поисках нужного файла в том порядке, как они перечислены в переменной PATH.

В отличие от MS-DOS Linux не ищет исполняемый файл в текущем каталоге. Поэтому, если вы хотите, чтобы поиск производился и в текущем каталоге, надо добавить и этот каталог (напомним, что он имеет имя, состоящее из одной точки) в переменную PATH. Но имейте в виду, что с точки зрения безопасности добавлять текущий каталог в перечень путей поиска недопустимо, так как злоумышленник может поместить в один из доступных ему по записи каталогов вредоносную программу, названную именем одной из часто используемых системных утилит. И, когда вы запустите эту программу, считая, что запускаете системную утилиту, она может нанести большой вред вашей системе, тем более, если вы запустили ее от имени суперпользователя.

При желании можно слегка "украсить себе жизнь", включив цветной вывод в команде ls (если по умолчанию он черно-белый). Для этого редактируем файл /etc/bashrc, в который добавляем строку:

alias ls = "ls -F --color"

Кстати, если вы захотите, чтобы Midnight Commander в окне эмулятора терминала был цветным, а не черно-белым, то установите переменную COLORTERM:

COLORTERM = ; export COLORTERM



  3)

  (Замечание прислал Антон Непомнящих.) Не совсем верно, нельзя менять только UID и имя залогиненного пользователя: CAVEATS usermod will not allow you to change the name of a user who is logged in. You must make certain that the named user is not executing any processes when this command is being executed if the user's numerical user ID is being changed. You must change the owner of any crontab files manually. You must change the owner of any at jobs manu- ally. You must make any changes involving NIS on the NIS server.

  4)

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

  5)

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

  6)

  Сейчас я уже не стал бы так делать, потому что знаю, что и в среде KDE могут успешно использоваться программы, первоначально созданные для GNOME.

© 2003-2007 INTUIT.ru. Все права защищены.

Основные конфигурационные файлы


Если вы прочитали предыдущий раздел (или если смотрели файл /etc/inittab), то представляете, что в обычной ситуации процесс init помимо запуска процессов getty выполняет 2 основных действия:

запускает скрипт rc.sysinit из каталога /etc/rc.d;запускает скрипт rc из того же каталога /etc/rc.d с опцией, равной уровню выполнения (обычно rc 3).

В файле rc.sysinit содержатся команды инициализации системы, в том числе команды установки системных переменных, загрузки таблиц раскладки клавиатуры (командой loadkeys) и системного шрифта (команда consolechars), монтирования и проверки файловых систем, загрузки модулей, задания предпочитаемой графической оболочки и т. д.

Если вы внимательно прочитали раздел о командном языке интерпретатора команд shell (лекция 5), то вы легко поймете большую часть скрипта /etc/rc.d/rc.sysinit.

Прежде чем рассматривать функции, выполняемые скриптом rc, надо сказать несколько слов о каталоге /etc/rc.d. Этот каталог вообще играет важную роль в процессе загрузки, поскольку он содержит основные скрипты (программы на языке командного процессора shell), служащие для организации процесса загрузки.

Каталог rc.d содержит следующий набор подкаталогов:

rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d init.d

Если вы просмотрите (например, с помощью команды ls -l) содержимое подкаталогов rcX.d, то увидите, что в этих подкаталогах содержатся не файлы, а только ссылки на файлы скриптов, находящиеся в других каталогах, а именно (за редким исключением), в каталоге /etc/rc.d/init.d. Названия этих ссылок имеют имена, начинающиеся либо с буквы K, либо с буквы S. Подкаталог init.d содержит по одному скрипту для каждой из возможных в системе служб (NFS, sendmail, httpd и т. п.).

Теперь вспомним, что процесс init после скрипта rc.sysinit запускает скрипт rc с опцией, равной заданному уровню выполнения. Этот скрипт предназначен в общем случае для перевода системы из одного уровня выполнения на другой. В процессе начальной загрузки этот скрипт переводит систему из однопользовательского режима на уровень, задаваемый по умолчанию. Общий алгоритм работы rc состоит в следующем. При переходе на уровень X сначала просматривается каталог rcX.d и для всех ссылок, которые начинаются на K, вызываются файлы, на которые идет ссылка, с опцией stop, т. е. осуществляется останов соответствующих служб (которые не должны работать на данном уровне выполнения). Затем запускаются службы, которые на данном уровне выполнения должны быть запущены. Это осуществляется путем последовательного просмотра ссылок, которые начинаются с символа S, и запуска соответствующих скриптов с опцией start. Из сказанного ясно, что буквы (символы) S и K, с которых начинаются имена ссылок в подкаталогах rcX.d, происходят от start и kill, соответственно. Заметим еще, что после S и K в именах ссылок стоят двузначные номера, которые служат для задания порядка запуска скриптов.

Одна из последних ссылок вида SXXname, используемых скриптом rc на уровнях 2-5, является ссылка на скрипт /etc/rc.d/rc.local. Как сказано в самом этом файле, этот скрипт выполняется после всех других скриптов в процессе инициализации системы, поэтому если вы хотите, чтобы в процессе загрузки были выполнены какие-то дополнительные команды или ваши персональные настройки, то их целесообразно поместить именно сюда.

Тот вариант этого скрипта, который устанавливается из дистрибутива, выполняет очень ограниченные задачи: выводит на экран логотип дистрибутива и формирует файлы /etc/issue и /etc/issue.net, содержащие текст сообщений, выдаваемых пользователю при входе в систему.



Основные задачи системного администрирования. Процессы и их идентификаторы


К обязанностям системного администратора обычно относят следующие задачи:

подключение и настройка аппаратных устройств;установка и обновление программного обеспечения;запуск и настройка общесистемных сервисов (конфигурирование системы);управление пользователями;управление процессами;распределение ресурсов;обеспечение безопасности.

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

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

В самом первом приближении можно считать, что процесс - это загруженная в оперативную память программа. Но это не совсем точно, правильнее было бы сказать, что "процесс выполняет программу". Дело в том, что в Linux вначале запускается процесс, который загружает в оперативную память программу из указанного ему файла и начинает ее выполнять. Это означает, что каждый процесс должен быть запущен (как говорят - "порожден") каким-то другим процессом. То есть для каждого процесса однозначно определен его "родитель" (или "предок"), для которого данный процесс является "дочерним" (или "потомком"). Если вы хотите увидеть "дерево" запущенных в вашей системе процессов, выполните команду pstree. Вывод этой команды позволяет увидеть, что "отцом" всех процессов в системе (или "корнем дерева процессов") является процесс init, который первым запускается после загрузки ядра.

Каждый процесс в системе имеет уникальный идентификатор - PID, назначаемый процессу при запуске. Процесс с идентификатором 1 выполняет программу init. Именно по этим идентификаторам система различает процессы. Каждый запущенный процесс в любой момент времени находится в одном из следующих состояний: активен (R), приостановлен (T) или "спит" (S). Текущее состояние процесса называют статусом процесса.

Кроме идентификатора и статуса для каждого процесса в специальных структурах ядра сохраняются следующие данные (приводимый ниже перечень является далеко не полным):

полная командная строка запуска выполняемой процессом задачи;информация об отведенном процессу адресном пространстве;ссылка на текущий рабочий каталог и корневой каталог процесса (последний служит для ограничения доступа процесса к файловой структуре);таблица открытых процессом файлов;так называемое окружение процесса, т. е. перечень заданных для данного процесса переменных с их текущими значениями;атрибуты, определяющие права и привилегии процесса,таблица обработчиков сигналов;указание на родительский процесс;пользовательская маска (umask) или маска доступа - указание на то, какие права надо удалить при создании нового файла или каталога из стандартного набора прав, присваиваемых файлу (каталогу).


Поскольку Linux - система многозадачная, одновременно может быть запущено много процессов. Впрочем, слово "одновременно" здесь применено не совсем корректно, поскольку на самом деле в каждый момент времени выполняется только один процесс. (Для точности следует заметить, что в многопроцессорных системах, на которых Linux тоже может работать, одновременно могут выполняться несколько процессов, но мы рассматриваем только однопроцессорные системы). Планировщик процессов выделяет каждому процессу небольшой квант времени и по истечении этого кванта передает управление следующему процессу. Кванты времени, выделяемые каждому процессу, так малы, что у пользователя создается иллюзия одновременного выполнения многих процессов. А для того, чтобы некоторые, наиболее важные процессы, получали больше процессорного времени, для каждого процесса установлен приоритет.

Пользователи могут "общаться" с процессами путем посылки им сигналов. Процессы тоже общаются друг с другом посредством сигналов. Когда мы нажимаем комбинацию клавиш <Ctrl>+<C>, чтобы завершить выполнение какой-то программы, мы фактически посылаем соответствующему процессу сигнал "Завершить работу". Завершаясь, процесс посылает родительскому процессу сигнал о своем завершении. Но бывают случаи, когда родительский процесс завершается раньше дочернего. Процессы, не имеющие родителя, называются "сиротами". "Сироты" автоматически усыновляются процессом init, который и принимает сигналы об их завершении. Если процесс-родитель по каким-то причинам не может принять сигнал о завершении дочернего процесса, то процесс-потомок превращается в "зомби" и получает статус Z. Процессы-зомби не занимают процессорного времени (т. е. их выполнение прекращается), но соответствующие им структуры ядра не освобождаются. Уничтожение таких процессов - одна из обязанностей системного администратора. Наконец, процесс может надолго "впасть в сон", прервать который не удается. Статус таких процессов обозначается символом D. Уничтожить их удается только при перезагрузке системы.

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

Надо еще упомянуть, что процессы могут запускать ("внутри себя") отдельные нити (thread), или потоки. Нити - это параллельно выполняемые части одной программы, которые в Linux реализованы как процессы, запускаемые со специальным флагом. С точки зрения системы они отличаются от других процессов только тем, что для них не создается отдельное окружение, они выполняются в среде родительского процесса.

Приведенных данных о процессах нам пока достаточно (к рассмотрению процессов мы еще вернемся в лекции 8).


Освобождение дискового пространства


Теперь вы знаете, как определить, сколько места займет на диске устанавливаемый пакет, и каков объем свободного пространства на диске. Рассмотрим, что можно сделать, если свободного места не достаточно. Надо заметить, что при стандартной инсталляции ОС Linux на диске образуется большое количество файлов, которые вам никогда не понадобятся. В то же время довольно трудно в огромной массе файлов найти те, которые вам не нужны (тем более, что они спрятаны глубоко в дебрях структуры каталогов). Поэтому я расскажу вкратце о своем опыте поиска ненужных файлов, надеясь, что этот опыт окажется полезен читателю.

Однажды мне пришлось устанавливать Linux (Black Cat 6.0) на 486-ой компьютер с жестким диском объемом 350 Мбайт. Хотя при установке я старался выбрать минимально возможную конфигурацию ПО, все равно после завершения установки диск оказался заполнен более чем на 90%. Перечислю вкратце те действия, которые позволили мне освободить достаточно места на диске для установки новых пакетов.

Первым делом стоит подумать об удалении части пакетов ПО, установленных при инсталляции системы. Для того, чтобы решить, какой пакет или пакеты можно удалить, дайте команду [root]# rpm -qa > packages

Полученный файл packages будет содержать список всех установленных в системе пакетов ПО. Этот список можно проанализировать с целью выявления ненужных вам пакетов и удалить таковые с помощью команды rpm с параметром -e. При этом будут удалены все созданные при инсталляции пакета файлы и каталоги. Этот способ самый безопасный, поскольку программа rpm предварительно проверит, не используется ли данный пакет какой-либо другой программой, и при наличии такой зависимости выдаст соответствующее предупреждение, а удалять что-либо откажется. Отмечу только, что удаление пакетов надо выполнять с правами root.

У меня, например, в полученном таким образом файле packages встретилось упоминание пакета AfterStep-APPS-990329-2. Выполнив команду

[root]# rpm -qi AfterStep-APPS

я выяснил, что этот пакет содержит некие апплеты к оконному менеджеру AfterStep. Поскольку такой менеджер я не использовал, я удалил этот пакет, а также и сам пакет AfterStep, с помощью команд


[root]# rpm -e AfterStep [root]# rpm -e AfterStep-APPS

Это освободило около 5800 Кбайт. Воспользовавшись таким приемом, вы можете удалить все пакеты, которые не используете. Я, например, удалил такие пакеты, как gnome-core, gnome-libs, gnome-audio, поскольку в качестве графической среды использую не Gnome, а KDE. Отмечу, что когда я попытался удалить gnome-core, программа rpm отказалась это сделать, сообщив, что часть этого пакета используется пакетом xmms-gnome. Еще больше неудовлетворенных зависимостей образуется при попытке удалить gnome-libs. Однако поскольку все упоминавшиеся в этих сообщениях пакеты так или иначе были связаны с Gnome, я рискнул удалить их все, а также другие пакеты, которые были с ними связаны1). В результате освободилось около 7800 Кбайт дискового пространства.

Заглянув в каталог /usr/man, я обнаружил два подкаталога со страницами руководства man на французском и испанском языках. После их удаления освободилось еще около 100 Кбайт.В каталоге /usr/lib/kbd/keymaps можно, по-видимому, удалить подкаталоги, в которых хранятся таблицы раскладок клавиатуры, предназначенные для других типов микропроцессоров, а в /usr/lib/kbd/keymaps/i386 - подкаталоги для раскладок, отличных от qwerty.

Аналогичным образом удаляются раскладки клавиатуры для различных языков, которыми вы не пользуетесь (скажем, для китайского или тайского). Эти шрифты расположены в каталоге /usr/lib/kbd/keymaps/i386/qwerty. Можно попробовать удалить ненужные шрифта из /usr/lib/kbd/consolefonts, однако если в начале таблицы раскладки клавиатуры указывается, для какого языка она служит, то о назначении файла шрифта приходиться судить по его названию.

Поскольку по умолчанию в системе устанавливаются средства локализации для различных стран (которые вам, по-видимому, не потребуются), то можно удалить из каталога /usr/share/locale все подкаталоги, соответствующие не нужным вам языкам. Всего там около 16 Мбайт, так что удаление ненужного может дать около 15 Мбайт освобожденного пространства. Еще более 2 Мбайт может дать очистка каталогов /usr/share/i18n/locales и /usr/share/i18n/charmaps.

В каталоге /usr/share/doc/HTML/ имеются подкаталоги с документацией на разных языках, значительная часть которой вам, по-видимому, не нужна. Я оставил в этом каталоге только три подкаталога en, ru, default, причем последний является просто ссылкой на подкаталог en, так что фактически там осталось только 2 подкаталога. Удаление этой документации освободило около 500 Кбайт.

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


Перевод процесса в фоновый режим


Если вы запускаете какой-то процесс путем запуска программы из командной строки, то обычно процесс запускается, как говорят, "на переднем плане". Это значит, что процесс "привязывается" к терминалу, с которого он запущен, воспринимая ввод с этого терминала и осуществляя на него вывод. Но можно запустить процесс в фоновом режиме, когда он не связан с терминалом. Для запуска процесса в фоновом режиме в конце командной строки запуска программы добавляют символ &.

В оболочке bash имеются две встроенные команды, которые служат для перевода процессов на передний план или возврата их в фоновый режим. Но прежде, чем рассказывать об этих командах, надо рассказать о команде jobs. Она всегда вызывается без аргументов и показывает задания, запущенные из текущего экземпляра shell. В начале каждой строки вывода этой команды указывается порядковый номер задания в виде числа в квадратных скобках. После номера указывается состояние процесса: stopped (остановлен), running (выполняется) или suspended (приостановлен). В конце строки указывается команда, которая исполняется данным процессом. Один из номеров выполняющихся заданий помечен знаком +, а еще один - знаком -. Процесс, помеченный знаком +, будет по умолчанию считаться аргументом команд fg или bg, если они вызываются без параметров. Процесс, помеченный знаком -, получит знак +, если только завершится по какой-либо причине процесс, который был помечен знаком +.

А теперь можно рассказать и о командах fg и bg, которые служат для перевода процессов на передний план или возврата их в фоновый режим. В качестве аргумента обеим этим командам передаются номера тех заданий, которые присутствуют в выводе команды jobs. Если аргументы отсутствуют, то подразумевается задание, помеченное знаком +. Команда fg переводит указанный в аргументе процесс на передний план, а команда bg - переводит процесс в фоновый режим. Одной командой bg можно перевести в фоновый режим сразу несколько процессов, а вот возвращать их на передний план необходимо по одному.



Приоритеты, значение nice и команда renice


О том, что такое приоритет, мы уже кратко говорили в начале этой лекции, Но некоторые факты надо изложить дополнительно. Приоритет для каждого процесса устанавливается в тот момент, когда процесс порождается. Приоритет процесса определяется так называемым "значением nice", которое лежит в пределах от +20 (наименьший приоритет, процесс выполняется только тогда, когда ничто другое не занимает процессор), до -20 (наивысший приоритет).

Значение nice устанавливается для каждого процесса в момент порождения этого процесса и при обычном запуске команд или программ принимается равным приоритету родительского процесса. Но существует специальная команда nice, которая позволяет изменять значение nice при запуске программы. Формат использования этой программы:

nice [- adnice] command [args]

где adnice - значение (от -20 до +19), добавляемое к значению nice процесса-родителя. Полученная сумма и будет значением nice для запускаемого процесса. Отрицательные значения может устанавливать только суперпользователь. Если опция - adnice не задана, то по умолчанию для процесса-потомка устанавливается значение nice, увеличенное на 10 по сравнению со значением nice родительского процесса. Очевидно, что если вы не суперпользователь, то применять эту команду имеет смысл только тогда, когда вы хотите запустить некий процесс с низким значением приоритета.

Другая команда, renice, служит для изменения значения nice для уже выполняющихся процессов. Ее формат таков:

renice priority [[-p] PID] [[-g] grp] [[-u] user]

Например, команда

[root]# renice -1 987 -u daemon -p 32

увеличивает на 1 приоритет процессов с PID 987 и 32, а также всех процессов пользователя daemon.

Суперпользователь может изменить приоритет любого процесса в системе. Другие пользователи могут изменять значение приоритета только для тех процессов, для которых данный пользователь является владельцем. При этом обычный пользователь может только уменьшить значение приоритета (увеличить значение nice), но не может увеличить приоритет, даже для возврата значения nice к значению, устанавливаемому по умолчанию. Поэтому процессы с низким приоритетом не могут породить "высокоприоритетных детей".



Процедура загрузки ОС Linux


Для начала надо отметить, что все, о чем будет рассказано в этом разделе, относится к дистрибутиву Red Hat и его аналогам. В других дистрибутивах (например, Debian) процедуры загрузки могут быть организованы иначе.



Процесс init и файл /etc/inittab


Как вы знаете, после включения питания компьютера и завершения тестирования аппаратной части BIOS считывает из первого сектора загрузочного диска короткую программу-загрузчик. Эта программа запускает основной системный загрузчик (например, lilo), который, в свою очередь, загружает в память ядро системы, которое обычно хранится в файле vmlinuz-x.y.z-a в каталоге /boot. Здесь x.y.z - это номер версии ядра, а вместо символа a часто стоит указание на какие-то конкретные модификации ядра. Впрочем, название файла ядра может быть и другим, для загрузчика это не имеет значения, только это имя надо указать в конфигурационном файле загрузчика.

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

Точный список этих операций зависит от так называемого уровня выполнения (run level). Уровень выполнения определяет перечень действий, выполняемых процессом init, и состояние системы после загрузки, т. е. конфигурацию запущенных процессов. Уровень выполнения идентифицируется одним символом. В ОС Linux существует 8 основных уровней выполнения:

0 - остановка системы;1 - однопользовательский режим (для специальных случаев администрирования);2 - многопользовательский режим без NFS (то же, что и 3, если компьютер не работает с сетью);3 - полный многопользовательский режим;4 - использование не регламентировано;5 - обычно используется для запуска системы в графическом режиме;6 - перезагрузка системы;S (или s) - примерно то же, что и однопользовательский режим, но S и s используются в основном в скриптах.


Как видите, уровни 0, 1 и 6 зарезервированы для особых случаев. Относительно того, как использовать уровни со 2 по 5, единого мнения не существует. Некоторые системные администраторы используют разные уровни для того, чтобы задать разные варианты работы, например, на одном уровне запускается графический режим, на другом работают в сети и т. д. Вы можете сами решить, как использовать разные уровни для создания разных вариантов загрузки. Но для начала проще всего воспользоваться тем способом определения разных уровней, который был задан при установке.

Первым делом после старта процесс init считывает свой конфигурационный файл /etc/inittab. Этот файл состоит из отдельных строк. Если строка начинается со знака # или пуста, то она игнорируется. Все остальные строки состоят из 4 полей, разделенных двоеточиями:

id:runlevels:action:process

где:

id - идентификатор строки. Это произвольная комбинация, содержащая от 1 до 4 символов. В файле inittab не может быть двух строк с одинаковыми идентификаторами;runlevels - уровни выполнения, на которых эта строка будет задействована. Уровни задаются цифрами или буквами без разделителей, например, 345;process - процесс, который должен запускаться на указанных уровнях. Другими словами в этом поле указывается имя программы, вызываемой при переходе на указанные уровни выполнения;action - действие.

В поле action стоит ключевое слово, которое определяет дополнительные условия выполнения команды, заданной полем process. Допустимые значения поля action:

respawn - перезапустить процесс в случае завершения его работы;once - выполнить процесс только один раз при переходе на указанный уровень;wait - процесс будет запущен один раз при переходе на указанный уровень и init будет ожидать завершения работы этого процесса, прежде, чем продолжать работу;sysinit - это ключевое слово обозначает действия, выполняемые в процессе загрузки системы независимо от уровня выполнения (поле runlevels игнорируется). Процессы, помеченные этим словом, запускаются до процессов, помеченных словами boot и bootwait;boot - процесс будет запущен на этапе загрузки системы независимо от уровня выполнения;bootwait - процесс будет запущен на этапе загрузки системы независимо от уровня выполнения, и init будет дожидаться его завершения;initdefault - строка, в которой это слово стоит в поле action, определяет уровень выполнения, на который система переходит по умолчанию. Поле process в этой строке игнорируется. Если уровень выполнения, используемый по умолчанию, не задан, то процесс init будет ждать, пока пользователь, запускающий систему, не введет его с консоли;off - игнорировать данный элемент;powerwait - позволяет процессу init остановить систему, когда пропало питание. Использование этого слова предполагает, что имеется источник бесперебойного питания (UPS) и программное обеспечение, которое отслеживает состояние UPS и информирует init о том, что питание отключилось;ctrlaltdel - разрешает init перезагрузить систему, когда пользователь нажимает комбинацию клавиш <Ctrl>+<Alt>+<Del> на клавиатуре. Обратите внимание на то, что системный администратор может определить действия по комбинации клавиш <Ctrl>+<Alt>+<Del>, например игнорировать нажатие этой комбинации (что вполне разумно в системе, где много пользователей).



Этот список не является исчерпывающим. Более подробно о файле inittab можно узнать из man-страниц init (8), inittab (5) и getty (8).

Обработка файла /etc/inittab процессом init начинается в однопользовательском режиме (уровень 1), в котором единственным пользователем является пользователь root, работающий с консоли. Первым делом init находит строку, которая определяет, какой уровень выполнения запускается по умолчанию:

id:3:initdefault:

Это и будет тот уровень, в котором запустится и будет работать система после загрузки, поэтому естественно, что нельзя указывать в строке initdefault уровни 0 и 6.

Далее init выполняет команды, указанные в строке с ключевым словом sysinit. В стандартной конфигурации здесь выполняется скрипт rc.sysinit из каталога /etc/rc.d. После этого процесс init просматривает файл /etc/inittab и выполняет скрипты, соответствующие однопользовательскому уровню (1 во втором поле строки), всем уровням (строки с пустым вторым полем) и уровню, заданному по умолчанию. В строке, соответствующей уровню по умолчанию, вызывается скрипт rc из каталога /etc/rc.d. Этот скрипт один и тот же для всех уровней (т. е. обязательно вызывается, на какой бы уровень выполнения не загружалась система), только в зависимости от уровня выполнения ему передается соответствующее значение параметра вызова, так что, например, для 3-го уровня вызов скрипта осуществляется строкой типа

l3:3:wait:/etc/rc.d/rc 3

Функции, выполняемые скриптами rc.sysinit и rc мы подробно рассмотрим ниже, а сейчас вернемся к краткому обзору действий процесса init.

Следующая важная функция, которую выполняет этот процесс (на уровнях со 2 по 5) - запуск шести виртуальных консолей (процессов getty), чтобы предоставить пользователям возможность регистрироваться в системе с терминалов. Для этого init порождает процессы, именуемые getty-процессами (от "get tty" - получить терминал), и следит за тем, какой из процессов открывает какой терминал. Каждый getty-процесс устанавливает свою группу процессов, используя вызов системной функции setpgrp, открывает отдельную терминальную линию и обычно приостанавливается во время выполнения функции open до тех пор, пока машина не получит аппаратную связь с терминалом. Когда функция open возвращает управление, getty-процесс исполняет программу login (регистрации в системе), которая требует от пользователей, чтобы они идентифицировали себя указанием регистрационного имени и пароля. Если пользователь зарегистрировался успешно, программа login, наконец, запускает командный процессор shell и пользователь приступает к работе. Этот вызов shell именуется "login shell" (регистрационный shell, регистрационный интерпретатор команд). Процесс, связанный с shell, имеет тот же идентификатор, что и начальный getty-процесс, поэтому login shell является процессом, возглавляющим группу процессов.

Если пользователь не смог успешно зарегистрироваться, программа регистрации завершается через определенный промежуток времени, закрывая открытую терминальную линию, а процесс init порождает для этой линии следующий getty-процесс, открывающий терминал, вместо прекратившего существование.

После завершения загрузки init продолжает работать в фоновом режиме, отслеживая изменения в состоянии системы. Например, если будет подана команда telinit, позволяющая изменить уровень выполнения, процесс init обеспечит выполнение команд, заданных для нового уровня файлом /etc/inittab. Этот файл прочитывается заново и в случае поступления сигнала HUP; эта особенность избавляет от необходимости перезагружать систему для того, чтобы сделать изменения в начальной конфигурации.

Таким образом, процесс начальной загрузки init постоянно находится в оперативной памяти и при получении соответствующих сигналов повторно выполняет цикл чтения из файла /etc/inittab инструкций о том, что нужно делать, причем этот набор инструкций различен для разных уровней выполнения.

Когда суперпользователь останавливает систему (командой shutdown), именно init завершает все другие исполняющиеся процессы, размонтирует все файловые системы и останавливает процессор.



Замечание

В приведенном описании опущены многие важные детали. Более подробное описание можно найти в man-страницах по init (8), inittab (5) и getty (8), а также в документах "Linux Documentation Project's Serial HOWTO".


Замечание

Если вы некорректно модифицируете файл /etc/inittab, система может перестать загружаться. Так что перед внесением каких-либо изменений в этот файл по меньшей мере запаситесь загрузочной дискетой и сохраните копию исходного файла на случай фатальных ошибок.

Процессы, происходящие при регистрации пользователя


Последовательность событий при полной регистрации выглядит так.

Пользователь вводит регистрационное имя по приглашению login: процесса getty.getty выполняет программу login, используя в качестве аргумента указанное имя.login запрашивает пароль и сверяет имя и пароль с записанными в файле /etc/passwd.login выводит на экран из файла /etc/motd "сообщение дня".login запускает интерпретатор shell, указанный в бюджете пользователя и устанавливает переменную среды TERM.shell выполняет соответствующие файлы запуска, после чего выводит на экран приглашение и ожидает ввода информации.

О файлах запуска надо сказать несколько слов дополнительно. В домашнем каталоге пользователя находятся несколько личных файлов конфигурации. Если таких файлов в домашнем каталоге нет, то после входа в систему будут прочитаны глобальные файлы, содержащие значения "по умолчанию". Если в качестве оболочки используется Bourne-shell, выполняется файл .profile, если C-shell - .login и .cshrc, если Korn-shell - .profile и .kshrc (мы в дальнейшем рассматриваем только случай оболочки bash).

Если вы хотите установить для себя переменные среды (PATH или другие), отличающиеся от тех, которые по умолчанию задаются для всех пользователей, или вы хотите изменить сообщение, которое будет выдаваться вам после входа в систему, или хотите, чтобы после того, как вы войдете в систему, автоматически запускалась какая-то программа, вы можете сделать это с помощью следующих файлов:

/home/your_home/.bashrc - устанавливает ваши алиасы (т. е. псевдонимы или альтернативные имена команд, удобные для упрощения ввода часто используемых команд, имеющих значительную длину из-за большого количества опций) и функции;

/home/your_home/.bash_profile или /home/your_home/.profile - устанавливает переменные среды и запускает ваши программы.

Если такие файлы существуют (заметим, что это скрытые файлы), они будут считаны после входа в систему, и команды, записанные в них, будут выполнены.

Если вы хотите, чтобы при входе пользователя в систему выполнялся какой-то скрипт, то можно вызов этого скрипта поместить в файл ~/.profile. Это может сделать и сам пользователь.

Эти команды будут исполняться только при входе пользователя в систему. Можно, например, приветствовать каждого пользователя по имени или посылать индивидуальные сообщения:

if test $USER = jim; then echo 'Здравствуйте, уважаемый Jim!' fi



Программные средства для конфигурирования системы


Как вы уже, наверное, поняли, самый эффективный способ настройки системы в целом и отдельных служб состоит в редактировании конфигурационных файлов. Однако, для начинающего пользователя этот метод не самый лучший, поскольку надо иметь достаточно большой объем знаний по ОС LINUX, чтобы правильно отредактировать даже простейшие из этих файлов. К счастью, в состав дистрибутива Red Hat Linux входят специальные программные средства для конфигурирования системы, существенно облегчающие выполнение этих функций. Пожалуй, наиболее часто употребляемой программой такого сорта является linuxconf (http://www.solucorp.qc.ca/linuxconf). Эта программа может работать как в текстовом, так и в графическом режиме.

На рис. 8.6 приводится вид окна, которое появляется при запуске программы linuxconf в графическом режиме. Первоначально правое поле окна пустое.


Рис. 8.6.  Основное окно программы linuxconf

В левой части окна отображается древовидная структура групп конфигурируемых параметров. Если данная группа параметров содержит более мелкие подгруппы, это обозначается крестиком перед названием группы. Если щелкнуть мышкой по этому крестику, то развернется список подгрупп. Если крестик перед названием группы отсутствует, щелчок мыши по этому названию приводит к появлению в правой части окна списка параметров данной группы. Например, группа параметров User accounts (Счета пользователей) выглядит так, как изображено на рис. 8.7.


Рис. 8.7.  Окно управления счетами пользователей



Редактирование файла /etc/fstab


Файловая система - один из важнейших общесистемных сервисов. Монтирование основных файловых систем осуществляется на этапе загрузки системы. Другие (дополнительные) файловые системы монтируются командой mount, которая была рассмотрена в лекции 4. Конфигурационным файлом для команды монтирования является файл /etc/fstab, который тоже был рассмотрен в лекции 4. Поэтому здесь не будем повторяться, а ограничимся тем, что приведем несколько советов, которые позволят несколько снизить трудоемкость процедур монтирования файловых систем.

Одним из неудобств ОС Linux по сравнению с Windows является необходимость монтировать файловую систему при работе с дискетами и вообще сменными накопителями (CD-ROM, Zip фирмы Iomega и т.п.). Каждый раз при смене диска приходится заново монтировать и размонтировать файловую систему. Впрочем, и для получения доступа к некоторым разделам жесткого диска тоже необходимо выполнять команды монтирования, если только не заставить систему делать это автоматически, изменив соответствующим образом файл /etc/fstab.

Чтобы не повторять одинаковых действий при каждом перезапуске системы и сократить число необходимых символов, которые приходится вводить с клавиатуры при выполнении операций монтирования, целесообразно выполнить следующее. Сначала создайте точки монтирования (пустые каталоги) для каждого из устройств или внешних файловых систем, которые вы будете периодически подключать: гибкого диска, CD-ROM, ZIP-диска, сетевых дисков, которые будут подключаться по NFS. Это можно сделать из Midnight Commander или следующими командами:

[root]# cd /mnt [root]# mkdir floppy; mkdir cdrom; mkdir win; mkdir zip; mkdir server

Теперь отредактируйте файл /etc/fstab, добавив в него следующие строки, соответствующие тем устройствам, которые имеются в вашей системе (то, что в файле было до вас, лучше не трогать):

/dev/fd0 /mnt/floppy vfat user,noauto 0 1 /dev/cdrom /mnt/cdrom iso9660 ro,user,noauto 1 /dev/sda4 /mnt/zip vfat user,noauto,exec 0 1 /dev/hda1 /mnt/win vfat user,noauto 0 1 server:/export /mnt/server nfs defaults


Редактирование файла /etc/fstab можно выполнить и с помощью программы linuxconf, о которой будет рассказано ниже (команда File systems | Access local drive).

Если правильно настроен файл /etc/fstab, то обращение к гибкому диску или дискам CD-ROM осуществляется довольно просто. В графической среде KDE чтобы смонтировать диск надо просто щелкнуть правой кнопкой мыши по соответствующему значку и выбрать в появившемся меню команду Монтировать. Чтобы добиться примерно такого же эффекта в программе Midnight Commander, надо добавить в меню этой программы (файл /usr/lib/mc/mc.mnu) команды монтирования и размонтирования дисков. Вот пример таких команд для гибких дисков:

m Смонтировать дискету mount /mnt/floppy d Размонтировать дискету umount /mnt/floppy

(предполагается, что в файле /etc/fstab прописана строка, определяющая устройство и тип файловой системы для /mnt/floppy). После этого смена дискеты в Midnight Commander под Linux будет ничем не сложнее аналогичного действия в программе Norton Commander или в FAR под MS Windows: для того, чтобы смонтировать дискету, достаточно будет последовательно нажать клавиши <F2> и <M>, для размонтирования - клавиши <F2> и <D>.


Сигналы и команда kill


Сигналы - это средство, с помощью которого процессам можно передать сообщения о некоторых событиях в системе. Сами процессы тоже могут генерировать сигналы, с помощью которых они передают определенные сообщения ядру и другим процессам. С помощью сигналов можно осуществлять такие акции управления процессами, как приостановка процесса, запуск приостановленного процесса, завершение работы процесса. Всего в Linux существует 63 разных сигнала, их перечень можно посмотреть по команде

[user]$ kill -l

Сигналы принято обозначать номерами или символическими именами. Все имена начинаются на SIG, но эту приставку иногда опускают: например, сигнал с номером 1 обозначают или как SIGHUP, или просто как HUP.

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

Можно заставить процесс игнорировать или блокировать некоторые сигналы. Игнорируемый сигнал просто отбрасывается процессом и не оказывает на него никакого влияния. Блокированный сигнал ставится в очередь на выдачу, но ядро не требует от процесса никаких действий до разблокирования сигнала. После разблокирования сигнала программа его обработки вызывается только один раз, даже если в течение периода блокировки данный сигнал поступал несколько раз.

В табл. 8.1. приведены некоторые из часто встречающихся сигналов.

Таблица 8.1. Сигналы

№ИмяОписаниеМожно перехватыватьМожно блокироватьКомбинация клавиш
1HUPHangup. ОтбойДаДа
2INTInterrupt. В случае выполнения простых команд вызывает прекращение выполнения, в интерактивных программах - прекращение активного процессаДаДа<Ctrl>+<C> или <Del>
3QUITКак правило, сильнее сигнала InterruptДаДа<Ctrl>+<\>
4ILLIllegal Instruction. Центральный процессор столкнулся с незнакомой командой (в большинстве случаев это означает, что допущена программная ошибка). Сигнал отправляется программе, в которой возникла проблемаДаДа
8FPEFloating Point Exception. Вычислительная ошибка, например, деление на нольДаДа
9KILLВсегда прекращает выполнение процессаНетНет
11SEGVSegmentation Violation. Доступ к недозволенной области памятиДаДа
13PIPEБыла предпринята попытка передачи данных с помощью конвейера или очереди FIFO, однако не существует процесса, способного принять эти данныеДаДа
15TERMSoftware Termination. Требование закончить процесс (программное завершение)ДаДа
17CHLDИзменение статуса порожденного процессаДаДа
18CONTПродолжение выполнения приостановленного процессаДаДа
19STOPПриостановка выполнения процессаНетНет
20TSTRСигнал останова, генерируемый клавиатурой. Переводит процесс в фоновый режимДаДа<Ctrl>+<Z>


Как видите, некоторые сигналы можно сгенерировать с помощью определенных комбинаций клавиш. Но такие комбинации существуют не для всех сигналов. Зато имеется команда kill, которая позволяет послать заданному процессу любой сигнал. Как уже было сказано, с помощью этой команды можно получить список всех возможных сигналов, если указать опцию -l. Если после этой опции указать номер сигнала, то будет выдано его символическое имя, а если указать имя, то получим соответствующий номер.

Для посылки сигнала процессу (или группе процессов) можно воспользоваться командой kill в следующем формате:

[user]$ kill [-сигн] PID [PID..]

где сигн - это номер сигнала, причем если указание сигнала опущено, то посылается сигнал 15 (TERM - программное завершение процесса). Чаще всего используется сигнал 9 (KILL), с помощью которого суперпользователь может завершить любой процесс. Но сигнал этот очень "грубый", если можно так выразиться, поэтому его использование может привести к нарушению порядка в системе. Поэтому в большинстве случаев рекомендуется использовать сигналы TERM или QUIT, которые завершают процесс более "мягко".

Естественно, что наиболее часто команду kill вынужден применять суперпользователь. Он должен использовать ее для уничтожения процессов-зомби, зависших процессов (они показываются в листинге команды ps как <exiting>), процессов, которые занимают слишком много процессорного времени или слишком большой объем памяти и т. д. Особый случай - процессы, запущенные злоумышленником. Но обсуждение этого особого случая выходит за рамки данной книги.


Сколько осталось места на диске?


При установке новых пакетов очень часто возникает одна проблема, хорошо знакомая всем пользователям компьютеров: недостаток дискового пространства. Поэтому перед установкой нового пакета надо вначале ответить на вопрос о том, достаточно ли места на диске для размещения данного ПО?

Программа rpm позволяет определить, сколько места потребуется для установки пакета: для этого надо дать запрос вида rpm -qpi имя_пакета и в строке Size будет выдано, сколько байт займет пакет. Осталось узнать, есть ли столько свободного места на диске.

Для определения объема свободного пространства на диске вы можете воспользоваться командой df. Если дать эту команду без аргументов, то она сообщит, каков объем дискового пространства во всех смонтированных файловых системах, сколько используется и сколько еще свободно. Единицей измерения при этом служит 1 килобайтный блок. Если вы хотите получить сведения об объеме свободного пространства в более привычных мегабайтах, дайте команду с параметром -h:

[user]$ df -h

Сведения о количестве свободного пространства на конкретном диске можно получить, если задать в качестве параметра имя файла устройства:

[user]$ df -h /dev/hda2

Если вместо имени файла устройства указать полное (с указанием пути) имя произвольного файла или каталога, то вы получите данные о количестве используемого и свободного места в файловой системе, содержащей указанный файл (каталог).

Если место еще есть, то можно перейти к установке пакета. Хуже владельцам компьютеров с дисками маленького объема: тут каждый раз надо думать, как бы освободить место для новой программы, другими словами, что уже можно с диска удалить. Удалять можно отдельные файлы, но, конечно, с точки зрения освобождения пространства, эффективнее удалять целыми каталогами или пакетами.

Файлы (каталоги) удаляются в том случае, если они (размещенные в них файлы) вам более не нужны. Естественно, что кандидатами на удаление в первую очередь рассматриваются каталоги (или файлы) самого большого объема, и тут оказывается полезной команда du (disc usage).

Команда du позволяет узнать, сколько места занимает конкретный файл или подкаталог. Для этого надо дать команду следующего формата (в примере мы узнаем объем каталога /usr/lib)

[user]$ du -ks /usr/lib

Результатом выполнения данной команды будет примерно такая строка

91418 /usr/lib

которая означает, что каталог /usr/lib занимает 91 418 Кбайт (опция k указывает, что объем должен выдаваться в килобайтах). Опция s задана для того, чтобы выводился только суммарный объем каталога. Если вы ее опустите, то получите данные об объеме каждого подкаталога и файла в указанном каталоге, а это очень много информации. Впрочем, последней строкой все равно будет выведен суммарный объем каталога.

Если маленькую s заменить на большую S, то выводиться будет только информация об объеме подкаталогов (но не файлов), что иногда тоже полезно. О других опциях указанных команд вы можете узнать на соответствующих man-страницах или по команде info.



System V Init Editor ksysv


В оболочке KDE имеется очень удобная утилита для управления запускаемыми на разных уровнях службами. Она называется ksysv или System V Init Editor и запускать ее надо от имени суперпользователя, иначе она будет только показывать существующую конфигурацию служб, но не будет позволять ее менять. После запуска этой программы вы увидите окно, изображенное на рис. 8.1.


увеличить изображение
Рис. 8.1.  Основное окно программы ksysv

В правом нижнем углу находятся 7 переключателей, которые позволяют определить, какие уровни исполнения будут отображаться (для уменьшения размера картинки я отключил отображение некоторых уровней). В левом поле отображаются все доступные в системе сервисы. Если поместить указатель мыши на название службы, появится краткое описание данной службы. А если щелкнуть левой кнопкой по имени службы, то это же описание появляется в отдельном окне (рис. 8.2), на двух других вкладках которого (рис. 8.3 и 8.4) можно узнать некоторые характеристики запускаемой программы, владельца и группу программы, а также их права и полномочия.


Рис. 8.2.  Окно свойств службы

На вкладке Service имеются 4 кнопки (вы можете видеть их на рисунке 8.2), которые позволяют запустить службу, перезапустить ее (Restart), остановить или редактировать соответствующий скрипт. Сообщения, выдаваемые при запуске, перезапуске, остановке службы, отображаются в нижнем поле основного окна программы. В двух рядах полей, отображаемых справа вверху, и соответствующих различным уровням выполнения, показаны службы, останавливаемые и запускаемые при переходе на каждый уровень. С помощью мыши можно удалить ссылку на какой-то сервис или добавить такую ссылку.


Рис. 8.3.  Вкладка General


Рис. 8.4.  Вкладка Permissions

На этом закончим рассмотрение данной программы. Конечно, не имея достаточного опыта пользоваться этой программой надо осторожно. Но, с другой стороны, откуда же опыту взяться, если его не набирать?



Управление пользователями


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

Во-первых, еще раз следует повторить, что не стоит работать в системе от имени суперпользователя (кроме случаев выполнения сугубо административных задач). Следовательно, как минимум два пользователя у вас должны быть заведены, назовем их root и user. Но обходиться только двумя пользователями удается далеко не всегда. Даже на домашнем компьютере приходится давать доступ детям или другим членам семьи, а на служебном компьютере может потребоваться дать ограниченный доступ другим сотрудникам организации. Кроме того, в системе всегда автоматически заводится ряд пользователей для выполнения служебных задач. Поэтому задача управления актуальна и для персонального компьютера. Задача эта состоит из нескольких подзадач, а именно:

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

Рассмотрим кратко хотя бы основные из этих задач.

Для начала надо отметить, что список всех известных системе пользователей находится в файле /etc/passwd. Каждая строка этого файла соответствует одному пользователю и состоит из семи полей, разделенных двоеточиями:

регистрационное имя пользователя;зашифрованный пароль;UID (идентификатор пользователя);GID (идентификатор группы);информация о пользователе (обычно полное имя, должность и телефоны);домашний каталог пользователя;регистрационный shell.

С точки зрения системы поля GID и информация о пользователе не имеют никакого значения, а имя пользователя используется только на этапе входа пользователя в систему (логировании). Дальше система идентифицирует пользователя по его UID. Идентификатор группы включается в этот файл только по традиции, потому что включение пользователей в различные группы определяется теперь файлом /etc/group. Второе поле каждой строки тоже уже не содержит зашифрованного пароля, теперь в этом поле стоит просто звездочка (*), а зашифрованные пароли переместились в файл /etc/shadow. Дело в том, что с увеличением производительности компьютеров появилась возможность определять открытый пароль по зашифрованному методом простого перебора всех возможных комбинаций символов. А поскольку файл etc/passwd доступен по чтению всем пользователям, безопасность многопользовательской системы ставится под удар. Файл же /etc/shadow доступен только суперпользователю, что уменьшает, если не снимает совсем, эту угрозу.

Уже из описания файла /etc/passwd вы могли заключить, что заведение нового пользователя не заканчивается тем, что администратор прописывает в этом файле дополнительную строку. Процесс подключения нового пользователя состоит из следующих этапов:

занесение информации в файл /etc/passwd;задание исходного пароля для нового пользователя;создание для него домашнего каталога;копирование в этот каталог стандартных вариантов файлов запуска;установка адреса электронной почты и почтовых псевдонимов;включение пользователя в необходимые группы;установка квот и ограничений.


Конечно, можно все эти этапы выполнять и вручную, но все же проще и удобнее воспользоваться имеющимися в системе специальными программными средствами. Как уже было описано в лекции 3, заводить в системе нового пользователя удобнее всего командой useradd. Однако перед тем, как заводить пользователя, надо подготовить типовые файлы конфигурации, которые используются при вводе новых пользователей, и располагаются в каталоге /etc/skel. Один полезный совет: не заводите много новых пользователей, пока вы не настроили конфигурационные файлы и не поместили образцы в /etc/skel/*. И сразу после того, как вы отредактировали какой-то конфигурационный файл, скопируйте его в /etc/skel/.

Команда useradd заводит бюджет нового пользователя, создает для него домашний каталог, копирует в него файлы конфигурации из каталога /etc/skel.1) В качестве аргумента команде должно быть указано имя пользователя, которое потом будет использоваться им для входа в систему. Кроме того, с помощью дополнительных опций можно задать:

данные о пользователя (имя и т.д.), записываемые в поле комментария в файле /etc/passwd (опция -c);имя или номер группы, к которой будет отнесен пользователь (опция -g);список групп, в которые будет включен данный пользователь (опция -G);UID пользователя, назначаемый вместо UID, задаваемого системой (опция -u);какая оболочка назначается пользователю (опция -s).

и еще некоторые параметры. С помощью опции -D можно изменять значения параметров, которые назначаются вновь создаваемому пользователю. Однако рассматривать эти возможности мы здесь не будем.

После ввода нового пользователя надо задать ему первоначальный пароль, что делается командой passwd login_name. После первого входа в систему пользователь должен будет поменять свой пароль с помощью той же команды (только login_name указывать ему не требуется).

Команда usermod имеет те же опции, что и useradd, только используется для изменения параметров существующего пользователя, причем на момент применения этой команды суперпользователем данный пользователь не должен быть логирован в системе2).

Каждый пользователь может быть включен в произвольное число групп. Включение пользователя в различные группы может быть осуществлено путем "ручного" редактирования файла /etc/group суперпользователем, а может быть выполнено с помощью команд groupadd и groupmod.

В процессе работы пользователь может сменить имя, с которым он вошел в систему (поработать в системе от имени другого пользователя). Как уже говорилось, для этого используется команда su. В качестве аргумента команде в простейшем случае передается имя или идентификатор пользователя, под которым мы хотим работать в системе. При этом, если перед именем пользователя стоит дефис, то для пользователя открывается новая сессия (происходит как бы "перелогирование"), а если дефиса нет, то изменяется только имя пользователя, а окружение (например, текущий каталог) не изменяется3). В любом случае выводится запрос на ввод пароля того пользователя, под чьим именем мы хотим дальше работать.

Команда su чаще всего используется для того, чтобы временно получить доступ к системе с правами суперпользователя. Параметр в этом случае указывать не требуется4).

После того, как вы поработали под чужим именем, достаточно выполнить команду exit, чтобы вернуть себе свое обычное имя.

Команда sg аналогична команде su, но используется для смены группы. Доступ предоставляется в том случае, если пользователь является членом указанной группы. В результате выполнения этой команды все вновь созданные файлы и запускаемые процессы получат новый идентификатор группы.

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

/etc/issue - сообщение, выдаваемое системой до приглашения "login:";/etc/motd - сообщение, выдаваемое системой после входа пользователя в систему.

Если вы хотите сделать эти сообщения более приветливыми, можете немного подкорректировать их. После корректировки можно переключиться в другую консоль и несколько раз войти в систему и выйти из нее, чтобы насладиться плодами своего труда. Но учтите, что скрипт /etc/rc.d/rc.local может перезаписывать файлы /etc/issue и /etc/motd при каждом перезапуске системы (у меня, например, RedHat перезаписывает файл /etc/issue и не трогает /etc/motd). То есть корректировать, возможно, надо не сами эти файлы, а скрипт /etc/rc.d/rc.local.


Управление процессами


Первым делом научимся определять, какие процессы в системе запущены. Для этого в Linux (как и во всех UNIX-системах) имеется команда ps. Если ее запустить без всяких параметров, то она выдает список процессов, запущенных в текущей сессии. Если вы хотите увидеть список всех процессов, запущенных в системе, надо задать ту же команду с параметром -ax.



Управление ресурсами


В этом разделе мы рассмотрим только один аспект управления ресурсами: как сэкономить тот или иной ресурс, точнее, как поступить в случае, если какого-то ресурса недостаточно. Основными ресурсами компьютера являются память и дисковое пространство. Того и другого, как известно, всегда не хватает. Вопросы экономии оперативной памяти уже вкратце рассмотрены, поскольку мы уже рассмотрели вопросы управления процессами и swap-файлами. Так что осталось только рассмотреть вопрос о том, как освободить место на жестком диске.



Загрузка в однопользовательском режиме


Процесс загрузки ОС, к сожалению, не всегда происходит так, как это задумано. Бывают случаи, когда система отказывается загружаться нормальным образом. Основные причины, приводящие к такой ситуации [П10.1]:

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

Первое, что надо знать пользователю в таком случае - как войти в контакт с системой, заставить ее воспринимать команды, чтобы попытаться что-то исправить. Один из возможных вариантов действий в этом случае - попытаться запустить систему в однопользовательском режиме, т. е. с уровнем выполнения 1 (см. лекцию 8).

Обычно о необходимости перехода в однопользовательский режим говорит то, что fsck не может автоматически восстановить файловую систему при загрузке. В таких случаях бывает необходимо запустить fsck в разделе /usr, для чего требуется, чтобы раздел был размонтирован, а этого нельзя сделать, пока не будут отключены почти все системные службы. Тут-то и требуется перейти в однопользовательский режим, в котором запускается минимум служб и сервисов системы.

Вы можете заставить процесс init загрузить систему в однопользовательском режиме, если зададите в командной строке загрузки ядра (в ответ на приглашение LILO boot:) аргумент single или emergency. Точнее, в тот момент, когда на экране появится сообщение

LILO boot:

необходимо ввести

linux single root=/dev/hda1

где вместо /dev/hda1 надо, естественно, подставить имя раздела с корневой файловой системой. Эта команда подключит корневой раздел и переведет систему в однопользовательский режим. В этом режиме в системе работает только один пользователь - администратор и запускается только очень небольшое число самых необходимых системных служб (system services) - включая login. (Заметим в скобках, что другим способом перевода системы в однопользовательский режим является применение команды telinit, однако в рассматриваемой ситуации, когда не проходит загрузка, воспользоваться этим способом вряд ли удастся).

Из соображений безопасности нормально сконфигурированная система при загрузке оболочки в однопользовательском режиме запросит пароль пользователя root. Это очевидно, так как иначе злоумышленнику было бы очень легко, задав соответствующие аргументы загрузчику LILO, войти в систему как root со всеми вытекающими отсюда последствиями. Чтобы злоумышленники не могли воспользоваться загрузкой в однопользовательском режиме для входа в систему без пароля, в соответствующую секцию файла lilo.conf должны быть добавлены две строки:

restricted password=<password>

После выхода в оболочку вы сможете отменить те правки, которые привели к краху или предпринять какие-то другие действия по выходу из сбойной ситуации. В книге Д. Такета и С.Барнета [П1.9] сказано, что этот способ не работает, если корневой раздел находится на диске SCSI. Однако, возможно, это относится к старым версиям Linux, поскольку один из моих корреспондентов (Р.Сузи) уверяет, что со SCSI-дисками никаких проблем нет, и система грузится с них в любом режиме, лишь был бы доступен initrd. Ну, а если загрузиться в однопользовательском режиме все же не получается, можно попробовать загрузить систему с загрузочной дискеты, так что позаботьтесь о том, чтобы такая дискета у вас была.

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



Запуск демонов


В разделе, посвященном описанию процесса загрузки, было сказано, что запуск системных сервисов осуществляется скриптом /etc/rc.d/rc, который вызывается с параметром, определяющим уровень запуска. В этом скрипте поочередно вызываются на выполнение все программы и скрипты, ссылки на которые содержатся в особом каталоге /etc/rc.d/rcN.d, где N - номер уровня выполнения. Ссылки в каталоге /etc/rc.d/rcN.d имеют имена KNNname и SNNname, где NN - порядковые номера, определяющие последовательность запуска скриптов, а name - имя соответствующей программы (это имя приводится, скорее всего, просто для удобства пользователей, его отсутствие ничего бы не изменило). Скритп /etc/rc.d/rc вначале последовательно (в порядке присвоенных номеров NN) вызывает программы, на которые ссылаются линки KNNname. При этом программы вызываются с аргументом stop, т. е. соответствующие службы останавливаются. Затем так же последовательно перебираются ссылки с именами SNNname и соответствующие программы вызываются с параметром start.

Давайте рассмотрим процесс запуска новой службы на примере запуска Web-сервера Apache. Я выбрал для примера этот сервис только потому, что на изолированном персональном компьютере вы его, скорее всего, не установили при инсталляции системы. Можно было бы для примера взять Samba-сервер или сервер FTP, или любую другую службу. Последовательность действий в любом случае одинакова.

Естественно, что вначале надо установить в системе соответствующий пакет. Находим на дистрибутивном диске или скачиваем из Интернета пакет (пусть это будет apache-1.3.19-3.i586.rpm). Выполняем установку

[root]# rpm -Uhv apache-1.3.19-3.i586.rpm

При необходимости предварительно устанавливаем требующиеся дополнительные пакеты. После этого надо произвести все необходимые настройки сервера. Мы здесь не рассматриваем вопросы настройки сервера Apache. Пока вы не закончили с его настройкой, можно запускать сервер "вручную", чтобы проверить, как все работает. После того, как настройка сервера завершена, можно заняться организацией его автоматической загрузки при запуске системы. Для этого переходим в каталог /etc/rc.d/rcN.d и создаем там ссылку на демон httpd:

[root]# ln -s /usr/sbin/httpd SNNapache


Значение NN для этой ссылки вы можете выбрать сами (в данном случае желательно запускать этот сервер после запуска других служб, поэтому значение надо брать по-больше, например, 98). После этого сервер Apache будет автоматически загружаться при старте системы. Если потом вы захотите отказаться от его автоматического запуска, просто удалите ссылку SNNapache из каталога /etc/rc.d/rcN.d.

Надо сказать, что существует специальная утилита для управления запуском сервисов (демонов) на разных уровнях выполнения. Она называется chkconfig. Если ее запустить с опцией -- list, вы получите полный список доступных сервисов, с указанием того, запускается или нет данный сервис на каждом уровне. Опции -- add и -- del служат для создания или удаления соответствующей ссылки в каталоге /etc/rc.d/rcN.d:

[root]# /sbin/chkconfig [--add | --del ] name

Формат команды для запуска или остановки сервиса следующий:

[root]# /sbin/chkconfig [-- level levels ] name [on | off | reset]

Так что запуск демона apache можно осуществить командой

[root]# /sbin/chkconfig --level 345 httpd on


Запуск и настройка общесистемных сервисов


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