```./```가 필요한 실행 파일과 그렇지 않은 실행 파일의 차이점은 무엇입니까?

```./```가 필요한 실행 파일과 그렇지 않은 실행 파일의 차이점은 무엇입니까?

다음의 차이점은 무엇입니까?

./executable그리고 executable. 일부 실행 파일(Linux가 아닌 명령)이 때때로 필요하지 않은 이유는 무엇입니까 ./?

makefile(물리적 코드)을 통해 실행 파일을 설치한 경우 이를 제거하고 최신 버전을 설치하려면 어떻게 해야 합니까? 코드를 제거하는 것으로 rm충분합니까 ? 이 경우 실행 파일을 실행하는 데는 필요하지 않습니다../

답변1

UNIX 환경(및 DOS 및 Windows와 같은 다른 시스템에서도)에서 쉘은 특정 디렉토리에서 실행 파일을 찾습니다. Unix 환경에서는 PATH변수로 정의됩니다. PATH다음 명령을 실행하여 변수의 디렉터리를 확인합니다.

$ echo $PATH

결과는 다음과 유사합니다.

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

보시다시피 변수는 콜론으로 구분된 디렉터리 목록입니다. 예를 들어 명령을 실행하면 ls시스템은 목록의 첫 번째 디렉터리(예 /usr/local/sbin: )에서 실행 파일을 검색합니다. 여기에 지정된 파일을 찾을 수 없으면 ls찾을 때까지 다음 디렉터리를 시도합니다. 따라서 ls명령이 에 있으면 /usr/bin실행됩니다. 또는 쉘이 어디에서나 명령을 찾을 수 없으면 명령을 찾을 수 없음 오류가 표시됩니다.

그러나 실행 파일을 호출하는 다른 방법이 있습니다. ls두 개의 디렉토리에 이름이 지정된 두 개의 프로그램이 있고 PATH두 번째 프로그램을 실행하려고 한다고 가정합니다. 이를 수행하는 방법은 아마도 running /usr/bin/ls이므로 원하는 방식을 지정할 수 있습니다.

이는 .현재 디렉터리에 대한 바로가기입니다. 따라서 /home/user에 있다면 ./configure바로 가기입니다 /home/user/configure.

PATH해당 위치를 찾아서 삭제하면 파일을 삭제할 수 있습니다. 그러나 대부분의 최신 배포판(예: rpm, dpkg, pacman 등)에서 사용할 수 있는 패키지 관리자를 통해 시스템에 설치된 바이너리를 관리하는 것을 선호할 수 있습니다. Makefile이 여러 실행 파일을 생성하는 경우 이 방법으로 삭제하기가 더 쉬울 것입니다. 또한 makefile은 일부 라이브러리 파일과 기타 몇 가지 항목을 생성할 수 있으므로 패키지 관리 도구를 사용하는 것이 더 쉽습니다. 때때로 Makefile이 제거 루틴(예: make uninstall)을 불러올 수 있지만 얼마나 자주 발생하는지 잘 모르겠습니다. 프로그램을 새 메이크파일로 업데이트하면 새 메이크파일이 make install이전 바이너리를 대체할 수 있지만 이것이 보장되지는 않습니다.

를 실행하면 언제든지 명령 실행 파일이 무엇인지 확인할 수 있습니다 which. 예를 들어, 어디에 있는지 알고 싶다면 ls:

$ which ls
/usr/bin/ls

관련 정보