답변:
내장 명령 만이 별명, 쉘 기능, 기타 내장 기능 등에 대해 완전히 알 수 있기 때문에 쉘에 주어진 명령 이름에 대해 쉘이 수행 할 작업을 정확하게 알려줄 것입니다. 주의 사항 : 모든 명령이 실행 파일과 일치하는 것은 아닙니다.
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
type
또한 zsh에 내장되어 있습니까?
which-2.19-6.el6.x86_64
)는 시작 파일을에 넣습니다. /etc/profile.d/which2.sh
. 이것은 zsh를 포함하여 csh가 아닌 쉘이 읽습니다. 별칭 which
자신에게. 따라서 zsh 사용자의 경우 특히 재정의하면 기본 제공이 중단됩니다. which
.
당신이 사용할 수있는 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'
which
반드시 그 자체만으로는 충분하지 않습니다. 그것은 단지 먼저 녹이다 이름 $ PATH에 ... 그게 이름 기호 링크 일 수 있습니다. 아니 실제의 체인 끝 실행 파일.
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
당신은 시도 할 수 있습니다:
whereis ls
그것은 나를 준다 :
ls: /bin/ls /usr/share/man/man1/ls.1.gz