Пока же Мефодий решил, что узнал о командной строке достаточно для того, чтобы воспользоваться главными командами Linux (по частоте их употребления при изучении системы) — man
и info
.
Работать с Linux, не заглядывая в документацию, практически невозможно. На это способны только седые аксакалы, у которых все нужные знания не то что в голове — в кончиках пальцев, и предубеждённые новички. Всем прочим настоятельно рекомендуется, приступая к работе, а тем более — к изучению Linux, пользоваться всеми доступными руководствами.
Все утилиты, все демоны Linux, все функции ядра и библиотек, структура большинства конфигурационных файлов, наконец, многие умозрительные, но важные понятия системы описаны либо в руководствах, либо в info-страницах, либо, на худой конец, в несистематизированной сопроводительной документации. Поэтому от пользователя системы не требуется заучивать все возможные варианты взаимодействия с ней. Достаточно понимать основные принципы её устройства и уметь находить справочную информацию. Эйнштейн говорил на этот счёт так: «Зачем запоминать то, что всегда можно посмотреть в справочнике?».
Страницы руководства (man)
Больше всего различной полезной информации содержится в страницах руководства (manpages). Каждая страница руководства (для краткости — просто «руководство») посвящена какому-нибудь одному объекту системы. Для того, чтобы посмотреть страницу руководства, нужно дать команду системе man объект
:
[methody@localhost methody]$ man cal
CAL(1) BSD General Commands Manual CAL(1)
NAME
cal - displays a calendar
SYNOPSIS
cal [-smjy13] [[month] year]
DESCRIPTION
Cal displays a simple calendar. If arguments are not specified, the cur-
rent month is displayed. The options are as follows:
Пример 5. Просмотр страницы руководства
«Страница руководства» занимает, как правило, больше одной страницы экрана. Для того, чтобы читать было удобнее, man запускает программу постраничного просмотра текстов — less
. Управлять программой less
просто: страницы перелистываются пробелом, а когда читать надоест, надо нажать «q
» (Quit). Перелистывать страницы можно и клавишами Page Up/Page Down, для сдвига на одну строку вперёд можно применять Enter или стрелку вниз, а на одну строку назад — стрелку вверх. Переход на начало и конец текста выполняется по командам «g
» и «G
» соответственно (Go). Полный список того, что можно делать с текстом в less
, выводится по команде «H
» (Help).
Страница руководства состоит из полей — стандартных разделов, с разных сторон описывающих заинтересовавший Мефодия объект — команду cal
. В поле NAME
содержится краткое описание объекта (такое, чтобы его назначение было понятно с первого взгляда). В поле SYNOPSIS
даётся формализованное описание способов использования объекта (с данном случае — того, как и с какими параметрами запускать команду cal
). Как правило, в квадратные скобки в этом поле заключены необязательные параметры команды, которые можно ей передать, а можно и опустить. Например, строка «[[month] year]
» означает, что в это месте командной строки параметров у команды может не быть вообще, может быть указан год или пара — месяц и год. Наконец, текст в поле DESCRIPTION
— это развёрнутое описание объекта, достаточное для того, чтобы им воспользоваться.
Одно из самых важных полей руководства находится в конце текста. Если в процессе чтения NAME
или DESCRIPTION
пользователь понимает, что не нашёл в руководстве того, что искал, он может захотеть посмотреть, а есть ли другие руководства или иные источники информации по той же теме. Список таких источников содержится в поле SEE ALSO
:
[methody@localhost methody]$ man man
. . .
SEE ALSO
apropos(1), whatis(1), less(1), groff(1), man.conf(5).
. . .
Пример 6. Поле SEE ALSO
руководства
До этого поля Мефодий добрался с помощью уже известной команды «G
». Не то, чтобы ему неинтересно было читать руководство по man
, скорее наоборот: им двигала любознательность. В Поле SEE ALSO
обнаружились ссылки на руководства по less
, groff
(программе форматирования страницы руководства), структуре конфигурационного файла для man
, а также по двум сопутствующим командам с такими говорящими названиями, что Мефодий немедленно применяет одну команду к имени другой, не заглядывая даже в документацию.
«Apropos» по-французски означает «кстати», а «whatis» — по-английски — «чтотакое».
Так ни в коем случае не следует делать! А что если запущенная Вами программа начнёт с того, что сотрёт все файлы в Вашем каталоге?
[methody@localhost methody]$ whatis apropos
apropos (1) - search the whatis database for strings
[methody@localhost methody]$ man apropos
apropos(1) apropos(1)
NAME
apropos - search the whatis database for strings
. . .
Пример 7. Вызов whatis
На этот раз Мефодию повезло: команда whatis
не делает ничего разрушительного. Как и команда apropos
, whatis
ищет подстроку в некоторой базе данных, состоящей из полей NAME
всех страниц помощи в системе. Различие между ними — в том, что whatis
ищет только среди имён объектов (в левых частях полей NAME
), а apropos
— по всей базе. В результате у whatis
получается список кратких описаний объектов с именами, включающими в себя искомое слово, а у apropos
— список, в котором это слово упоминается. Для того, чтобы это узнать, всё равно пришлось один раз прочесть документацию.
В системе может встретиться несколько объектов разного типа, но с одинаковым названием. Часто совпадают, например, имена системных вызовов (функций ядра) и программ, которые позволяют пользоваться этими функциями из командной строки (т. н. утилит).
[methody@localhost methody]$ whatis passwd
passwd (1) - update a user's authentication tokens(s)
passwd (5) - password file
passwd (8) - manual page for passwd wrapper version 1.0.5
Пример 8. Руководства с одинаковыми именами
Описания объектов, выводимые whatis
, отличаются числом в скобках — номером раздела. В системе руководств Linux девять разделов, каждый из которых содержит страницы руководства к объектам определённого типа. Все разделы содержат по одному руководству с именем «intro», в котором в общем виде и на примерах рассказано, что за объекты имеют отношение к данному разделу:
george@localhost:~> whatis intro
intro (1) - Introduction to user commands
intro (2) - Introduction to system calls
intro (3) - Introduction to library functions
intro (4) - Introduction to special files
intro (5) - Introduction to file formats
intro (6) - Introduction to games
intro (7) - Introduction to conventions and miscellany section
intro (8) - Introduction to administration and privileged commands
intro (9) - Introduction to kernel interface
Пример 9. Руководства intro
Вот названия разделов в переводе на русский:
- Команды пользователя.
- Системные вызовы (пользовательские функции ядра Linux; руководства рассчитаны на программиста, знающего язык Си).
- Библиотечные функции (функции, принадлежащие всевозможным библиотекам подпрограмм; руководства рассчитаны на программиста, знающего язык Си).
- Внешние устройства и работа с ними (в Linux они называются специальными файлами, см. лекцию Работа с внешними устройствами).
- Форматы различных стандартных файлов системы (например конфигурационных).
- Игры, безделушки и прочие вещи, не имеющие системной ценности.
- Теоретические положения, договорённости и всё, что не может быть классифицировано.
- Инструменты администратора (часто недоступные обычному пользователю).
- Интерфейс ядра (внутренние функции и структуры данных ядра Linux, необходимы только системному программисту, исправляющему или дополняющему ядро).
В частности, пример с passwd
показывает, что в системе «Some Linux
», которую использует Мефодий, есть программа passwd
(именно с её помощью Мефодий поменял себе пароль на прошлой лекции), файл passwd
, содержащий информацию о пользователях и администраторская программа passwd
, обладающая более широкими возможностями. По умолчанию man
просматривает все разделы и показывает первое найденное руководство с заданным именем. Чтобы посмотреть руководство по объекту из определённого раздела, необходимо в качестве первого параметра команды man указать номер раздела:
[methody@localhost methody]$ man 8 passwd
PASSWD(8) System Administration Utilities PASSWD(8)
. . .
[methody@localhost methody]$ man -a passwd
PASSWD(1) Some Linux PASSWD(1)
. . .
PASSWD(8) System Administration Utilities PASSWD(8)
. . .
PASSWD(5) Linux Programmer's Manual PASSWD(5)
. . .
Пример 10. Выбор среди страниц руководства с одинаковым именем
Если в качестве первого параметра man
использовать «-a
», будут последовательно выданы все руководства с заданным именем. Внутри страниц руководства принято непосредственно после имени объекта ставить в круглых скобках номер раздела, в котором содержится руководство по этому объекту: man(1)
, less(1)
, passwd(5)
и т. д.
Info
Другой источник информации о Linux и составляющих его программах — справочная подсистема info
. Страница руководства, несмотря на обилие ссылок различного типа, остаётся «линейным» текстом, структурированным только логически. Документ info
структурирован прежде всего топологически — это настоящий гипертекст, в котором множество небольших страниц объединены в дерево. В каждом разделе документа info
всегда есть оглавление, из которого можно перейти сразу к нужному подразделу, откуда всегда можно вернуться обратно. Кроме того, info-документ можно читать и как непрерывный текст, поэтому в каждом подразделе есть ссылки на предыдущий и последующий подразделы.
[methody@localhost methody]$ info info
File: info.info, Node: Top, Next: Getting Started, Up: (dir)
Info: An Introduction
. . .
* Menu:
* Getting Started:: Getting started using an Info reader.
* Expert Info:: Info commands for experts.
* Creating an Info File:: How to make your own Info file.
* Index:: An index of topics, commands, and variables.
. . .
--zz-Info: (info.info.bz2)Top, строк: 24 --All------------------------------
Welcome to Info version 4.6. Type ? for help, m for menu item.
Пример 11. Просмотр info-документа
Программа info
использует весь экран: на большей его части она показывает текст документа, а первая и две последних строки отведены для ориентации в его структуре.
Одна или несколько страниц, которые можно перелистывать клавишей Пробел или Page Up/Page Down — это узел (node). Узел содержит обычный текст и меню (menu) — список ссылок на другие узлы, лежащие в дереве на более низком уровне. Ссылки внутри документа имеют вид «* имя_узла::» и перемещать по ним курсор можно клавишей Tab, а переходить к просмотру выбранного узла — клавишей Enter. Вернуться к предыдущему просмотренному узлу можно клавишей «l
» (oт «Last»). И, главное, выйти из программы info
можно, нажав «q
» (Quit). Более подробную справку об управлении программой info
можно в любой момент получить у самой info
, нажав «?
».
Узлы, составляющие документ info
, можно просматривать и подряд, один за другим (с помощью команд «n
», Next, и «p
», Previous), однако это бывает нужно нечасто. В верхней строке экрана info
показывает имя текущего узла, имя следующего узла и имя родительского (или верхнего) узла, в котором находится ссылка на текущий. Показанные Мефодию имя узла Top
и имя верхнего узла (dir
) означают, что просматривается корневой узел документа, выше которого — только каталог со списком всех info-деревьев. В нижней части экрана расположена строка с информацией о текущем узле, а за ней — строка для ввода длинных команд (например, для поиска текста с помощью команды «/
»).
Команде info
можно указывать в параметрах всю цепочку узлов, приводящую к тому или иному разделу документации, однако это бывает нужно довольно редко:
[methody@localhost methody]$ info info "Getting Started" Help-Q
File: info.info, Node: Help-Q, Prev: Help-Int, Up: Getting Started
Quitting Info
. . .
Пример 12. Просмотр определённого узла info-документа
Сам ли Мефодий это придумал, или подсказал кто, но совершенно правильно было заключить в кавычки имя узла «Getting Started» — в этом случае info
искала узел по «адресу» «info -> Getting Started -> Help-Q
». Если бы команда имела вид info info Getting Started Help-Q
, то «адрес» получился бы неправильный: «info -> Getting -> Started -> Help-Q
». Ничего таинственного в этом нет, и уже к концу лекции станет понятно, в чём здесь дело (Слова и разделители).
RTFM
Оказывается, использование кавычек Мефодий придумал не сам: спросил у товарища, опытного пользователя Linux по фамилии Гуревич. Гуревич охотно показал, где ставить кавычки, а вот объяснять, что они делают, отказался, и заявил: «Там отличное руководство! Читай!». Документация в Linux играет важнейшую роль. Решение любой задачи должно начинаться с изучения руководств. Не стоит жалеть на это времени. Даже если рядом есть опытный пользователь Linux, который, возможно, знает ответ, не стоит беспокоить его сразу же. Вполне возможно, что, даже зная, что нужно сделать, он не помнит как именно — и поэтому (а также потому, что он — опытный пользователь) начнёт с изучения руководства. Это — закон, у которого есть даже собственное название: RTFM, что означает «Read That Fine Manual»
- RTFM
- Правило, согласно которому решение любой задачи надо начинать с изучения документации.
Слова Гуревича — практически дословный перевод этой фразы, так что её смысл и происхождение очевидны. Linux рассчитан в основном на тех, кто хочет знать, как им пользоваться.
Руководство — это совсем не учебник, это — справочник. В нём содержится информация, достаточная для освоения описываемого объекта, но никаких обучающих приёмов, никаких определений, повторений и выделения главного в нём обычно нет. Тем более не допускается усечение руководства с целью представить небольшие по объёму, но наиболее важные сведения. Так принято в учебниках, причём главные сведения раскрываются и объясняются очень подробно, а остальные присутствуют в виде ссылки на документацию для профессионалов. Страницы руководств — и есть эта самая документация для профессионалов. Руководство чаще всего читает человек, который уже знает, о чём оно.
Это не значит, что из руководства нельзя понять, как, например, пользоваться командой в простейших случаях. Напротив, часто встречается поле EXAMPLES
, которое как раз и содержит примеры использования команды в разных условиях. Однако всё это преследует цель не научить, а раскрыть смысл, пояснить сказанное в других полях. Мефодий нашёл описание работы двойных кавычек в руководстве по sh, однако понял из него далеко не всё — главным образом, потому, что встретил слишком много незнакомых терминов.
Система info
может содержать больше, чем man
, поэтому в неё часто включают и учебники (принято называть учебник термином «tutorial»), и т. н. «howto» (примеры постановки и решения типовых задач), и даже статьи по теме. Таким образом info-документ может стать, в отличие от страницы руководства, полным сводом сведений. Разработка такого документа — дело трудоёмкое, поэтому далеко не все объекты системы им сопровождаются. Кроме того, и прочесть большой info-документ целиком зачастую невозможно. Поэтому имеет смысл начинать именно и руководства, а если его недостаточно — изучать info
.
Если некоторый объект системы не имеет документации ни в формате man
, ни в формате info
, это нехорошо. В этом случае можно надеяться, что при нём есть сопроводительная документация, не имеющая, увы, ни стандартного формата, ни тем более — ссылок на руководства по другим объектам системы. Такая документация (равно как и примеры использования объекта), обычно помещается в каталог /usr/share/doc/имя_объекта.
Документация в подавляющем большинстве случаев пишется на простом английском языке. Если английский — не родной язык для автора документации, она будет только проще. Традиция писать по-английски идёт от немалого вклада США в развитие компьютерной науки вообще и Linux в частности. Кроме того, английский становится языком международного общения во всех областях, не только в компьютерной. Необходимость писать на языке, который будет более или менее понятен большинству пользователей, объясняется постоянным развитием Linux. Дело не в том, что страницу руководства нельзя перевести, а в том, что её придётся переводить всякий раз, когда изменится описываемый ею объект! Например, выход новой версии программного продукта сопровождается изменением его возможностей и особенностей работы, а следовательно, и новой версией документации. Тогда перевод этой документации превращается в «moving target», сизифов труд.