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-подобных операционных системах.

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

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

Нотация для аргументов одна и таже от страницы к странице.

Стандартные Разделы Страницы Руководства

  1. NAME: Название команды или функции с кратким описанием ее общего назначения.

  2. SYNOPSIS: Краткое изложение того, как вызывается команда или функция, включая ее опции и аргументы.

  3. DESCRIPTION: Подробное описание команды, включая ее назначение, функциональность и различные нюансы.

  4. OPTIONS: Подробные объяснения опций или переключателей, которые принимает команда. Эти опции изменяют поведение команды.

  5. EXAMPLES: Практические примеры общего использования.

  6. SEE ALSO: Ссылки на связанные команды или документацию.

  7. AUTHOR: Информация об авторе(ах) программы или документации.

  8. REPORTING BUGS: Детали о том, где и как сообщать об ошибках.

  9. COPYRIGHT: Уведомление об авторском праве на команду или документ.

  10. HISTORY: Информация об истории и развитии команды.

  11. 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 для написания программ даже без доступа в Интернет.