명령의 출력이 심볼릭 링크의 출력과 일치하지 않습니다.

명령의 출력이 심볼릭 링크의 출력과 일치하지 않습니다.

저는 Raspberry Pi에서 RASPBIAN을 사용하고 있습니다. 나는 "apropos" 명령이 "wahtis" 명령에 대한 심볼릭 링크라는 것을 발견했습니다. 그러나 동일한 매개변수와 함께 사용하면 다음 명령의 출력이 일치하지 않습니다.

$ whatis delete
delete: nothing appropriate.

하지만

$ apropos delete
argz_delete (3)      - functions to handle an argz list
delete_module (2)    - unload a kernel module
dphys-swapfile (8)   - set up, mount/unmount, and delete an swap file
git-branch (1)       - List, create, or delete branches
git-replace (1)      - Create, list, delete refs to replace objects
git-symbolic-ref (1) - Read, modify and delete symbolic refs
git-tag (1)          - Create, list, delete or verify a tag object signed 
***output is truncated to save space....***

분명히, apropos는 whatis에 대한 상징적 링크입니다.

pi@raspberry:~ $ which apropos
/usr/bin/apropos
pi@raspberry:~ $ ls -l /usr/bin/apropos
lrwxrwxrwx 1 root root 6 Aug 24  2017 /usr/bin/apropos -> whatis

어떻게 이런 일이 일어날 수 있습니까?

답변1

실행 중인 실행 파일은 전체 호출 명령줄을 알고 호출된 이름을 기반으로 해당 동작을 수정할 수 있습니다. apropos/의 특정 인스턴스 에 대해서는 whatis다음을 볼 수 있습니다.소스 코드에서(링크된 최신 버전의 895번째 줄 부근) 가장 먼저 해야 할 일은 명령이 이름으로 호출되는지 확인하는 것입니다 apropos.

int main (int argc, char *argv[])
{
#ifdef HAVE_ICONV
    char *locale_charset;
#endif
    int status = OK;

    program_name = base_name (argv[0]);
    if (STREQ (program_name, APROPOS_NAME)) {
        am_apropos = 1;
        argp_program_version = "apropos " PACKAGE_VERSION;
    } else {

am_apropos또한 처리 중에 플래그를 확인하고 플래그 설정 여부에 따라 다르게 동작하는 위치가 약 12개 있습니다 .

관련 정보