どのコマンドのマニュアルページが最も長いか簡単に把握する方法はありますか?
答え1
簡単なコマンドを使用して、システムに合わせて直接計算できます。
$ find /usr/share/man/ -type f -exec ls -S {} + 2>/dev/null | head | while \
read -r file; do printf "%-40s" "$file"; \
man "$file" 2>/dev/null | wc -lwm; done | sort -nrk 4
私の箱に戻る
(file) (lines) (words) (chars)
/usr/share/man/man1/zshall.1.bz2 27017 186394 1688174
/usr/share/man/man1/cmake.1.bz2 22477 106148 1004288
/usr/share/man/man1/cmake-gui.1.bz2 21362 100055 951110
/usr/share/man/man1/perltoc.1.bz2 18179 59783 780134
/usr/share/man/man1/cpack.1.bz2 9694 48264 458528
/usr/share/man/man1/cmakemodules.1.bz2 10637 42022 419127
/usr/share/man/man5/smb.conf.5.bz2 8306 49991 404190
/usr/share/man/man1/perlapi.1.bz2 8548 43873 387237
/usr/share/man/man1/perldiag.1.bz2 5662 37910 276778
/usr/share/man/e 1518 5919 58630
列は、それぞれ行、単語、および文字数を表します。行(コマンド)は最後の列に基づいてソートされます。
情報ページでも同様のことができますが、その内容が複数のファイルにまたがる可能性があることに注意してください。したがって、zsh
上記の行を簡潔な形式に保つという利点を活用してみましょう。
$ for inf in ${(u)$(echo /usr/share/info/**/*(.:t:r:r))}; do \
printf "%-40s" "$inf"; \
info "$inf" 2>/dev/null | wc -lwm; done | sort -nrk 4
何を与える
(info title) (lines) (words) (chars)
elisp 72925 457537 3379403
libc 69813 411216 3066817
lispref 62753 374938 2806412
emacs 47507 322194 2291425
calc 33716 244394 1680763
internals 32221 219772 1549305
zsh 34932 206851 1544909
gsl-ref 32493 179954 1518248
gnus 31723 180613 1405064
gawk 27150 167135 1203395
xemacs 25734 170403 1184250
情報ページはかなり大きく、主にgnuに関連するものなので、理解できます。しかし、例えばzshには、マンページよりも行や単語が多いが、文字が少ないという点が興味深い。一見すると内容は同じで形式だけ少し違うので面白いです。
ループファイルを選択するときのzshのヒント:for inf in ${(u)$(echo /usr/share/info/**/*(.:t:r:r))}; do
目的は、/usr/share/infoディレクトリとすべてのサブディレクトリに一意のファイル名のリストを作成することです。ファイルは、ディレクトリ名、拡張子、およびすべての番号から削除する必要があります。上記のコードスニペットは、次のように書き直すことができます${(u)$(echo /usr/share/info/**/*(.)):t:r:r}
。これは同じ結果を提供しますが、より適切な構文を使用します。例:
**/*
:すべてのサブディレクトリにドロップダウンし、そこにあるすべての項目を表示します。(.)
:一般ファイルのみ選択:t
:パス名コンポーネントの削除(に似ていますbasename
):r
:拡張子(点を含む最後の点の後のすべての内容)を削除します。不要な文字列と数字を削除するために2回適用されます(.info-6
ファイル内などzsh.info-6.bz2
)。(u)
:一意の単語のみを表示します(以前の操作以降の同じ単語が多い - 同じ情報コマンドの異なるファイル/章)。
答え2
/usr/share/man/manX
マニュアルページはこのセクションの場所に保存されます(参考資料に記載されています)。 gzip形式で圧縮されているので、圧縮ファイルが大きいほどマンページも大きくなるとします。X
man man
/usr/share/man/man1
チェックインコマンド(セクション1:実行可能プログラムまたはシェルコマンド)を使用して、次のようにgzip -l *.gz | sort -n -k2
なりました(これはディストリビューションによって異なり、複数のパッケージを含むArch Linuxシステムにありました)。ここで、最初の最初の列は次のとおりです。圧縮ファイルサイズで、2番目の列は圧縮されていないファイルサイズです。
161077 607106 73.5% ffprobe-all.1
198943 757155 73.7% ffserver-all.1
217339 792577 72.6% msp430-g++.1
217339 792577 72.6% msp430-gcc.1
209129 794118 73.7% ffmpeg-all.1
261778 972719 73.1% avr-g++.1
261778 972719 73.1% avr-gcc.1
262154 975423 73.1% g++.1
262154 975423 73.1% gcc.1
227830 1123043 79.7% perltoc.1perl
答え3
@Renanと@jimmijが提供した方法に代わるものは、wireshark-filter
私のシステムで大きな勝利を収めました。
for i in {1..9}; do du -sh man"$i"/*.gz | grep -v "^..0K" | grep -v "^0\|^12K\|^16K\|^[0-9][0-9]K" ; done
これに基づいて、最大のエントリをそれぞれ開き、man
ファイルの終わりの行数をaにチェックして、:f
次のような結果を得ました。
wireshark-filter = 245016 lines
gcc = 8341 lines
perlfunc = 5132 lines
答え4
@jimmijの例は興味深いですが、サブディレクトリの結果だけを返すので、正しくありません。 Debian 7 でスクリプトを実行すると、次のような結果が表示されます。
/usr/share/man/man3/DBI.3pm.gz 6182 35812 271206
/usr/share/man/man8/openvpn.8.gz 4021 24702 202032
/usr/share/man/pt/man1/nmap.1.gz 2563 21214 159284
/usr/share/man/man8/lsof.8.gz 2714 18670 142698
/usr/share/man/man3/pcrepattern.3.gz 2579 18631 131204
/usr/share/man/man3/pcreapi.3.gz 2382 16966 123349
/usr/share/man/man8/iptables.8.gz 2631 14844 114354
/usr/share/man/man8/ip6tables.8.gz 2465 13619 105283
/usr/share/man/man3/CPAN.3perl.gz 2142 12346 98823
/usr/share/man/man8/mount.8.gz 2136 12059 97407
問題を解決するためのクイック修正方法は次のとおりです。
find /usr/share/man/ -type f -ls | \
awk '{ printf "%s %s\n", $7, $11; }' | \
sort -r -n 2>/dev/null | \
awk '{ printf "%s\n", $2; }' 2>/dev/null | head -n 20 |
while \
read -r file; do printf "%-40s" "$file"; \
man "$file" 2>/dev/null | wc -lwm; done | sort -nrk 4
私のDebian 7システムで
/usr/share/man/man1/cmake.1.gz 19264 86499 803021
/usr/share/man/man1/perltoc.1.gz 18755 62738 657990
/usr/share/man/man1/fvwm2.1.gz 8942 57060 462861
/usr/share/man/man1/cmakemodules.1.gz 9843 37965 376314
/usr/share/man/man1/perlfunc.1.gz 7535 47684 370246
/usr/share/man/man5/smb.conf.5.gz 8303 49962 359329
/usr/share/man/man1/cpack.1.gz 8037 38214 342264
/usr/share/man/man1/bash.1.gz 5465 42031 320015
/usr/share/man/man1/perlapi.1.gz 7074 36791 309196
/usr/share/man/man1/xterm-dev.1.gz 6242 34747 297639
/usr/share/man/man3/DBI.3pm.gz 6182 35812 271206
/usr/share/man/man1/xterm.1.gz 5238 29434 253526
/usr/share/man/man1/zshcompsys.1.gz 4502 31336 244115
/usr/share/man/man1/perldiag.1.gz 4939 33200 237882
/usr/share/man/man1/tcsh.1.gz 4355 29640 226498
/usr/share/man/ru/man1/nmap.1.gz 3048 21396 187181
/usr/share/man/hu/man1/nmap.1.gz 3020 21519 186431
/usr/share/man/de/man1/nmap.1.gz 2965 21384 182926
/usr/share/man/man1/nmap.1.gz 3005 24785 179485
/usr/share/man/ru/man1/mc.1.gz 3571 19200 173292
とにかく、/usr/share/man
このコンピュータには10326ファイル(ymmv)があります。