Environment-Variables

/etc/login.defs: ENV_PATH & ENV_SUPATH vs PATH

  • October 23, 2016

用於/etc/login.defs什麼ENV_PATH用途ENV_SUPATH

來自/etc/login.defs

# REQUIRED  The default PATH settings, for superuser and normal users.  
#  
# (they are minimal, add the rest in the shell startup files)  
ENV_SUPATH   PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin  
ENV_PATH     PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games  
  • PATH它們似乎預設為我在/etc/profileDebian Jessie中使用的完全相同的初始路徑值。
  • 在 man 中,它非常簡短地說明了 login.defs的用途。這個頁面說得更多。

PATH並且ENV_PATH似乎沒有相互聯繫或相互依賴,或者如果它們是相互依賴的,對我來說並不明顯。

**我需要在這兩個地方更新我的 bash 系統路徑嗎?**或者有沒有辦法只在一個地方定義路徑,並引用這個主路徑值?

PATH或者也許這些只是在缺少的情況下用作預設值?…所以他們真的沒那麼重要???

引用有關login.defs的手冊頁

ENV_PATH (string) 如果設置,它將用於定義普通使用者登錄時的 PATH 環境變數。該值是一個冒號分隔的路徑列表(例如 /bin:/usr/bin),並且可以在 PATH= 前面。預設值為 PATH=/bin:/usr/bin。

ENV_SUPATH (string) 如果設置,它將用於定義超級使用者登錄時的 PATH 環境變數。該值是一個冒號分隔的路徑列表(例如 /sbin:/bin:/usr/sbin:/usr/bin),並且可以在 PATH= 前面。預設值為 PATH=/sbin:/bin:/usr/sbin:/usr/bin。

兩者最初都用於定義正常超級使用者的 PATH 變數。我的 login.defs 將 ENV_PATH、ENV_SUPATH 定義為以下

ENV_SUPATH      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin  
ENV_PATH        PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

我添加了一個新使用者 ‘foo’

sudo useradd foo

sudo passwd foo                                                                                                     
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

當我以“foo”身份登錄時

foo@naga-playground:/$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games

同樣對於“根”

root@naga-playground:/home/pi/# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

使用者可以通過 .bashrc、.bash_profile、.zshrc … 覆蓋 PATH

為了使答案完整

ENV_PATH 用於為普通使用者

定義 PATH ENV_SUPATH 用於為超級使用者定義 PATH

引用自:https://unix.stackexchange.com/questions/317338