쉘-어떤 명령의 디렉토리를 찾는 방법?


127

쉘에있을 때 사용할 수있는 유일한 명령은 PATH에 설정된 일부 디렉토리에서 찾을 수있는 명령이라는 것을 알고 있습니다. 심지어 PATH 변수에 어떤 dirs가 있는지 (그리고 이것이 대답 할 수있는 또 다른 좋은 질문입니다) 어떻게 알 수 있는지 알고 싶습니다.

나는 쉘에 와서 다음과 같이 쓴다.

$ lshw

이 명령이 어디에 있는지 알려주는 쉘의 명령을 알고 싶습니다. 즉,이 "실행 파일"이 어디에 있습니까?

다음과 같은 것 :

$ location lshw
/usr/bin

누군가?

답변:


187

Bash 또는 zsh를 사용하는 경우 다음을 사용하십시오.

type -a lshw

대상이 내장, 함수, 별명 또는 외부 실행 파일인지 여부가 표시됩니다. 후자 인 경우에 표시되는 각 장소가 표시됩니다 PATH.

bash$ type -a lshw
lshw is /usr/bin/lshw
bash$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
bash$ zsh
zsh% type -a which
which is a shell builtin
which is /usr/bin/which

Bash에서 함수의 type -a경우 함수 정의도 표시됩니다. declare -f functionname동일한 작업을 수행하는 데 사용할 수 있습니다 (zsh에는 사용 type -a하지 않아야 함).


답변 한 모든 사람에게 감사하지만이 답변이 가장 흥미로 웠습니다! 감사합니다! 나는 (오래 전에) 이것을 수행하는 방법을 정의했기 때문에 내가 미쳤다고 생각했다 : '업데이트', 그리고 'apt-get update; apt-get dist-upgrade '를 선택하십시오. 그러나 지금은 update.sh 파일을 찾으려고했지만 찾을 수 없었습니다. 그래서이 질문을 시작했습니다. 그러나 이제 'type -a update'를 사용하면 ~ home에있는 .bashrc에 정의 된 별칭이라는 것을 알았습니다. 정말 고마워.
Gabriel L. Oliveira

1
@Gabriel : 익숙하지 않으면 locate파일을 찾는 데 도움이 될 수 있습니다. updatedb크론 작업에서 실행되는 데이터베이스를 사용합니다 . locate전체 파일 시스템이 아닌 데이터베이스를 검색하기 때문에 find(마지막 수단으로 사용할 수있는) 보다 훨씬 빠릅니다 .
추후 공지가있을 때까지 일시 중지되었습니다.

감사합니다. 이 도구를 연구하고 Ubuntu의 cronjob에서 updatedb가 실행되는 방식을 확인합니다.
Gabriel L. Oliveira

때로는 type -a혼란 스러울 수 있습니다. 예를 들어 nvmbash 함수가있는 경우 type -a nvm | head -n1정확히 해야하는 것을 찾기 위해해야했습니다 nvm.
Marinos An

@MarinosAn : 함수의 type -a경우 함수 정의와 실행 파일 유형을 출력합니다. 사용시 위험 head은 유형이 둘 이상인 이름의 경우 추가 유형이 출력되지 않는다는 것입니다. 를보고 싶을 수도 있습니다 type -t.
추후 공지가있을 때까지 일시 중지되었습니다.

64

이처럼 :

which lshw

경로에서 일치하는 모든 명령을 보려면

which -a lshw 

7
또한 경로에서 일치하는 모든 명령을 보려면 lshw입니다.
AlG

나는 이것이 기능이 아닌 명령 ($ PATH의 실행 파일)에서만 작동한다고 생각합니다.
Olivier Lacan

which여러 구현이 있기 때문에 문제가 있습니다. 그 중 많은 것이 완전히 잘못된 일을하고 다른 것들은 잘 작동하는 것처럼 보이지만 놀라운 결과를 가져옵니다. type대신 선호해야합니다 .
tripleee

별칭 및 bash 기능에는 작동하지 않습니다. 적어도 우분투에서는. 더 나은 사용type -a lshw
Marinos An

17

PATH 환경 변수이며 echo 명령으로 표시 할 수 있습니다.

echo $PATH

콜론 문자 '로 구분 된 경로 목록입니다.: '로

which명령은 명령을 실행할 때 어떤 파일이 실행되는지 알려줍니다.

which lshw

때때로 당신이 얻는 것은 심볼릭 링크의 길입니다. 실제 실행 파일이있는 위치에 대한 링크를 추적하려면 다음을 사용 readlink하여 출력하십시오 which.

readlink -f $(which lshw)

-f매개 변수에 지시readlink 는 심볼릭 링크를 재귀 적으로 도록 합니다.

내 컴퓨터의 예는 다음과 같습니다.

$ which firefox
/usr/bin/firefox

$ readlink -f $(which firefox)
/usr/lib/firefox-3.6.3/firefox.sh

5
~$ echo $PATH
/home/jack/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
~$ whereis lshw
lshw: /usr/bin/lshw /usr/share/man/man1/lshw.1.gz

3

TENEX C 쉘인 tcsh 에서 다음 명령을 사용하여 명령의 위치를 ​​표시하거나 내장 명령 인 경우 다음을 수행 할 수 있습니다 where.

tcsh% where python
/usr/local/bin/python
/usr/bin/python

tcsh% where cd
cd is a shell built-in
/usr/bin/cd


0

대안 type -acommand -V

대부분의 경우 첫 번째 결과에만 관심이 있기 때문에 헤드에서 파이프도합니다. 이렇게하면 bash 기능의 경우 화면에 코드가 넘치지 않습니다.

command -V lshw | head -n1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.