Sudo
sudo echo path 不顯示用於作為 sudo 執行的路徑
我對以下內容感到困惑:
[user@QVr740-11 ~]$ which ninja /usr/local/bin/ninja [user@QVr740-11 ~]$ sudo which ninja which: no ninja in (/sbin:/bin:/usr/sbin:/usr/bin) [user@QVr740-11 ~]$ sudo echo $PATH /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin
ls -l /usr/local/bin/ninja
顯示二進製文件由 root:root 擁有,並且所有(三個 x)都可以執行,並$PATH
表明即使是 sudo,它也應該在路徑中,但是當我去執行which
時,路徑已經發生了某種變化。
sudo -E
不會改變這種行為。是什麼賦予了?$PATH 是否被保留?正在
which
其他地方尋找路徑(請注意,我無法將此二進製文件作為 sudo 執行)。
這裡有兩個問題
- 該
$PATH
變數在命令執行之前被擴展。最終結果是你得到了這個,雖然它是有效的,但並不是你真正想要的:sudo echo /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin
- 出於安全原因,
$PATH
通常會重置sudo
您可以使用在執行應用程序的上下文中
sudo env | grep ^PATH=
查找值。您可以調整用於編輯此文件的路徑,以便在更改文件之前獲得語法檢查的好處。$PATH``sudo``/etc/sudoers``sudo visudo