apt를 사용하여 aria2c를 설치했기 때문에 aria2c
복사하여 수동으로 설치 하고 싶습니다 ./usr/local/bin
/usr/bin
입력하면 다음 중 어느 것이 실행되나요 aria2c
?
답변1
실행될 실행 파일은 변수의 디렉터리 순서에 따라 달라집니다 PATH
.
/usr/bin
앞에 나열된 경우 대신 실행 /usr/local/bin
됩니다 ./usr/bin/aria2c
/usr/local/bin/aria2c
쉘이 실행 파일을 해시하고 aria2c
에서 동일한 유틸리티를 설치하기 전에 해당 실행 파일에 액세스한 경우 에서 디렉토리 순서에 관계없이 그렇게 하도록 선택할 수 있습니다. 이 문제는 유틸리티를 사용하고 다른 위치에 설치한 다음 동일한 셸 세션에서 다시 사용하려고 시도하는 특정 경우에만 발생할 수 있습니다. 이 명령은 쉘 세션에서 기억된 유틸리티 위치를 지웁니다. 당신은 또한 볼 수 있습니다/usr/bin
/usr/local/bin
/usr/bin/aria2c
PATH
hash -r
Bash의 실행 파일 경로 캐시를 지우는 방법은 무엇입니까?
라는 별칭이나 셸 함수가 있는 경우 셸이 실행 파일을 찾기 위해 이를 사용하기 전에 사용됩니다 aria2c
.PATH
개인용(Linux가 아닌) 시스템에서:
$ printf '%s\n' "$PATH" | tr ':' '\n'
/usr/bin
/bin
/usr/sbin
/sbin
/usr/X11R6/bin
/usr/local/bin
/usr/local/sbin
/usr/games
보시다시피 내 시스템에서는 /usr/local/bin
시간이 매우 늦었습니다 . /usr/bin
저는 이렇게 설정했어요피하다실수로 재정의되었습니다 /usr/bin
. 로컬 실행 파일이 /usr/bin
.
답변2
이 SE 사이트에서 답변을 찾을 수 없다는 것이 이상합니다.
PATH
이는 쉘에 따라 다르지만 일반적으로 명령을 실행하기 위해 쉘이 확인하는 디렉토리가 포함된 환경 변수가 있습니다 . 이러한 디렉토리는 세미콜론으로 구분됩니다 :
.
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/wine/bin:/home/birdie/bin
바이너리는 왼쪽에서 오른쪽으로 검색됩니다. 즉, 제 예에서는 동일한 바이너리가 있으면 /usr/local/bin
그 /bin
중 하나가 /usr/local/bin
우선순위를 갖습니다.
또한 셸에 별칭이 있으면 지원되는 기능이 먼저 실행됩니다(별칭이 정의된 경우). alias
및 를 실행하여 볼 수 있습니다 set
. 또 다른 카테고리 명령이 있습니다 built-in
. 따라서 순서는 다음과 같습니다.
- 별명
- 기능
- 내장 명령
$PATH
왼쪽에서 오른쪽으로 검색되는 바이너리 파일
마지막으로 주목할 가치가 있는 것은 별칭(alias)입니다.아니요쉘 스크립트에서 작동합니다(정의되지 않음).
답변3
더 간단한 해결책은 which
실행될 프로그램을 보는 것입니다.
맨페이지...
이 매개변수가 쉘 프롬프트에 입력되면 실행되는 실행 파일의 전체 경로를 표준 출력으로 인쇄합니다.
예:
[~] echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/lib/llvm/13/bin:/usr/lib/llvm/12/bin
[~] echo '#!/bin/bash' > hello_world.sh
[~] echo 'echo "Hello World"' >> hello_world.sh
[~] chmod 755 hello_world.sh
[~] sudo cp hello_world.sh /bin/
[~] sudo cp hello_world.sh /usr/bin/
[~] sudo cp hello_world.sh /usr/local/bin/
[~] which hello_world.sh
/usr/local/bin/hello_world.sh
다음에 추가
hash
명령이 실행되는 방식을 변경할 수 있다는 점이 내 관심을 끌었습니다 . 그러나 대부분의 경우 프로그램은 성능 향상을 위해 해시되지 않습니다. 내 해시 목록에는 항상 두 개의 명령만 있습니다.
[~] hash
hits command
3 /usr/bin/man
1 /bin/bash
명령을 해시하지 않는 한 which
명령은 문제가 없습니다. 아니면 대신 사용하세요 type -p hello_world.sh
. 이 명령도 비슷한 type
부분입니다. 왠지 서로 소통이 되는 것 같아요.bash
hash
저장하려면 hash
매개변수 없이 명령을 호출하여 모든 해싱 프로그램을 볼 수 있습니다.