В прошлом году я много работал над Git man page, поэтому начал больше думать о том, что делает man-страницу (man page) по-настоящему хорошей.

Я провёл немало времени, составляя шпаргалки для инструментов (tcpdump, git, dig и др.), у которых man-страница является основной документацией. Во многом потому, что мне часто сложно ориентироваться в man-страницах, чтобы быстро найти нужную информацию.

В последнее время я думаю — а может ли сама man-страница содержать отличную шпаргалку? Что вообще может сделать man-страницу более удобной? Я пока только в начале этих размышлений, но захотел написать о некоторых моментах.

Если Linux и терминал пока даются с трудом, подготовительный курс «Linux для начинающих» поможет разобраться с базовыми командами и консольными инструментами — тем самым фундаментом, на котором держится работа с man-страницами.

Я спросил у людей в Mastodon про их любимые man-страницы и обнаружил несколько интересных решений.

Сводка опций (OPTIONS SUMMARY)

Если вы читали много man-страниц, то наверняка видели в разделе SYNOPSIS что-то вроде этого — когда перечисляется почти весь алфавит, ориентироваться становится сложно

ls [-@ABCFGHILOPRSTUWabcdefghiklmnopqrstuvwxy1%,]

grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz]

В man-странице rsync есть решение, которое я раньше не встречал: раздел SYNOPSIS там максимально лаконичный, например:

 Local:
     rsync [OPTION...] SRC... [DEST]

А затем идёт раздел «OPTIONS SUMMARY» с однострочным описанием каждой опции:

--verbose, -v            increase verbosity
--info=FLAGS             fine-grained informational verbosity
--debug=FLAGS            fine-grained debug verbosity
--stderr=e|a|c           change stderr output mode (default: errors)
--quiet, -q              suppress non-error messages
--no-motd                suppress daemon-mode MOTD

Позже идёт привычный раздел OPTIONS с полным описанием каждой опции.

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

В man-странице strace опции сгруппированы по категориям (например, «General», «Startup», «Tracing», «Filtering», «Output Format»), а не по алфавиту.

В качестве эксперимента я попробовал взять man-страницу grep и сделать в ней раздел «OPTIONS SUMMARY», сгруппированный по категориям — результат можно посмотреть на github. Не уверен, что сам думаю об этом результате, но это был интересный эксперимент. Когда я это делал, я думал о том, как никогда не запомню название опции -l в grep. Каждый раз ее поиск в man-странице занимает целую вечность, и я пытался понять, какая структура помогла бы ускорить процесс. Возможно, категории?

Шпаргалка

Пара человек указали мне на набор Perl man-страниц (perlfunc, perlre и т. д.), и среди них я заметил man perlcheat, где есть разделы-шпаргалки вроде такого:

 SYNTAX
 foreach (LIST) { }     for (a;b;c) { }
 while   (e) { }        until (e)   { }
 if      (e) { } elsif (e) { } else { }
 unless  (e) { } elsif (e) { } else { }
 given   (e) { when (e) {} default {} }

Мне кажется, это очень круто, и я задумался, есть ли другие способы делать компактные ASCII-шпаргалки шириной 80 символов, которые можно было бы использовать в man-страницах.

Сила примеров

Часто мне отвечали примерно так: «Мне нравится любая man-страница, где есть примеры». Кто-то упомянул man-страницы OpenBSD, и в openbsd tail man-странице в конце есть примеры ровно двух способов, которыми я сам пользуюсь tail.

Мне кажется, чаще всего я видел раздел EXAMPLES в конце man-страницы, но некоторые man-страницы, например уже упомянутая man-страница rsync, начинаются именно с примеров. Когда я работал над man-страницами git-add и git rebase, я тоже помещал короткий пример в начало.

Оглавление и ссылки между разделами

Это не свойство самой man-страницы как таковой, но одна из проблем man-страниц в терминале в том, что по ним трудно понять, какие вообще разделы в них есть.

Когда мы работали над man-страницами Git, мы с Мари добавили оглавление на боковую панель HTML-версий man-страниц, размещённых на сайте Git.

Ещё я хотел бы в какой-то момент добавить больше гиперссылок в HTML-версии man-страниц Git, чтобы, например, можно было нажать на «INCOMPATIBLE OPTIONS» и сразу перейти к нужному разделу. В проекте Git такие ссылки добавлять очень просто, потому что man-страницы Git генерируются с помощью AsciiDoc.

Мне кажется, что добавление оглавления и внутренних гиперссылок — это хороший компромисс: так можно немного улучшить формат man-страниц, по крайней мере в их HTML-версии, не поддерживая при этом полностью отдельный формат документации. Хотя для этого, конечно, нужна цепочка инструментов вроде той, что используется у Git на базе AsciiDoc.

Было бы здорово, если бы существовала какая-то универсальная система, которая позволяла бы легко находить конкретную опцию в man-странице: например, «что делает -a?». Лучший приём, который я знаю, — искать в просмотрщике man-страницы что-то вроде ^ *-a, но я сам всё время забываю так делать и вместо этого просто просматриваю каждое вхождение -a в man-странице, пока не найду то, что мне нужно.

Примеры для каждой опции

В man-странице curl есть примеры для каждой опции, а в HTML-версии ещё и добавлено оглавление, чтобы было проще перейти именно к той опции, которая вас интересует.

