Sudo如何使
如何使sudo
保留$ PATH?
我有一個程序安裝在 /opt 下的自定義目錄中。為了更容易執行它,我編輯了我的 bashrc 以將所述目錄添加到我的路徑中:
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
如果我想在沒有 sudo 的情況下執行程序,這很好用。但是,如果我嘗試使用 sudo 執行它,則會失敗並顯示“找不到命令”錯誤。
$ sudo godi_console sudo: godi_console: command not found
使用 sudo 後檢查 PATH 變數顯示它不包括與普通使用者相同的 PATH:
$ sudo sh # echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
為什麼PATH不一樣?難道我做錯了什麼?我在 Debian Jessie 上,如果它有所作為的話。
我嘗試的一件事是直接呼叫 /opt/godi/sbin/godi_console,將絕對路徑傳遞給執行檔。不幸的是,這在這種特殊情況下沒有幫助,因為 godi_console 本身取決於正確設置的 PATH 。
你總是可以這樣做:
sudo env "PATH=$PATH" godi_console
作為 Debian 上的一項安全措施,
/etc/sudoers
將secure_path
選項設置為安全值。注意:
sudo "PATH=$PATH" godi_console
Where
sudo
將包含字元的前導參數=
本身視為環境變數賦值,也可以在其環境中godi_console
與your$PATH
(而不是secure_path
)一起執行,但不會影響sudo
’ 執行檔的搜尋路徑,因此無助sudo
於找到godi_console
.