Есть ли способ найти установленные бинарные пакеты, у которых нет manpages?

13

Недавно я увидел https://lintian.debian.org/tags/binary-without-manpage.html, и он показывает около 14 тыс. Страниц, которые отсутствуют.

Это означает, что более чем вероятно, что в некоторых бинарных пакетах (не в библиотеках) отсутствуют man-страницы. Как получить список установленных бинарных пакетов / приложений (НЕ библиотек), в которых нет man-страниц? Я мог бы знать некоторых и начать вносить свой вклад в это.

Shirish
источник

Ответы:

16

Вы можете перечислить все двоичные файлы без справочной страницы через manpage-alertкоманду

manpage-alert - check for binaries without corresponding manpages

DESCRIPTION

   manpage-alert  searches the given list of paths for binaries without cor‐
   responding manpages.

   If no paths are specified on the command line, the path list  /bin  /sbin
   /usr/bin /usr/sbin /usr/games will be assumed
GAD3R
источник
2
не знал, что это было частью пакета devscripts, спасибо.
Ширин
5

Несмотря на то, что manpage-alertон выполняет то, что вы просите, вы должны заметить, что список в ссылке на ваш вопрос генерируется другим процессом, который представляет собой следующую проверку в Lintian:

https://github.com/Debian/lintian/blob/master/checks/manpages.pm

Таким образом, его можно получить, вызвав lintianэту -T binary-without-manpageопцию (и другие опции, чтобы выбрать пакеты, которые вы хотите проверить).

Гриша Левит
источник
не знал об этом, спасибо.
Ширин
4

Благодаря принятому ответу было интересно узнать о существовании утилиты manpage-alert, части devscriptsпакета, которая на самом деле является сценарием оболочки.

Я попытался установить, devscriptsно получил приглашение установить около 70 МБ зависимостей, поэтому я пропустил.

Скачивая devscriptsпакет deb ( apt download devscripts), извлекая deb и более внимательно изучая manpage-alertсценарий, вся история «под капотом» заключается в том, что этот сценарий оповещения запускает команду:

man -w -S 1:8:6 <file> (w = показать местоположение -S 1: 8: 6 ограничивает поиск человека в разделах 1,8 и 6).

Эта операция выполняется во всех файлах рекурсивно под каталогами /bin, /sbin, /usr/bin, /usr/sbin, и /usr/games.

Кроме того, перенаправляя manк , 2>&1а также перенаправление >/dev/null, если файл имеет действительное местонахождение человека страницы ничего не печатается, но если manжалуется на «нет ручного ввода» , то это сообщение будет напечатано.
Автор manpage-alertтакже удаляет manсообщение об ошибке из сообщения «см. Man 7 unsocumented for help» и сохраняет только первую строку = No manual entry for xxxx.

В результате, следующие несколько строк приведут к похожему выводу двоичных файлов с отсутствующими справочными страницами без установки пакета devscripts:

F=( "/bin/*" "/sbin/*" "/usr/bin/*" "/usr/sbin/*" "/usr/games/*" )
for f in ${F[@]};do 
  for ff in $f;do
    if ! mp=$(man -w -S 1:8:6 "${ff##*/}" 2>&1 >/dev/null);then 
       echo "$mp" |grep -v "man 7 undocumented" #man 7 undocumented is printed in a separate line.
    fi
  done
done

PS: ${ff##*/}сохраняет только имя команды вскрышного пути /usr/bin/или /bin/или любые другие

Выше также можно запустить как однострочник:

gv@debi64:$ F=( "/bin/*" "/sbin/*" "/usr/bin/*" "/usr/sbin/*" "/usr/games/*" );for f in ${F[@]};do for ff in $f;do if ! mp=$(man -w -S 1:6:8 "${ff##*/}" 2>&1 >/dev/null);then echo "$mp" |grep -v "man 7 undocumented";fi;done;done

No manual entry for ntfsmove
No manual entry for ipmaddr
No manual entry for iptunnel
^C

PS: Вы можете, конечно, установить, devscriptsтак как в него включено много хороших утилит / скриптов. Мне просто нравится знать, что работает под капотом :-)

Георгий Василиу
источник
В devscripts есть много интересных пакетов, например, dch, rmadison, wnpp-check и некоторые другие, просто не знал об этом. Это того стоит. Я сомневаюсь, что это будет bashscript, так как debian пытается удалить ошибки и полагаться на простые сценарии оболочки, которые легче переносить из одного xterm в другой.
Шириш
@shirish При ближайшем рассмотрении, оригинальный manpage-alertсценарий начинается с#!/bin/sh -e
Джордж Василиу