web-dev-qa-db-ja.com

マンページを持たないインストール済みのバイナリパッケージを見つける方法はありますか?

私は最近 https://lintian.debian.org/tags/binary-without-manpage.html を見ました、そしてそれは不足しているおよそ14kのマンページを示しています。

これは、一部のバイナリパッケージ(ライブラリではない)にマンページが欠落している可能性が高いことを意味します。マンページのないインストール済みのバイナリパッケージ/アプリケーション(ライブラリではない)のリストを取得するにはどうすればよいですか?私はいくつかを知っていて、それに少し貢献するかもしれません。

13
shirish

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
16
GAD3R

manpage-alertはあなたが求めることを行いますが、質問からのリンクのリストは別のプロセスによって生成されることに注意してください。これは、Lintianでの次のチェックです。

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

したがって、-T binary-without-manpageオプション(およびチェックするパッケージを選択するための他のオプション)を指定してlintianを呼び出すことで作成できます。

5
Grisha Levit

受け入れられた回答のおかげで、実際にはシェルスクリプトであるdevscriptsパッケージの一部であるユーティリティ_manpage-alert_の存在について学ぶことは興味深いことでした。

devscriptsをインストールしようとしましたが、約70MBの依存関係をインストールするように求めるプロンプトが表示されたため、スキップしました。

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 7を参照してください」メッセージからmanエラーメッセージをさらに削除し、最初の行= _No manual entry for xxxx_のみを保持します。

その結果、次の数行は、devscriptsパッケージをインストールせずに、manページが欠落しているバイナリの同様の印刷を提供します。

_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をインストールできます。これは、多くのNiceユーティリティ/スクリプトが含まれているためです。フードの下で何が実行されるのか知りたいだけです:-)

4
George Vasiliou