실행 파일을 실행하기 위해 왜 ./가 필요한가?


9

나는 우분투를 사용하고 있으며 테마를 앞에 두지 않으면 실행 가능한 많은 스크립트가 실행되지 않습니다 ./.

예를 들어, 내가 perl 스크립트를 가지고 있고 /home/me/script.pl현재에 있다면 /home/me, 입력 script.pl하면하지 않지만 그렇게 할 ./script.pl것입니다.

왜 그런 겁니까?


@David B : runnable file => executable file?
Lazer

답변:


13

스크립트를 실행하려면 스크립트가 환경 변수에 나열된 디렉토리 중 하나에 없는 경우 스크립트 의 전체 경로를 입력해야 $PATH합니다. 일반적으로 (기본적으로) .(현재 디렉토리)가 아닌 사용자에 $PATH사용자가 입력 할 필요가 있으므로, ./script그것을 실행.


21

현재 디렉토리가 경로에 없기 때문입니다. 이것은 안전 기능입니다. 경로에 있다면 누군가가 공통 명령의 악의적 인 사본을 삭제할 수 있으며 실제 sudo를 실행하는 대신 해당 디렉토리에있을 때 가짜 명령을 실행할 수 있습니다. 그건 나쁜 일이야


3
이것은 다소 오해의 소지가 있습니다. 그 .이후로 /usr/bin/, 그것은 실제를 대체하지 않을 것 sudo입니다. 실수로 경로에 프로그램을 추가하지 않도록하는 것이지만 기존 프로그램을 대체하는 것이 아닙니다.
Matthew Flaschen

대신에 및을 sudo사용 합니다. 훨씬 더 불려질 것입니다. lsrm
Aaron Digulla

@aaron : 확실하지만 ls암호를 요구하지 않으며 사용자가 sudo암호를 사용할 수 있는지 흥미 롭습니다 ...;)
laurent

1
@ 매튜. 예, 여전히 악용하기는 어렵지만 실제 보안 위험이 있습니다. 내가 sl나쁜 일을 한 다음 호출 ls하고 삭제 하는 스크립트 를 작성 한다고 가정 해 봅시다. 시스템 도구를 재정의 할 수는 없지만 'typosquat'는 가능합니다.
Rich Homolka

@laurent : 내가 생각한 것은 : cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@". 비밀번호를 몰라도됩니다.
Aaron Digulla

4
echo $PATH

이것이 작동하려면 경로에 현재 디렉토리 (단일 점)가 있어야합니다.

다음 명령을 사용하여 경로에 추가 할 수 있습니다.

sh / bash : export PATH=$PATH:.

tcsh / csh : set PATH = ($PATH .)


3

쉘은 실행 파일에 대한 경로를 검색하며 기본적으로 ./경로에 없습니다.

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