foo라는 프로그램이 있는 경우 foo 대신 ./foo라고 말해야 하는 이유는 무엇입니까? ./는 단지 현재 디렉토리를 의미하지 않나요?
답변1
방금 명령을 입력한 경우 – 예: foo
– 쉘은 bash
(보통) /bin, /usr/bin, /usr/X11R6/bin 등과 같은 특정 디렉토리에서만 이를 찾습니다. 그것은 일반적으로아니요보안상의 이유로 "현재 디렉터리"(예: ".")를 확인하십시오(특히당신이라면 어떨까요?뿌리). "."이 추가된 경우에는 다음 항목에 추가해야 합니다.끝검색 경로.
실행 파일을 실행하고 싶다면아니요이 검색 경로에서는 명령의 전체 절대 또는 상대 경로를 지정해야 합니다. 예를 들어:
/home/bok/foo # Absolute in my homedir
~/src/bar # Shorthand for my homedir and a subdir in it
../Download/foobar # Relative path – up one step, then down in Download
또는 - 명령이 현재 디렉토리에 있는 경우 - 다음을 추가하세요 ./
.
./foo
검색 경로는 다음 bash
위치에 저장됩니다.길환경 변수이므로 다음을 입력하여 볼 수 있습니다.
echo $PATH
"."를 추가하세요 – 당신은 정말해서는 안 된다해야 할 일 – 입력:
export PATH="$PATH:."
PATH는 순차적으로 검색되므로 서로 다른 디렉터리에 동일한 이름을 가진 실행 파일이 여러 개 있는 경우 쉘은 PATH의 첫 번째 디렉터리에 있는 실행 파일을 실행합니다.
나열된 모든 디렉터리를 처음 본 후 "명령을 찾을 수 없음" 오류가 발생합니까?
+++
현재 디렉터리를 PATH에 추가할 때의 문제는 .
"비표준" 디렉터리에 있는 실행 파일이 실행되어야 하는지 여부를 실제로 알 수 없다는 것입니다.
내가 사악해서 가능한 한 많은 파일을 삭제하고 이를 내 홈 디렉토리(또는 더 나쁘게는 /tmp)에 남겨두는 파괴적인 프로그램을 만든다고 가정해 보겠습니다. 이 프로그램을 sl
일반적인 유형의 실수 ls
라고 부르고 기다리겠습니다.
일부 임의의 사용자가 /tmp에 있고 ls
철자가 틀 렸습니다 sl
. 일반 PATH를 사용하면 아무 일도 일어나지 않습니다. "명령을 찾을 수 없음" 오류가 발생하는 것 외에는 아무 일도 일어나지 않습니다. PATH 끝에 '.'이 있으면 명령을 입력할 때 오류가 발생하지 않습니다. 대신 내 sl
명령이 실행되어 그가 가지고 있는 모든 파일을 삭제합니다. 혹시 그 사람이 그렇다면뿌리, 이 명령은 대부분의 시스템을 삭제할 수 있습니다. (그래서뿌리 정말로 그래야 한다규칙을 만들어라언제나사용전체 경로PATH를 신뢰하는 대신 명령을 사용하세요. )
만약 그가 자신의 경로에 "."를 먼저 입력하고 내가 (올바른 철자법)이라는 프로그램을 만들어 ls
디렉토리에 넣었다면 다음과 같을 것입니다.내 거일반적인 프로그램이 아닌 프로그램은 그가 해당 디렉토리에 입력하면 ls
실행됩니다 . 현재 디렉터리(.)에서 검색되기 ls
때문입니다 .bash
첫 번째– 정품 버전의 시스템 카탈로그를 보기 전 ls
.