Как вы выводите список всех man-страниц в определенном разделе?

25

Например, страница forkсправочника находится в разделе «Системные вызовы» с номером 2:

man 2 fork

Как вы видите, что еще раздел 2, не прибегая к Google?

хуг
источник
Без Google, но через Интернет, перейдите на man7.org/linux/man-pages/dir_section_2.html (или на главную страницу здесь: kernel.org/doc/man-pages )
belacqua

Ответы:

4

Эта команда перечисляет отсортированные имена всех записей в данном разделе:

man -aWS 1 \* | xargs basename | sed 's/\.[^.]*$//' | sort -u

Если вы хотите увидеть пути, используйте:

man -aWS 1 \* | sed 's/\.[^.]*$//' | sort

Это говорит manискать в разделе все команды, используя шаблон с подстановочными знаками *(обратная косая черта заключена в кавычки, чтобы оболочка не интерпретировала его). -aнаходит все совпадения, -Wпечатает пути вместо отображения страниц и -S 1указывает первый раздел. Измените на 1любой раздел, который вы хотите найти.

Команда sedудаляет расширения имени файла; удалите его, если хотите увидеть полные имена файлов. sortсортирует результаты ( -uудаляет дубликаты).

Для удобства повторного использования это определяет функцию оболочки Bash:

function mansect { man -aWS ${1?man section not provided} \* | xargs basename | sed 's/\.[^.]*$//' | sort -u; }

Например, вы можете вызвать его так, mansect 3чтобы увидеть записи в третьем разделе.

[Проверено на macOS.]

Крис Пейдж
источник
Хорошо - спасибо. Я получаю несколько дубликатов (например, пути в /Applications/Xcode.app и «Ускорение» в разделе 7), но ничего, что помещается uniqв конвейер, не исправляет.
xyz
@xyz: я обновил команду сортировки, sort -uчтобы удалить дубликаты.
Крис Пейдж
24

Чтобы вывести список всех установленных man-страниц из определенного раздела, вы можете использовать apropos :

apropos -s 2 .  # use an regex for apropos . means anything
apropos -s 2 -w '*'  # use unix globbing for apropos
Ульрих Дангел
источник
"по поводу: -s: неизвестный вариант"
Михаил Мрозек
@MichaelMrozek какую систему вы используете? Это работает для меня, например: вывод apropos -s 2 -w '*'
Ульрих Дангел
Спасибо. Опция -s отсутствует в Mac OS X по поводу, предположительно, из BSD.
xyz
@ f100 А, ладно, может быть, попробуюman -a -s 2 '*'
Ульрих Дангел
Это больше похоже на это, но вместо того, чтобы перечислять их, он фактически вызывает зрителя для каждого из них по очереди. Я взломал функцию для создания списка, который я разместил в другом комментарии. Скорее всего, есть проблемы, но мне этого достаточно :)
xyz
20

Manpages обычно размещаются /usr/share/man, но проверяются $MANPATHи организованы в такие разделы:

 Section 1:
 /usr/share/man/man1/

 Section 2:
 /usr/share/man/man2/

 ...

Итак, чтобы вывести список всех установленных разделов 2, выполните:

ls /usr/share/man/man2/

Или более полный:

find $(echo $MANPATH | tr ':' ' ') -path '*/man2/*'

У последнего будут проблемы, если у вас есть каталоги $MANPATHс пробелами в их именах.

В большинстве дистрибутивов вы также можете проверить доступные справочные страницы с помощью инструмента пакета, например, в дистрибутивах, производных от Debian, которые вы можете использовать apt-fileследующим образом:

apt-file search /man2/
Тор
источник
1
Спасибо - это было начало, в котором я нуждался. Я сделал функцию оболочки, которая запускается, например, lman 2и перечисляет неукрашенное имя для каждой страницы в новой строке и выводит их на страницу. Тело функции:find $(man --path | tr ':' ' ') -path "*/man$1/*"| xargs basename | sort | sed -E "s/\.$1(.gz)?\$//" | less
xyz
1

В Mac OS X единственное, что я могу получить, - man -k . | grep -F '(3)'это перечислить все в разделе 3.

zellyn
источник
0

Я знаю, что это очень старый вопрос, однако ответы, приведенные здесь, не сработали для меня. Поэтому я придумал следующую однострочную версию, которая работает на Ubuntu 18.04 и macOS Mojave, 10.14.6:

find $(man --path | tr ':' ' ') -type f -path '*man2*' \
  -exec basename {} \; | sed 's/\..*//' | sort

Быстрый бег вниз:

  • ответ от Thors: $(man --path | tr ':' ' ')получить текущие пути к страницам руководства
  • find <man paths> -type f -path '*man2*' -exec basename {} \; получает имена всех обычных файлов в путях человека
  • sed избавляется от расширения файла
  • sort в алфавитном порядке.
Бен
источник