
Недавно я задался вопросом, насколько велики различные man-страницы. Некоторые из них настолько длинные, что кажутся непроходимыми, а в других вообще очень мало подробностей. Что их размер может рассказать нам о системе Linux или macOS, на которой они находятся?
Как найти самые большие страницы руководства?
Командная строка, которую я использовал для поиска самых больших страниц руководства, выглядит так:
du -a /usr/share/man | fgrep ‘.’ | sort -rn | head -n 20
Там происходит довольно много событий, поэтому позвольте мне объяснить.
Стандартные man-страницы находятся в иерархии с корнем в /usr/share/man. Внутри этого каталога находятся подкаталоги для каждого раздела man. Внутри них находятся отдельные файлы man-страниц, такие как /usr/share/man/man1/grep.1 и /usr/share/man/man4/ip.4.
Файлы man-страниц могут находиться в нескольких местах; команда manpath выводит их список. Мне нужен максимально «стандартный» опыт, поэтому я ограничиваю свой поиск /usr/share/man, где находится основная часть стандартных команд.
Команда du, для «использования диска», показывает, сколько места на диске занимают файлы и каталоги. Параметр -a выводит список всех файлов и каталогов в иерархии с указанием размера блока рядом с ними. Размер блока не совсем то же самое, что размер файла, но для этого упражнения он достаточно близок.
Канал fgrep удаляет каталоги, о которых сообщает du. Опять же, вы можете сделать это лучшими способами, но в данном конкретном случае это работает отлично.
Затем конвейер использует sort с опциями -r и -n для численной сортировки выходных данных du с наибольшими числами наверху. Это работает, поскольку выходные данные du включают размер в качестве своего первого поля.
Наконец, head -n 20 выдает 20 лучших файлов. Вы можете изменить число или заменить всю команду на пейджер типа less, чтобы изучить полный вывод.
Какие страницы руководства самые большие?
Я проверил две относительно простые Unix-подобные операционные системы, чтобы узнать, какие у них самые большие man-страницы:
- Macos 15
- Ubuntu 22
На macOS я увидел следующее:

Итак, самые большие man-страницы — perltoc, perlapi, perlfunc, postconf и perldiag. Много Perl!
В Ubuntu результаты совсем другие:

Обратите внимание, как Ubuntu сжимает свои man-страницы с помощью gzip. Текстовые файлы часто сжимаются очень эффективно, поэтому занимают гораздо меньше места. Но самые большие страницы в меньшей степени ориентированы на Perl и включают сетевые и системные утилиты.

Чему могут научить нас самые большие страницы Man
Читая их, вы можете многому научиться, но эти страницы также рассказывают нам кое-что полезное о Linux, macOS и о том, какие программы являются наиболее «тяжеловесными».
Perl полностью документирован
На macOS 4 из 5 самых больших man-страниц связаны с Perl. Я проверил, сколько всего man-страниц Perl:
найти /usr/share/man -name ‘perl*’
214! Почти треть из них — это «дельта»-страницы, вроде той, которую вы получаете от человек perl583delta:

Эти страницы эквивалентны примечаниям к выпуску, и они присутствуют для многих второстепенных версий языка. Это было одним из первых, что я узнал в процессе: некоторые страницы руководства не отображаются напрямую на команду или установленную программу.
Напротив, на моей машине Ubuntu всего шесть страниц perl* man. Это не совсем о версии Perl, которая установлена. На macOS я вижу версию 5.34.1, а на Ubuntu — 5.34.0.
zsh настолько велик, что разбивает свои страницы руководства на несколько меньших
На macOS я запускаю zsh, и оказывается, что эта оболочка хорошо представлена, когда дело доходит до man-страниц. Внутри первой десятки есть man-страница под названием «zshcompsys», а в первую двадцатку также входят zshcontrib и zshmodules. Как и Perl, zsh разбивает свое руководство на отдельные страницы; правда, «только» 10 из них.
Страница zshcompsys — это колоссальные 5,000 строк, объясняющих, как работает tab-complete zsh. Система завершения невероятно мощная и настраиваемая, поэтому понятно, почему эта страница руководства такая большая.

Это контрастирует с другими оболочками. Основная страница руководства bash все еще большая: #8 в списке и чуть меньше 5,000 страниц. Но есть только одна другая страница руководства, связанная с bash, bashbug, и она крошечная, хотя она документирует интересную команду, которая позволяет вам отправлять отчет об ошибке из командной строки.
Другие оболочки также хорошо представлены — tcsh находится на 9-м месте в списке, а ksh на 20-м — но каждая из этих оболочек ограничивается всего одной страницей руководства.
Между тем, в Linux я использую bash, и эта оболочка имеет самую большую man-страницу в целом. Это проверено; у меня не установлен zsh, и я бы ожидал, что man-страницы оболочки будут среди самых больших.
curl — самая сложная «нормальная» программа
Вот тут-то и началось мое путешествие, когда я задавался вопросом, есть ли какая-либо другая программа, столь же сложная и хорошо документированная, как curl. Команда curl имеет так много опций для работы со всеми различными функциями HTTP, что ее man-страница занимает ~4,500 строк на Linux и ~6,500 на macOS. Разница, вероятно, связана с разными версиями curl (8.7.1 на macOS, 7.81.0 на Ubuntu), но в любом случае это гигантское руководство.
Когда man-страницы достигают такого размера, они начинают становиться громоздкими. В случае с curl, я думаю, есть две лучшие альтернативы. Во-первых, есть tldr, более простая альтернатива man, которая фокусируется на примерах использования. Вот что она делает с curl:

Эти 32 строки намного эффективнее, чем 6,000 на странице man! На странице tldr также упоминается вторая лучшая альтернатива: онлайн-версия страницы man curl.
macOS больше сосредоточена на разделе 1
Собственная страница man описывает раздел 1 как «Руководство по общим командам». В macOS 18 из 20 самых больших страниц man находятся в разделе 1. Напротив, самые большие страницы man в Ubuntu гораздо более разнообразны и распределены по разделам 1, 3 (Библиотечные функции), 5 (Форматы файлов) и 8 (Руководство системного администратора).
Страница man раздела 8 для openvpn — вторая по величине в моей системе. Она даже предупреждает читателя о своей длине!

Вероятно, это отражает основных пользователей каждой системы. macOS нацелена на более широкий потребительский рынок, поэтому даже ее страницы man терминала ориентированы на команды конечного пользователя. Linux ориентирован на программистов, системных администраторов и сетевых операторов, поэтому ее страницы man нижнего уровня более полны.
Больше всего я научился быть любознательным снова
То, что началось как мимолетный вопрос, который я себе задал, переросло в исследование кроличьих нор Unix, в которые я никогда раньше не погружался. Я знал минимум о man-страницах, но мое понимание разделов было ограниченным, и я вообще не знал о команде manpath. Что еще важнее, я не знал многого о составе man-страниц в моих системах, и я, конечно, не осознавал, сколько места они отводят Perl или git-config.
Это упражнение заставило меня ностальгировать по моим ранним дням с Linux, когда все было готово для исследования. После многих лет — даже десятилетий — использования легко стать самодовольным и перестать задавать вопросы о базовой системе. Мне напомнили, что заглядывание за занавес может быть эффективным способом обучения, и я постараюсь подпитывать эту любознательную натуру немного больше в будущем.