답변:
Linux, UNIX 및 관련 운영 체제 .
에서 현재 디렉토리를 나타냅니다. 현재 디렉토리에서 파일을 실행하고 해당 디렉토리가에 있지 않기 때문에 실행 파일이있는 위치를 쉘에 알려주는 비트가 $PATH
필요합니다 ./
. 따라서이 디렉토리에 ./foo
있는 실행 파일을 실행해야합니다 foo
.
alias
, 방법으로 단지를 얻을 수 있습니다 말이지 $PATH
.
.
먼저이 보안 문제가 될 것입니다, 당신 또는 대체 할 수있는 다른 사람 ls
(예를 들어, 간단한 바이러스 / trojen :라는 이름의 실행 파일과 압축 파일 만들기 ls
누군가를 검색 한, 그것에을 , 그들은이 실행 파일을 실행합니다 ...). 그것에서 검색하면 .
마지막으로 당신은 (대신이 시스템 테스트 프로그램을 실행 프로그램을 실행하는, 예를 들어, 당신은 테스트라는 프로그램을합니다. 더 출력을 생성하지 않는) 프로그램이 작동하지 않는 이유 미친 모르고가는 긴 시간을 보낼 수 있습니다.
export PATH="$PATH:."
PATH의 다른 곳에서 찾을 수없는 경우 현재 디렉토리에서 명령을 실행 하도록 실행할 수 있습니다. .bashrc 파일에 추가 할 수 있습니다.
현재 디렉토리가에 있지 않기 때문에 문자 그대로의 대답은 다른 사람들이 제공 한 것과 같습니다 $PATH
.
그런데 왜? 간단히 말해, 보안을위한 것입니다. 다른 사람의 홈 디렉토리 (또는 / tmp)를 찾고 just gcc
또는을 입력 ls
하는 경우, 장난 꾸러기 친구가 작성한 악성 버전이 아니라 실제 파일을 실행하고 있다는 것을 알고 싶어합니다. 모든 파일이 지워집니다. 또 다른 예는 것 test
또는 [
쉘 내장 기능으로 사람들이없는 경우, 쉘 스크립트에서 이러한 명령을 무시할 수있는.
갖는 .
는 AS 마지막 경로에 진입하는 것은 조금 더 안전하지만, 그 사용을 다른 공격이있다. 쉬운 방법은 sl
또는 과 같은 일반적인 오타를 이용하는 것 ls-l
입니다. 또는이 시스템에 설치되지 않은 일반적인 명령을 찾으십시오. vim
예를 들어 sysadmins는 평균 이상의 입력 가능성을 가지고 있기 때문입니다.
PATH
환경 변수 에 절대 경로가 있습니다.
즉, 시작시 ./가 필요한 이유는 Windows와 달리 현재 디렉토리가 기본적으로 경로의 일부가 아니기 때문입니다. 당신이 실행하는 경우 :
$ ls
쉘은 ls
PATH 환경 변수의 디렉토리에서 찾아보고 찾은 echo $PATH
첫 번째 실행 파일을 실행합니다 ls
. 입력하면 :
$ a.out
쉘도 마찬가지입니다. 그러나 아마도 a.out이라는 실행 파일을 찾지 못할 것입니다. 쉘에 a.out이 어디에 있는지 알려줘야한다. 그것은 현재 디렉토리 (.)에 있고 경로는이다 ./a.out
.
왜 "a.out"이라고 부르는지 묻는다면 gcc의 기본 출력 파일 이름 일뿐입니다. -o 명령 행 arg를 사용하여 변경할 수 있습니다. 예를 들면 다음과 같습니다.
$ gcc test.c -o test
$ ./test
touch .a.out; ls -lA
<dir>/<file>
따라서 기본적으로 현재 디렉토리에서 파일을 실행한다고합니다../test
:.
$ PATH 변수 에 추가 할 수 있습니다 .
gksudo gedit /etc/environment
Linux / GTK를 실행하는 경우 ALT + F2를 입력하고 다음을 입력하십시오 (Ubuntu를 사용하는 경우 사용함).
그러나 그렇게하지 말 것을 강력히 권합니다. 나쁜 나쁜 나쁜 나쁜.
1970 년 이후 이런 종류의 것들이 작동한다는 것을 알고 있습니다. 현재 디렉토리가 $ PATH에 포함되지 않는 이유가 있습니다.
.
현재 디렉토리입니다
.something
숨김 파일 ( "ALT +"를 입력하여 노틸러스에 표시하거나 " ls -la
"을 시도하십시오 .
./someProgram.sh
현재 디렉토리에서 someProgram.sh 실행 파일을 실행하기 위해 입력 한 것입니다.
.somethingElse
현재 디렉토리에 숨겨진 실행 파일이 있다는 것은 나쁜 생각입니다.
./command_name
에서 명령 을 실행하는 데 왜 사용 합니까?"