명령을 왜 sudo 할 수 없습니까? (예 : vim) 오류 얻을 sudo: vim: command not

내가 좋아하는 몇 가지 명령을 실행하려고하면 나는에 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–이 행을 삭제하여 sudoing시이 동작을 제거하십시오 .


어떤 환경 변수하면 실행할 때 인쇄를 처리하는 방법  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