Linux
為什麼通過 sudo 和 su 執行時 PATH 變數不同?
在我的 Fedora 虛擬機上,使用我的使用者帳戶執行時
/usr/local/bin
,我的路徑中有:[justin@justin-fedora12 ~]$ env | grep PATH PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/justin/bin
同樣在執行時
su
:[justin@justin-fedora12 ~]$ su - Password: [root@justin-fedora12 justin]# env | grep PATH PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/justin/bin
但是,通過執行時
sudo
,此目錄不在路徑中:[root@justin-fedora12 justin]# exit [justin@justin-fedora12 ~]$ sudo bash [root@justin-fedora12 ~]# env | grep PATH PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin
為什麼執行時路徑會有所不同 via
sudo
?
看看
/etc/sudoers
。Fedora(以及 RHEL,以及 Ubuntu 和類似系統)中的預設文件包括以下行:Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
這可以確保在 sudo 下執行二進製文件時您的路徑是乾淨的。這有助於防止出現此問題中提到的一些問題。如果您沒有
/sbin
並且/usr/sbin
在自己的路徑中,這也很方便。
該命令
su -
將執行 root 使用者配置文件並採用該使用者的環境,包括路徑等sudo
,但不會這樣做。如果您想
sudo
表現得像,請su -
使用sudo -i [command
將執行使用者配置文件的選項如果你想
su -
表現得像sudo
那麼不要使用連字元 - 只需使用su [command]