我附加了 /etc/environments 文件的路径,现在它是这样的:
mindaugas@Kali:~$ cat /etc/environment | tr ":" "\n"
PATH="/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/sbin"
我退出并重新登录。但我的$PATH
没有改变:
mindaugas@Kali:~$ echo $PATH | tr ":" "\n"
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games
在 ubuntu 14.04 中执行相同的步骤更改了$PATH
.
我很好奇 - 这是为什么?
答案1
在linux上,读取/etc/environment
通常是由
pam_env.so登录期间的模块。该模块可能未安装在最小系统上,或者可能配置为不读取 /etc 文件,或者可能未在 /etc/pam.d/* 中配置为在登录过程中调用。看man pam_env pam
。
答案2
大多数 shell 中都没有编码加载的义务/etc/environment
。
shell 查找的确切文件以及尝试加载它们的顺序取决于您使用的实际 shell,但一般情况下,只有/etc/shellnamerc
和~/.shellnamerc
是您绝对可以信赖的文件,通常按该顺序读取。有关详细信息,请参阅您首选 shell 的联机帮助页。
在 ubuntu 中的特定情况下,您的首选 shell 加载其配置文件/etc/
和/或在创建时为您的帐户提供的配置文件/etc/skel/
,并且这些配置文件中的任何一个都告诉它查找/etc/environment
并加载其内容(如果它是)存在。
是的,在某些情况下这是一个方便的功能,但它不是通用的......坦率地说,它不能为一是因为不同的 shell 可以有不同的设置环境变量的方式;例如,/etc/environment
源自 Bourne 类型 shell ( bash
、sh
、 ) 的adash
不适用于 C shell ( csh
、 )。tcsh
长话短说:/etc/environment
是一项常见但不通用的可选功能。 Kali 缺乏它并不是一个错误。