내가 발행하면
sudo my-command
리눅스는 어떻게 그것을 찾 my-command
습니까?
는 my-command
내 PATH에 있습니다. 아무 문제없이 호출 할 수 있습니다. 그러나로 호출하면을 sudo
얻습니다 command not found
. 흥미 롭습니다. 전에 이것을 경험하지 마십시오. 극복하는 방법?
편집 : 그 “사용 가능한 복제” 의 선택 대답은 적어도하지 않는 점에, 잘, 잘못된 것입니다. terdon의이 답변은 정답입니다.
답변
이것은 일반적으로의 secure_path
옵션 으로 설정됩니다 /etc/sudoers
. 보낸 사람 man sudoers
:
secure_path Path used for every command run from sudo. If you don't
trust the people running sudo to have a sane PATH environ‐
ment variable you may want to use this. Another use is if
you want to have the “root path” be separate from the “user
path”. Users in the group specified by the exempt_group
option are not affected by secure_path. This option is not
set by default.
기본값이 아닌 명령을 실행하려면 다음 $PATH
중 하나를 수행하십시오.
-
전체 경로를 사용하십시오.
sudo ~/bin/my-command
; 또는 -
명령이 포함 된 디렉토리를에 추가하십시오
secure_path
.sudo visudo
보안 경로 행을 실행 하고 편집하십시오.Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
파일을 저장하고 다음에 실행할
sudo
때 디렉토리~/bin
는 그 디렉토리에 있게됩니다$PATH
.
답변
이것이 내가 해결 방법으로 사용한 것입니다.
sudo cp $(which my-command) /usr/bin
...
이 which
명령은 루트가 아닌 서브 쉘에서 실행되므로 my-command
sudo는 실행 파일을 찾은 다음 root
사용자가 액세스 할 수 있는 경로로 실행 파일을 복사합니다 . 보안에 좋지는 않지만 명령을 실행 한 직후 파괴 된 도커 이미지를 실행하는 것이 좋습니다.