apropos와 man -k가 유효한 결과를 생략하거나 누락하는 이유는 무엇입니까?

apropos와 man -k가 유효한 결과를 생략하거나 누락하는 이유는 무엇입니까?

예를 들어, 다음 명령을 입력하면:

$ man -k compare

diff명령이 결과에서 누락되었지만 test실제로는 존재하지 않습니다. apropos예상대로 사용하여 동일한 결과를 얻었습니다 .

$ whereis diff
diff: /usr/bin/diff /usr/share/man/man1/diff.1.gz
$ whereis test
test: /usr/bin/test /usr/share/man/man1/test.1.gz

간단한 설명을 확인해보면 diff결과는 다음과 같습니다.

NAME
       GNU diff - compare files line by line

보시다시피 짧은 설명에 "비교"가 있습니다. 또한 긴 설명도 확인해 보겠습니다.

DESCRIPTION
       Compare FILES line by line.

설명에 "비교"가 다시 나타납니다.

이제 다음의 간단한 설명을 살펴보겠습니다 test.

NAME
       test - check file types and compare values

이것이 바로 제가 기대했던 것입니다. 그러나 테스트 설명에는 "비교"가 빠졌습니다.

그래서 왜 찾을 man -k compare수 없는지 잘 모르겠습니다 . 그러나 나는 이것이 명령의 출력과 관련이 있다고 생각합니다 .apropos comparediffwhatis

$ whatis diff
diff (1)             - (unknown subject)
$ whatis test
test (1)             - check file types and compare values

이제 이러한 차이가 발생하는 이유는 매뉴얼 페이지의 이름이 하나가 아닌 "GNU diff"라는 두 단어로 구성되어 있기 때문일 수 있지만 diff확실하지는 않습니다.

답변1

이것은 GNU diffutils 패키지 매뉴얼 페이지의 버그입니다. 의심할 수 있듯이 문제는 프로그램 이름으로 "diff"만 표시하는 것이 아니라 "GNU diff" 등을 표시한다는 것입니다. 이로 인해 man 프로그램이 간단한 설명을 인식하지 못하게 됩니다.

python3
>>> import dbm
>>> db = dbm.open('/var/cache/man/index.db')
>>> db['diff\0']
b'-\t1\t1\t1554725040\t0\tA\t-\t-\tgz\t\x00'
>>> db['cat\0']
b'-\t1\t1\t1567679920\t0\tA\t-\t-\tgz\tconcatenate files and print on the standard output\x00'

이 버그는 diffutils 3.3 이후에 발생했지만 diffutils 3.6 이전에 발생했습니다. 보고서에 따르면버그 #39760그리고 고정이번에 제출하세요아니면 실제로 가능함이번에 제출하세요. 이 수정 사항은 아직 릴리스되지 않았으며 diffutils 3.8에서 릴리스될 예정입니다.

관련 정보