a.out과 ./a.out의 차이점

a.out과 ./a.out의 차이점

내 혼란

a.outUbuntu 12.10에서 실행한 프로그램의 출력입니다. Red Hat 시스템에서는 a.out터미널에서 실행할 때 실행됩니다. 우분투에서는 ./a.out출력을 얻으려면 실행해야 합니다 . "a.out"이 작동하지 않습니다.

누군가 명령 간의 차이점을 설명해 줄 수 있습니까?

답변1

경험하게 될 동작은 환경 변수의 차이에 따라 달라질 수 있습니다 $PATH. 본질적으로 $PATH운영 체제 호출을 사용하여 프로그램이 호출될 때 특정 실행 파일을 순차적으로 검색하는 콜론으로 구분된 디렉터리 목록입니다 . 일반적 으로 현재 작업 디렉터리를 참조하는 상대 경로 구성 요소 또는 빈 문자열을 포함 exec할 수 있습니다 . 예를 들어, 현재 디렉토리가 의 일부인 경우 이름만으로 현재 작업 디렉토리의 파일을 실행할 수 있습니다 . 현재 디렉터리가 에 없으면 실행 파일에 대한 상대 또는 절대 경로를 지정해야 합니다 .$PATH.$PATHa.out$PATH./a.out

상대 경로 구성 요소를 포함하면 이전 디렉터리의 실행 파일이 목록의 뒷부분에 있는 디렉터리의 실행 파일을 가릴 수 있으므로 $PATH잠재적인 보안 위험이 있습니다 . $PATH예를 들어, 현재 작업 디렉터리 경로에 대한 변경을 고려해 보십시오 .. 예를 들어, 공격자가 현재 디렉터리에 일반 시스템 유틸리티와 이름을 공유하는 악성 스크립트를 배치하는 경우(일반적으로 루트 소유 디렉터리를 바꾸는 것보다 훨씬 쉽습니다.) 바이너리), 사용자 악성 스크립트는 다음과 같은 상황에서 실수로 호출됩니다: 시스템을 호출하려는 의도로. 의 끝에만 추가된 경우에도 사용자는 해당 특정 시스템에 없는 일반 유틸리티와 이름을 공유하는 현재 디렉토리의 실행 파일을 실수로 호출하도록 속일 수 있습니다. 그렇기 때문에 너무 흔한 일이죠/bin$PATHls/binls.$PATH아니요상대 경로 구성 요소를 기본값의 일부로 만듭니다 $PATH.

관련 정보