프로그램을 실행할 때 "./"를 사용하는 이유는 무엇입니까? [복사]

프로그램을 실행할 때 "./"를 사용하는 이유는 무엇입니까? [복사]

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.

관련 정보