我正在寻找PATH
变量值的最佳实践,或者至少是约定。
我特别想知道
- 值中的 、 和 目录
/bin
是否/usr/bin
有任何首选/推荐的排序?/usr/local/bin
PATH
- 在非 root 用户的变量中包含
/sbin
、/usr/sbin
和/或是否有任何缺点?/usr/local/sbin
PATH
关于(1),我不知情的意见是这些路径应该按顺序出现
..:/usr/local/bin:...:/usr/bin:...:/bin:...
...在PATH
变量中。这里的想法(如果有的话)是/usr/local/bin
本地安装可能会放置一个命令的“本地”覆盖,该命令也可能存在于/usr/bin
.出于同样的原因(现在确实扩展了它!),/usr/bin
可能包含对传统上位于/bin
.
我意识到以上99%都是幻想。这就是我问这个问题的原因。
以类似的幻觉方式,我似乎想起了这样一个概念:目录中的命令*/sbin
是为具有超级用户权限的人准备的,如果让普通用户可以使用这些命令,他们的小脑袋就会感到困惑。换句话说,PATH
普通用户的变量不应包含任何*/sbin
路径。
尽管如此,我不记得曾经遇到过*/sbin
在变量的初始设置中包含路径的系统(我的意思是每个用户在运行他/她的 shell 初始化脚本之前获得PATH
的设置),并且PATH
我想知道为什么会这样。
答案1
- 是和否。订单没有具体规则。更简单地说:如果我有一个工具
xyz
in/bin
和 in/usr/bin
- 并且这些不是指向同一工具的链接,而是真正不同的工具 - 默认情况下应该执行哪一个?
是的,“本地优先”确实在该决定中发挥了巨大作用。所以建议/usr/local/bin:/usr/bin:/bin
确实有道理。但真正能找到覆盖的案例却很少。从理论上讲,这是可能发生的,但在实践中......
即使超级用户找到更好的版本ls
,它也会在系统范围内安装为正常版本/bin
,或者根本不安装,因为“标准工具应该在分发级别上维护”。如果您使用的是商业版本的 Linux - 您将被法律禁止安装不同版本的系统工具。
您可以自己安装,但在这种情况下,新版本将转到/home/user/bin
,因此这实际上是可能覆盖的唯一来源。
/sbin
,以及/usr/sbin
旨在为管理员和普通用户保留工具而不是他们。它们通常包含在 root 的个人路径中(例如/root/.bashrc
)。
所以你是对的,这主要是为了不让普通用户感到困惑,也不诱惑他们。