
我在我的朋友伺服器上有 sudo 存取權限,運行 centos-6.3,但是當我嘗試運行一些命令時,例如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>
上班?
答案1
執行時sudo
,許多系統配置為清除環境中所有非白名單值,並將 PATH 變數重設為經過清理的值。
您會在 中找到前者 asDefaults env_reset
和幾個。後一個「安全」覆蓋被指定為– 刪除此行以在ing時刪除此行為。Defaults env_keep += "SOME_VARIABLE_NAME"
/etc/sudoers
PATH
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
sudo
sudo -V
當您作為運行時,會列印如何處理哪個環境變數 root
。
如果您不想擺脫這些預設值,您始終可以使用程式的完整路徑 ( sudo /usr/local/bin/vim
) 來指定程式。
或者,您可以允許您的帳戶出現SETENV
在sudoers
文件中,例如:
%wheel ALL=(ALL) SETENV: ALL
這允許您覆蓋環境預設值,如下所示:sudo PATH=$PATH which vim
,因為該變數在執行命令之前由 shell 解釋,從而導致繼承PATH
(但可能不包括/sbin
等)。
答案2
sudo echo $PATH
不做你的想法。$PATH
被(你的)shell 取代前執行命令。
要完成所需的行為,您可以使用sudo -i
.
從曼須藤:
-i [命令]
這-我(模擬初始登入) 選項運行指定的 shell密碼(5) 目標使用者的入口作為登入shell。這表示shell 將讀取特定於登入的資源檔案(例如
.profile
或 ) 。.login
如果指定了命令,則會將其傳遞到 shell 執行。
答案3
我怎樣去
sudo <command>
上班?
直到解決使用完整路徑名稱的路徑問題
sudo /usr/local/bin/vim /var/www/html/index.html