![/etc/login.defs:ENV_PATH 和 ENV_SUPATH 与 PATH](https://linux22.com/image/96702/%2Fetc%2Flogin.defs%EF%BC%9AENV_PATH%20%E5%92%8C%20ENV_SUPATH%20%E4%B8%8E%20PATH.png)
有何用途? /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/profile
Debian Jessie 中的初始路径值完全相同。在人身上,它非常简短地说了什么登录名.defs是用来。这页面说得更多一些。
PATH
并且ENV_PATH
似乎彼此之间没有联系或依赖,或者即使是这样,我也不清楚一个人如何依赖另一个人。
我需要更新这两个地方的 bash 系统路径吗?或者有没有一种方法可以只在一个地方定义路径,并引用这个主路径值?
PATH
或者也许这些只是在丢失的情况下用作默认值? ...所以他们真的没有那么重要???
答案1
引用手册页关于登录名.defs
ENV_PATH (字符串) 如果设置,它将用于定义普通用户登录时的 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