최근 한 사용자가 나에게 도움을 요청하여 다음과 같이 썼습니다.
"통화에
man /bin/find
잘못된 문자가 표시되는 이유는 무엇입니까?"
man
나는 그가 경로를 제공함으로써 이를 잘못 사용하고 있다고 대답했습니다. 즉, man
실행 파일을 매뉴얼 페이지 소스 파일로 해석하고 경로 없이 테마 이름만 제공해야 한다고 대답했습니다. 즉, man find
그때 그가 저를 당황하게 만드는 질문을 생각해 냈습니다.
"그럼 루트로 실행하면 왜 작동하나요
sudo man /bin/find
?"
나는 그것을 시도했고, 루트 쉘을 사용하거나 sudo
루트 쉘에서 루트로 호출할 때 sudo man /bin/find
실행 파일 대신 매뉴얼 페이지가 표시됩니다.
- 특별한 것은 없습니다
find
. 이것은 모든 실행 파일에 적용됩니다. - 이는 RHEL 7 및 8에서 발생하지만 Mac OS에서는 바이너리를 루트 또는 사용자로 표시합니다.
- 의 매뉴얼 페이지에서 이에 대한 언급을 찾을 수 없습니다
man
. - 나는 현실 점검을 수행했고
ls -i man
동일한sudo ls -i man
인덱스 노드를 반환했습니다. 에 대해서도 마찬가지입니다/bin/find
. man
아직 별칭이 지정되지 않았습니다.- 셸에서 실행하면
bash -x
대체 항목이 표시되지 않습니다.
나는 확실히 간단한 것을 간과하고 있습니다. 이 현상에 대한 설명은 무엇입니까?
답변1
나는 그것을 테스트했고 당신 말이 맞습니다. man /usr/bin/find
바이너리가 아닌 디스플레이 페이지를 감독합니다 . 뿐만 아니라 추가하면 /bin
바이너리 $PATH
대신 페이지도 표시됩니다 man /bin/find
. 실제 루트(sudo가 아님)가 바이너리를 표시하는지 확인할 수도 있습니다.
그럼 여기서 무슨 일이 벌어지고 있는 걸까요?
Man
이 경로가 존재하는 경우 매개변수에서 해당 경로를 제거하십시오$PATH
. 실행 가능한 경로를 제거해도 바이너리가 표시되지 않는 것은 분명한 것 같습니다man
. 아마도 그들은 인수의 용어와 이진법을 구별하는 다른 방법이 없을 수도 있습니다.- 승인되지 않은 명령이 실행되는 것을 방지하기 위해 sudo는 EL 시스템에 자체 정의를 갖고 있으며
PATH
모든 명령은 다른 환경에서 실행됩니다.secure_path
/etc/sudoers
/sbin:/bin:/usr/sbin:/usr/bin
sudo
PATH
- EL 시스템에서
/bin/find
이것은 하드 링크 이며/usr/bin/find
기본적으로/bin
추가되지 않습니다$PATH
. 이로 인해man
이것이 바이너리라는 것을 이해하지 못했지만sudo
추가되었으므로/bin
이제$PATH
이해할man
수 있게 되었습니다.