어떤 명령이 실행 파일과 일치하는지 알아내는 unix 명령은 무엇입니까?


18

예를 들어, 통과하면 ls 입력으로 말해야한다. /bin/ls 실행하면 실행됩니다. ls 명령 행에서.

답변:


23

사용할 명령은 쉘마다 다릅니다.

내장 명령 만이 별명, 쉘 기능, 기타 내장 기능 등에 대해 완전히 알 수 있기 때문에 쉘에 주어진 명령 이름에 대해 쉘이 수행 할 작업을 정확하게 알려줄 것입니다. 주의 사항 : 모든 명령이 실행 파일과 일치하는 것은 아닙니다.

  • Bourne Again 쉘의 경우, bash, 내장 기능은 type 명령:

    $ type '['
    [ is a shell builtin
    
  • 물고기 껍질 들어, fish, type builtin은 bash와 비슷하게 작동합니다. 실행 파일의 경로를 얻으려면 다음을 사용하십시오. command -v:

    $ type cat
    cat is /bin/cat
    $ command -v cat
    /bin/cat
    
  • Korn 쉘의 경우, ksh, 내장 기능은 whence 명령 - with type 초기 별칭으로 설정 whence -v 그리고 command 내장형 -v 옵션과 동등한 옵션 whence:

    $ whence -v ls
    ls is a tracked alias for /bin/ls
    
  • Z Shell의 경우, zsh, 내장 기능은 whence 명령과 함께 command 내장형 -v 옵션과 동등한 옵션 whence 및 내장 기능 type, which, 및 where ~에 해당 whence 옵션과 함께 -v, -c, 및 -ca 각기.

    $ whence ls
    /bin/ls
    
  • T C 쉘의 경우, tcsh, 내장 기능은 which command - 그 이름의 외부 명령과 혼동해서는 안됩니다 :

    > which ls
    ls: aliased to ls-F
    > which \ls
    /bin/ls
    

추가 읽기


ksh에서 "type"은 "whence -v"의 기본 별명이므로 기존 bourne 쉘 및 bash와 마찬가지로 사용할 수 있습니다.
jlliagre

type 또한 zsh에 내장되어 있습니까?
Hongxu Chen

RHEL6의 RPM (예 : which-2.19-6.el6.x86_64 )는 시작 파일을에 넣습니다. /etc/profile.d/which2.sh. 이것은 zsh를 포함하여 csh가 아닌 쉘이 읽습니다. 별칭 which 자신에게. 따라서 zsh 사용자의 경우 특히 재정의하면 기본 제공이 중단됩니다. which.
Dan Pritts

14

당신이 사용할 수있는 which 이것을 위해 :

aix@aix:~$ which ls
/bin/ls

그것은 검색하여 작동합니다. PATH 인수의 이름과 일치하는 실행 파일의 경우. 쉘 별칭에서는 작동하지 않습니다.

aix@aix:~$ alias listdir=/bin/ls
aix@aix:~$ listdir /
bin    dev   initrd.img      lib32   media  proc  selinux  tmp  vmlinuz
...
aix@aix:~$ which listdir
aix@aix:~$

type그러나 작동하지 않습니다.

aix@aix:~$ type listdir
listdir is aliased to `/bin/ls'

3
주의 할 점은 : ls가 함수이거나 앨리어싱 된 경우, 'ls'가 아닌 'ls'를 원한다.
William Pursell

1
which 반드시 그 자체만으로는 충분하지 않습니다. 그것은 단지 먼저 녹이다 이름 $ PATH에 ... 그게 이름 기호 링크 일 수 있습니다. 아니 실제의 체인 끝 실행 파일.
Peter.O

7

which ~하다 아니 (필연적으로) 실행 파일을 반환합니다. 첫 번째로 일치하는 파일을 반환합니다. 이름 그것은 $ PATH (또는 여러 개의 비슷한 이름의 파일을 사용할 때 찾는다. which -a ) ... 실제의 실행 파일은 여러 링크 떨어져있을 수 있습니다.

  • which locate
    /usr/bin/locate
    `
  • file $(which locate)
    /usr/bin/locate: symbolic link to /etc/alternatives/locate'

이 명령은 실제의 실행 파일은 readlink -e,
(와 함께 which )

  • readlink -e $(which locate)
    /usr/bin/mlocate

모든 중간을보기 위해 모래밭 :

f="$(which locate)"             # find name in $PATH
printf "# %s\n" "$f"
while f="$(readlink "$f")" ;do  # follow links to executable
    printf "# %s\n" "$f"
done

# /usr/bin/locate
# /etc/alternatives/locate
# /usr/bin/mlocate

4

당신은 시도 할 수 있습니다:

whereis ls

그것은 나를 준다 :

ls: /bin/ls /usr/share/man/man1/ls.1.gz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.