Например, по примеру для --cert сразу понятно, что, скорее всего, вам также нужно передать опцию --key, вот так:

curl --cert certfile --key keyfile https://example.com

Реализовано это так: для каждой опции есть отдельный файл (https://github.com/curl/curl/blob/dc08922a61efe546b318daf964514ffbf41583 25/docs/cmdline-opts/append.md), и в этом файле предусмотрено поле «Example».

Оформление данных в виде таблицы

Довольно много людей сказали, что их любимая man-страница — это man ascii, и выглядит она вот так:

Oct Dec Hex Char ─────────────────────────────────────────── 000 0 00 NUL '\0' (null character) 001 1 01 SOH (start of heading) 002 2 02 STX (start of text) 003 3 03 ETX (end of text) 004 4 04 EOT (end of transmission) 005 5 05 ENQ (enquiry) 006 6 06 ACK (acknowledge) 007 7 07 BEL '\a' (bell) 010 8 08 BS '\b' (backspace) 011 9 09 HT '\t' (horizontal tab) 012 10 0A LF '\n' (new line)

Очевидно, man ascii — это довольно необычная man-страница, но, как мне кажется, в ней здорово то, что, помимо очевидной пользы самой ASCII-таблицы, нужную информацию в ней очень легко находить взглядом именно благодаря табличному формату. И я задумался, нет ли и в других случаях возможностей представлять информацию в man-странице в виде «таблицы», чтобы по ней было проще скользить глазами.

Подход GNU

Когда я говорю о man-страницах, часто всплывает тема, что в man-страницах GNU coreutils, например в man tail, нет примеров, в отличие от man-страниц OpenBSD, где примеры есть.

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

  • Проект GNU предпочитает поддерживать документацию в виде руководств «info», а не man-страниц. На этой странице прямо сказано, что «man-страницы больше не поддерживаются».

  • Есть три способа читать руководства «info»: в HTML-версии, в Emacs или с помощью отдельной утилиты info. От некоторых пользователей Emacs я слышал, что им нравится встроенный в Emacs просмотрщик info. Думаю, что отдельной утилитой info вообще мало кто пользуется.

  • Ссылка на раздел руководства info для tail находится внизу man-страницы, и в нём примеры как раз есть.

  • Раньше FSF продавал печатные книги с руководствами по программам GNU, и, возможно, иногда делает это (?) до сих пор.

После определённого уровня сложности man-страница становится по-настоящему трудной для навигации: хотя я никогда не пользовался руководством coreutils и, скорее всего, не буду, почти наверняка я предпочёл бы читать справочное руководство GNU Bash или справочное руководство по библиотеке GNU C Library в их HTML-версии, а не в формате man-страницы.

Ещё несколько вещей, смежных с man-страницами

Вот несколько инструментов, которые кажутся мне интересными:

  • В комплекте с fish shell идёт Python-скрипт, который автоматически генерирует автодополнение по табуляции на основе man-страниц.

  • tldr.sh — это поддерживаемая сообществом база примеров. Например, можно выполнить команду tldr grep. Многие говорили мне, что считают этот инструмент полезным.

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

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

  • 6 мая 20:00. «Rust в деле: пишем многопользовательский чат с сервером, клиентом и CLI». Записаться

  • 7 мая 20:00. «Настройка удобного рабочего окружения для Python проекта». Записаться

  • 18 мая 20:00. «Основы Kubernetes: архитектура и абстракции». Записаться

Больше обучающих материалов смотрите в дайджесте по ИТ-инфраструктуре.

Комментарии (2)


  1. siberianlaika
    29.04.2026 19:36

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


  1. fraks
    29.04.2026 19:36

    За man ascii больше спасибо. Не нужно гуглить, все под рукой оказывается есть :)

    С некоторыми манами прям нереальная боль работать. Например man smb.conf. Там в разделе "EXPLANATION OF EACH PARAMETERS" содержится описание более 500 параметров. И как бы описание есть, а пользоваться нереально. Я вручную перегнал ман в html а потом в md, потом вручную нарезал его на папки и файлы. Каждый раздел - папка, каждый параметр - отдельный файл. Ну и потом пришлось вручную поредактировать что бы md-оформление было читабельным. Потратил наверное неделю, но получил доку которой очень удобно пользоваться. Написал скриптик который через fzf позволяет искать/фильтровать что угодно (разделы/параметры), а в preview-команду вставил отображение файла через lowdown - консольный рендеринг md-разметки, смотрим сразу отформатированное. Тут же сделал по кнопке F4 вызов редактора, можно сразу поправить ошибку, если увидел. Для универсализма, если встречается файл не md, сделал вывод с подсветкой синтакисиса, по расширению, программой bat. По F3 открывается сам документ, для просмотра в полноэкранном режиме, без фильтра статей. Просмотр через bat, с подсветкой синтаксиса по расширению, а если файл md - то предварительно рендерится lowdown.

    Наверняка есть варианты как из непосредственно исходника man-файла делать md, без страданий, но я не разобрался. Там такое дикое наслоение всяких атавизмов, что удивительно что само по себе man man работает. Есть оказывается опция man --html но на практике выдает какую-то ошибку и не алё. Хотя я как-то встречался с компами где это работало.

    man2web работает, но криво. Продукт видимо брошен, давно.