![a.out과 ./a.out의 차이점](https://linux55.com/image/49165/a.out%EA%B3%BC%20.%2Fa.out%EC%9D%98%20%EC%B0%A8%EC%9D%B4%EC%A0%90.png)
내 혼란
a.out
Ubuntu 12.10에서 실행한 프로그램의 출력입니다. Red Hat 시스템에서는 a.out
터미널에서 실행할 때 실행됩니다. 우분투에서는 ./a.out
출력을 얻으려면 실행해야 합니다 . "a.out"이 작동하지 않습니다.
누군가 명령 간의 차이점을 설명해 줄 수 있습니까?
답변1
경험하게 될 동작은 환경 변수의 차이에 따라 달라질 수 있습니다 $PATH
. 본질적으로 $PATH
운영 체제 호출을 사용하여 프로그램이 호출될 때 특정 실행 파일을 순차적으로 검색하는 콜론으로 구분된 디렉터리 목록입니다 . 일반적 으로 현재 작업 디렉터리를 참조하는 상대 경로 구성 요소 또는 빈 문자열을 포함 exec
할 수 있습니다 . 예를 들어, 현재 디렉토리가 의 일부인 경우 이름만으로 현재 작업 디렉토리의 파일을 실행할 수 있습니다 . 현재 디렉터리가 에 없으면 실행 파일에 대한 상대 또는 절대 경로를 지정해야 합니다 .$PATH
.
$PATH
a.out
$PATH
./a.out
상대 경로 구성 요소를 포함하면 이전 디렉터리의 실행 파일이 목록의 뒷부분에 있는 디렉터리의 실행 파일을 가릴 수 있으므로 $PATH
잠재적인 보안 위험이 있습니다 . $PATH
예를 들어, 현재 작업 디렉터리 경로에 대한 변경을 고려해 보십시오 .
. 예를 들어, 공격자가 현재 디렉터리에 일반 시스템 유틸리티와 이름을 공유하는 악성 스크립트를 배치하는 경우(일반적으로 루트 소유 디렉터리를 바꾸는 것보다 훨씬 쉽습니다.) 바이너리), 사용자 악성 스크립트는 다음과 같은 상황에서 실수로 호출됩니다: 시스템을 호출하려는 의도로. 의 끝에만 추가된 경우에도 사용자는 해당 특정 시스템에 없는 일반 유틸리티와 이름을 공유하는 현재 디렉토리의 실행 파일을 실수로 호출하도록 속일 수 있습니다. 그렇기 때문에 너무 흔한 일이죠/bin
$PATH
ls
/bin
ls
.
$PATH
아니요상대 경로 구성 요소를 기본값의 일부로 만듭니다 $PATH
.