내가 좋아하는 몇 가지 명령을 실행하려고하면 나는에 CentOS-6.3를 실행, 내 친구 서버에 sudo를 액세스 권한이 있지만, sudo vim /var/www/html/index.html
나는 오류 얻을 sudo: vim: command not found
내가 할 수를하지만, 실행 sudo su
한 후 vim /var/www/html/index.html
예상대로 작동합니다.
echo $PATH
그리고 sudo echo $PATH
둘 다 수확량 :
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
sudo which vim
그러나 수율 :
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
나는 추가를 시도했다
export PATH=$PATH:/usr/local/bin
받는 /root/.bashrc
사용할 때 어떤으로 문제를 해결 sudo su
하지만 단지 sudo <command>
.
일하려면 어떻게해야 sudo <command>
합니까?
답변
를 실행할 때 sudo
많은 시스템이 화이트리스트에없는 모든 값의 환경을 지우고 PATH 변수를 삭제 된 값으로 재설정하도록 구성되어 있습니다.
에서 Defaults env_reset
와 같이 몇 개 Defaults env_keep += "SOME_VARIABLE_NAME"
를 찾을 수 있습니다 /etc/sudoers
. 후자의 “보안” PATH
대체는 다음과 같이 지정됩니다. Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
–이 행을 삭제하여 sudo
ing시이 동작을 제거하십시오 .
어떤 환경 변수하면 실행할 때 인쇄를 처리하는 방법 sudo -V
으로 root
.
이러한 기본값을 제거하지 않으려면 항상 전체 경로 ( sudo /usr/local/bin/vim
)를 사용하여 프로그램을 지정할 수 있습니다 .
또는 다음 SETENV
과 같이 sudoers
파일에 계정을 허용 할 수 있습니다 .
%wheel ALL=(ALL) SETENV: ALL
이를 통해 다음과 같은 환경 기본값을 재정의 할 수 있습니다.. sudo PATH=$PATH which vim
명령을 실행하기 전에 셸에서 변수를 해석하여 상속 된 결과를 PATH
포함 /sbin
합니다.
답변
sudo echo $PATH
당신이 생각하는 것을하지 않습니다. 명령을 실행 하기 전에$PATH
(사용자의) 쉘로 대체됩니다 .
원하는 동작을 수행하려면을 사용할 수 있습니다 sudo -i
.
에서 남자는 sudo :
-나는 명령한다]
-i ( 시뮬레이션 초기 로그인 ) 옵션에 지정된 쉘 실행 passwd에 로그인 쉘과 같은 대상 사용자의 (5) 항목을. 이는 쉘에서
.profile
또는 이와 같은 로그인 특정 자원 파일을.login
읽음을 의미합니다. 명령이 지정되면 실행을 위해 셸로 전달됩니다.
답변
일하려면 어떻게해야
sudo <command>
합니까?
경로 관련 문제를 해결할 때까지 전체 경로 이름을 사용하십시오.
sudo /usr/local/bin/vim /var/www/html/index.html