수정하지 않고 $PATH에서 단일 실행 파일을 제거하려고 합니다.
예를 들어, 나는 해당 디렉토리에 있고 /Users/USER/Library/Python/2.7/bin/
해당 디렉토리에서 제외 $PATH
하고 싶습니다 services.py
.
효과가 있을 거라는 건 알지만 chmod -x services.py
더 나은 방법을 찾으려고 노력 중이에요
가능합니까?
답변1
파일을 하위 디렉터리로 이동할 수 있으면 파일 실행을 피할 수 있습니다.
그렇지 않은 경우 몇 가지 해결 방법이 있습니다.
피하려는 실행 파일보다 먼저 실행되도록 더 높은 우선 순위를 추가할 수 있습니다.
경로의 새 디렉터리입니다.
PATH 순서가 높은 실행 파일을 생성할 수 있습니다.
그렇다면 의 (비어 있는?) 실행 파일이 의 $PATH
실행 파일보다 높은 우선 순위로 실행됩니다 ./usr/local/bin:/usr/bin:/bin
/usr/bin
/bin
$PATH
이 방향에서는 (교체) 전에 새 실행 파일이 실행되도록 시작 부분에 경로를 추가할 수 있습니다.services.py
일부 쉘은 프로그램의 실행 경로를 기억합니다. bash의 명령으로 제어됩니다 hash
(hash -r은 모든 해시를 제거합니다). 새로운 bash 쉘에는 시작 파일(보통 ~/.bashrc
및/또는 ) 에서 실행되는 프로그램 외에는 해싱 프로그램이 없습니다 ~/.profile
. 따라서 PATH
새로운 기능을 갖춘 새로운 셸은 처음부터 작동합니다.
PATH를 변경하거나 파일을 이동할 수 없는 경우 의 함수 또는 별칭 정의를 사용하거나 ~/.bashrc
다른 시작 파일을 사용할 수 있습니다 ~/.profile
.
함수와 별칭은 실행 파일보다 우선순위가 높으므로 실행 파일과 같은 함수(또는 별칭)의 이름을 지정하면 해당 함수가 정의된 셸에서 효과적으로 대체됩니다.
기능
다음과 같이 간단한 작업을 수행합니다.
services.py(){ :; } # do nothing
테스트를 위해 공백으로 설정할 수 있습니다 ls
.
ls(){ :; }
삭제 기능을 사용할 수 있습니다 unset -f FunctionName
.
$ unset -f ls
이 ls
기능을 제거하세요.
함수는 완벽하지 않으며 원래 실행 파일은 전체 경로로 호출될 수 있습니다.
$ /bin/ls
listOfFiles
…
이 기능은 "이 쉘"이 프로그램을 실행하는 것을 방지할 뿐입니다. 다른 셸(또는 execve
자체적으로 호출할 수 있는 프로그램)은 실행 파일을 실행합니다.
별명
별칭은 덜 강력하며 간단한 명령의 첫 번째 단어만 대체합니다.
명령에 어떤 형태의 참조가 있으면 별칭을 사용하지 않습니다.
$ alias ls='echo "none"'
$ ls
none
$ \ls
ListOfFiles
…
별칭 삭제를 사용할 수 있습니다 unalias AliasName
. 따라서 다음과 같습니다.
$ unalias ls
별칭 정의가 삭제됩니다 ls
.
PATH를 변경하는 가장 안정적인 방법입니다. 새 디렉토리를 사전 설정하거나 파일을 새 디렉토리로 이동합니다. $PATH
프로그램 실행이 허용된 인스턴스에만 이러한 디렉터리를 포함합니다.