어떤 명령의 매뉴얼 페이지가 가장 긴지 쉽게 알아낼 수 있는 방법이 있습니까?
답변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
: 확장명(점을 포함하여 마지막 점 뒤의 모든 내용)을 제거합니다. 불필요한 문자열과 숫자를 제거하기 위해 두 번 적용됩니다(예:.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 시스템에 있었습니다). 여기서 첫 번째 첫 번째 열은 다음과 같습니다. 압축된 파일 크기이고 두 번째 열은 압축되지 않은 파일 크기입니다.
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)이 있습니다.