Каждая уважающая себя система (или дистрибутив) на базе Linux содержит в своём составе так называемые man-страницы — «мануалы», т. е. справочные руководства. Ведь черпать информацию о том как пользоваться системой, в частности, о назначении команд, их опций, системной конфигурации и составляющих её (конфигурацию) файлов в итоге откуда-то нужно. Конечно, существуют большое количество технической литературы в виде изданий (как из открытых источников, так и коммерческих) по системному администрированию UNIX/Linux, однако всё это лишь дополняет (порой с качественным переводом) первоисточники, доступные локально «из коробки» в справочных системах Linux-дистрибутивов.
Конечно, man-руководства не содержат такой информации, к примеру, как сгенерировать и установить SSL-сертификат — они (man-руководства) и не предназначены для этого. Но любому системному администратору Linux получать информацию и исчерпывающее описание команд, библиотек функций, системной конфигурации и т. д. для обслуживаемого дистрибутива следует, в первую очередь, из справочной системы используемого дистрибутива.
Справочная система Linux
Для удобства организации и хранения справочной документации все страницы справочных руководств в Linux сгруппированы по тематическим разделам. В зависимости от дистрибутива одни и те же разделы могут содержать разный набор руководств. Допускается также деление разделов на подразделы. Следующая таблица демонстрирует состав основных разделов справочных руководств для некоторых систем:
Linux | Solaris | HP-UX | Содержание |
1 | 1 | 1 | Пользовательские приложения и команды |
2 | 2 | 2 | Коды ошибок системного ядра, а также описание системных вызовов |
3 | 3 | 3 | Описание функций системных библиотек |
4 | 7 | 7 | Сетевые протоколы, драйверы устройств |
5 | 4 | 4 | Описание стандартных форматов файлов |
6 | 6 | — | Информация о демонстрационных программах и играх |
7 | 5 | 5 | Различного рода документация |
8 | 1m | 1m | Команды системного администрирования |
9 | 9 | — | Спецификация системного ядра и внутренних интерфейсов |
— | — | 9 | Основная информация и описание, касающееся системы HP-UX |
По-умолчанию, без указания раздела команда man практически всегда находит требуемую информацию, поэтому на первый взгляд может показаться, что структура разделов не имеет особого значения. Но часты случаи, когда одна и та же искомая фраза содержится в разных контекстах и вот тут и полезно разбиение системной справки на разделы. К примеру, запрашиваемая фраза «passwd» подразумевает как команду, так и конфигурационных файл. Таким образом справочную информацию содержат (согласно вышеприведённой таблице) разделы 1, 4 и 5.
Стоит отметить, что в настоящее время разделы 8 всё чаще освобождаются и используются как резервные для последующего наполнения, а ранее содержащаяся в данных разделах информация (команды системного администрирования) перемещена (в большинстве дистрибутивов) в раздел 1. Также освобождаются и разделы 6.
Чтение интерактивной справки
Для того, чтобы вывести в терминал содержимое страниц по требуемому поисковому запросу, нужно выполнить команду man, которая имеет следующий синтаксис:
man [-опции] раздел заголовок
Команда man использует для вывода руководства утилиты less или more (а также и другие инструменты для постраничного вывода текста), при этом аккуратно форматирует текст для удобства его восприятия. Используемая утилита постраничной разбивки задаётся в переменной среды PAGER. Аргумент заголовок — это чаще всего имя команды, файла или даже устройства, о котором необходимо вывести разделы справки. Как правило, в первую очередь просматриваются разделы, содержащие информацию о командах, т. е. разделы 1, 6 и 8, а далее поиск производится по возрастанию номеров разделов.
Для указания конкретного раздела справки следует передавать параметр раздел, например:
$ man sync
выведет описание для команды sync, а команда:
$ man 2 sync
отобразит страницы с описанием системного вызова sync.
Если нужно получить представление о том, в каких разделах доступна информация по интересующему запросу, нужно дать команду man -k запрос:
$ man -k sync FD_CLR (3) - synchronous I/O multiplexing FD_ISSET (3) - synchronous I/O multiplexing FD_SET (3) - synchronous I/O multiplexing FD_ZERO (3) - synchronous I/O multiplexing _newselect (2) - synchronous I/O multiplexing adjtime (3) - correct the time to synchronize the system clock aio (7) - POSIX asynchronous I/O overview . . . aio_cancel (3) - cancel an outstanding asynchronous I/O request
Вывод содержит список страниц (с указанием раздела или подраздела справочной системы в скобках), для которых в строках их описаний содержится ключевое слово. Этого же можно добиться командой apropos запрос.
Хранение интерактивных руководств
Для определения, где в конкретной Linux-системе хранятся страницы справочных руководств (они же являются входными данными для обработки командой nroff, используемой man), достаточно выполнить команду manpath:
$ manpath /usr/local/man:/usr/local/share/man:/usr/share/man
В данном выводе представлены каталоги, в подкаталогах которых хранится справочная информация для систем Ubuntu. Пункты представленного списка разделены двоеточиями. Расположение для хранения man-страниц можно изменить. Поскольку данная опция хранится в переменной окружения MANPATH, то для этого нужно изменить значение этой переменной:
export MANPATH=/home/share/localman:/usr/share/man
По-умолчанию для Linux-систем справочные руководства хранятся в /usr/share/man. Команда man также поддерживает работу с кэшем страниц, но только тогда, когда соответствующие каталоги /var/cache/man и /usr/share/man доступны для записи, что критично в плане безопасности. В целях экономии дискового пространства справочные руководства хранятся в сжатом виде и для сжатия используется, как правило, утилита gzip. Сжатие страниц практически не сказывается на производительности во время работы со справочной системой, поскольку команда man способна очень быстро производить разархивацию.