Unix разрабатывался в период, когда Интернета ещё не существовало, и в его сообществе до сих пор сохраняется практика не обращаться к Stack Overflow и гуглу, а искать ответы у себя на компьютере.
Команда man
man
– программа, предоставляющая инструкции (manuals) к программам, функциям, файлам конфигурации и прочему.
Например:
man ls
расскажет о команде ls
man sudoers
предоставит информацию о том, как оформлять файл конфигурации /etc/sudoers
.
Для отображения страниц команда man
по-умолчанию открывают пагинатор less (как им пользоваться).
Знакомство с man
лучше начинать с man
-странице к самому man
:
man man
Что обычно есть в странице man
Страницы руководства, или “man pages”, являются стандартным форматом документации в Unix и Unix-подобных операционных системах.
Они предоставляют подробную информацию о командах, системных вызовах, библиотеках и других аспектах системы.
Каждая страница руководства обычно следует структурированному формату, который может быть разделен на несколько стандартных разделов.
Нотация для аргументов одна и таже от страницы к странице.
Стандартные Разделы Страницы Руководства
-
NAME: Название команды или функции с кратким описанием ее общего назначения.
-
SYNOPSIS: Краткое изложение того, как вызывается команда или функция, включая ее опции и аргументы.
-
DESCRIPTION: Подробное описание команды, включая ее назначение, функциональность и различные нюансы.
-
OPTIONS: Подробные объяснения опций или переключателей, которые принимает команда. Эти опции изменяют поведение команды.
-
EXAMPLES: Практические примеры общего использования.
-
SEE ALSO: Ссылки на связанные команды или документацию.
-
AUTHOR: Информация об авторе(ах) программы или документации.
-
REPORTING BUGS: Детали о том, где и как сообщать об ошибках.
-
COPYRIGHT: Уведомление об авторском праве на команду или документ.
-
HISTORY: Информация об истории и развитии команды.
-
EXTRAS: В зависимости от команды могут быть дополнительные разделы, такие как ENVIRONMENT (ОКРУЖЕНИЕ), FILES (ФАЙЛЫ), BUGS (ОШИБКИ) и т.д.
Нотация для Аргументов/Флагов
-
Квадратные скобки
[ ]
: Опциональные элементы. Например,-a [file]
означает, что опцию-a
можно использовать с файлом или без него. -
Угловые скобки
< >
: Обязательные элементы. Например,useradd <username>
требует указания имени пользователя. -
Многоточие
...
: Указывает, что предыдущий элемент можно повторять. Например,cp <source>... <destination>
означает, что можно копировать несколько источников. -
Вертикальная черта
|
: Используется для разделения нескольких возможных значений аргумента. Например,--color=auto|always|never
означает, что для опции--color
можно использовать одно из трех значений. -
Жирный и Курсив: Команды и опции обычно представлены жирным шрифтом. Переменные части синтаксиса часто показаны курсивом.
Понимание структуры и нотации страниц руководства может значительно улучшить вашу способность использовать обширную документацию, доступную в Unix-подобных системах. Это важный навык для любого, кто работает в Unix/Linux среде.
Секции man-страниц
Для получения конкретной man-страницы необходимо указать секцию, в которой она находится. Например,
- секция 1 содержит команды,
- а секция 3 – библиотечные функции.
Пример:
man 1 time
выдаст документацию именно на команду time
.
Подробнее о секциях см. man(1)
, т.е.
man man
Обмен информацией о man-страницах
Когда необходимо поделиться информацией о man-странице, принято указывать номер секции в скобках. Например:
poll(3)
или
ls(1)
Поиск man-страницы
Команда whatis
(или man -f
) перечисляет все разделы man, в которых есть X
.
Команда apropos
может использовать флаг -s S
для поиска в секции S
.
Вывод этих команд похожий, однако у них есть различия в функциональности:
apropos
Команда apropos
используется для поиска страниц руководства по указанному ключевому слову. Она помогает пользователям найти команды или темы, связанные с определенным ключевым словом.
Например:
apropos ls
Вывод: Перечисляет все страницы руководства, которые включают ключевое слово “ls” в своих кратких описаниях или именах.
Опциональные флаги:
-s S
: Указывает раздел для поиска. Например,apropos -s 1 ключевое_слово
ищет в разделе 1 (пользовательские команды).
whatis
Команда whatis
похожа на apropos
, но предоставляет более краткий вывод.
Она выводит только имена и однострочные описания страниц руководства, соответствующих указанному ключевому слову.
Например:
whatis ls
Вывод: Отображает список страниц руководства, связанных с командой или темой “ls”, с краткими описаниями.
Резюме различий:
Обе команды полезны для быстрого поиска соответствующих страниц руководства на основе ключевых слов.
На практике выбор между apropos
и whatis
может зависеть от уровня детализации, необходимого в результатах поиска. Если требуется более подробная информация, включая имена страниц руководства, apropos
- хороший выбор. Если предпочтительно краткое описание, whatis
- более лаконичный вариант.
Case study: написание программы на Си
Представим, что нужно написать программу на C, которая завершается со случайным кодом возврата.
Если нет доступа в Интернет, можно воспользоваться командой man
:
man man
Она утверждает, что функции Си перечислены в третьей секции: “3 – Library calls (functions within program libraries)“.
Чтобы найти функцию random
, добавим суффикс p
к номеру секции:
man -s 3 p -k random
Пробуем тривиальную версию программы:
#include <stdio.h>
int main() {
return rand();
}
Она не работает: нужно проинициализировать генератор чисел случайным зерном. Хорошее зерно – текущее время.
man -s 3 p -k time
Таким образом, можно использовать man
для написания программ даже без доступа в Интернет.