답변:
$ PATH는 처음부터 끝까지 검색되며 일치하는 첫 번째 실행 파일이 실행됩니다. 따라서 $ PATH 시작 부분의 디렉토리가 나중에 오는 디렉토리보다 우선합니다. 현재 디렉토리 (.)의 실행 파일은 경우에만 실행됩니다. $ PATH에 있습니다 ( 보통 그렇지 않습니다 ). 검색 경로에 현재 디렉토리가 암시 적으로 포함되어 있지 않습니다.
.
하지만 $ PATH 자체에 검사 디렉토리가 정의되기 전에 현재 디렉토리에서 먼저 검색하는 것 같습니다.
현재 디렉토리에있는 파일의 경우 파일 앞에을 추가 ./
하여 명령이됩니다 ./executable.sh
. .
PATH에는 다른 문제 중에서 보안 위험이 있으므로 절대 PATH에 없어야합니다 .
PATH에서 맨 먼저 찾아서 검색 한 디렉토리
올바르게 기억하면 검색 의 전체 순서 는 다음과 같습니다.
별명
내 보낸 함수
내장 쉘 명령
PATH의 스크립트 및 바이너리
hash -r
PATH 또는 프로그램 위치를 변경하면을 사용하여 캐시를 제거해야하는 경우가 있습니다.
다른 사람들이 잘 대답했지만 몇 가지 생각을 추가하고 싶습니다.
1) PATH는 호출 된 실행 파일에 경로 요소가없는 경우에만 참조됩니다. somecommand $ PATH에서 조회 할 것이다, ./somecommand
또는 /usr/bin/somecommand
, 또는 ../../bin/somecommand
단지 사용 디렉토리 규칙,하지 PATH
동일한 이름의 PATH에 여러 개의 실행 파일이있는 경우 어떤 파일이 선호됩니까?
왼쪽에서 오른쪽으로 $ PATH를 읽고 처음 찾은 지점에서 멈 춥니 다.
파일이 실행될 때 현재 디렉토리가 검색에 포함됩니까?
현재 디렉토리가 PATH에 있으면 검색됩니다. PATH의 빈 디렉토리에는 현재 디렉토리가 포함되어 있습니다. 예를 들어 PATH = : / usr / bin (리딩 비어 있음) PATH = / usr / bin :( 트레일 링 비어 있음) 및 PATH = / usr / bin :: / bin (중간 비어 있음)에는 현재 작업 디렉토리가 모두 효과적으로 포함됩니다.
현재 디렉토리에 executable.sh라는 이름의 파일이 있다고 가정하십시오. 그것이 실행되고 $ 실행되면 작동합니까? PATH의 일부가 아닙니까?
PATH를 검색하여 찾지 못합니다. 현재 디렉토리가 PATH에 없으면 PATH 조회로 찾지 않습니다.
명령을 실행하는 별칭이나 함수가 있으면 실행됩니다. 또는 쉘에 위치 캐시가 있고 실행 파일이 캐시에 있으면 찾을 수 있습니다. 그래서, 그것은 것입니다 결코 PATH에서 찾을 수 없지만 다른 방법으로 실행할 수 있습니다.
cache
메모 주셔서 감사 합니다. 거의 실행 파일 /usr/bin/
이 여전히 새 실행 파일 이 아닌 호출 된 것으로 미치게 됩니다 /usr/local/bin
. 그러나 $PATH
로그 아웃하고 다시 로그인 할 때까지 왼쪽에 있습니다.
현재 경로가 무엇인지 보려면 echo $PATH
, 또는을 입력하십시오 printenv PATH
.
그러면 검색 순서를 알 수 있습니다. 이름이 같은 파일이 여러 개인 경우 ____를 실행하여 확인하십시오.
전의.
grep하는 시스템 #>
/ usr / bin / grep
대상처럼 작동하는 파일을 찾는 멋진 방법은 apropos를 사용하는 것입니다.
apropos grep
bzgrep (1)-정규식에 대한 bzip2 압축 파일 검색
egrep (1)-패턴과 일치하는 줄을 인쇄
fgrep (1)-패턴과 일치하는 줄을 인쇄
grep (1)-패턴과 일치하는 줄 인쇄
등등...
whereis
이 아닌 하드 코드 된 위치 목록을 사용합니다 $PATH
.
@ coneslayer- 실행 파일을 찾는 기본 순서는 현재 경로이며 명령에 내장 된 다음 $ PATH입니다. 따라서 executable이라는 함수가 이미 pwd에 존재하면 그 함수가 실행됩니다.
./
) 으로 경로를 지정하면 해당 디렉토리 만 검색합니다. 그렇지 않으면를 검색 $PATH
합니다.
which <executable>
이 스레드에서 언급 명령이 유용합니다.