从学术角度考虑,我已经做到了sudo mv /bin /foo
。我没有停下来问问题,我掌控了自己的命运并做到了。
如果我想永久更改整个系统$PATH
以反映此更改,我该怎么做?这包括:
- 交互式外壳
- 非交互式 shell
- GUI 登录
- 系统服务
- sudo 使用
我之所以问这个问题,是因为对于正确的做法,人们还一头雾水。这个问题的答案各不相同:
- 编辑
~/.bashrc
(不会影响例如bash --norc
) - 编辑
~/.profile
(仅影响登录 shell) - 编辑
/etc/environment
(不影响 sudo;有时 PATH 似乎不在这里?)
是否有其他核心系统实用程序可能会因尝试使用$PATH
以其他方式或我未在此处介绍的位置定义的某些副本而导致问题?$PATH
使用 sudo 时如何覆盖?
$PATH
统治一切的人住在哪里?我该如何添加/foo
它?
我知道这个问题已经被问过很多次了,但是有太多不同的问题和答案,其中许多已经过时或仅涵盖某些情况。
答案1
您可能无法从 $PATH 中永久删除 /bin,因为太多脚本会重置它,但您可以做一些事情:
将 /bin 移动到 /foo 然后将 /foo 符号链接到 /bin:
以 root 身份运行以下命令:
cd /; mv bin foo; ln -s foo bin
(然而这就引出了一个问题,如果您真的想将 /bin 的内容放在 /foo 中,为什么不直接将 /bin 符号链接到 /foo 呢?)
然后,您可以在 /etc/rc.local 中设置自定义 PATH。无论是否有人登录,它都会在启动时获取。如果文件不存在,则需要创建它。Systemd 应该会选择它。 man systemd-rc-local-generator
了解更多信息。
答案2
我想说编辑/etc/environment
是最好的“系统范围”选项。
但是,sudo
使用安全路径,定义在:/etc/sudoers
因此,我认为编辑这两个(或仅其中一个)是系统范围路径更改的最佳方式。
其他环境变量(例如JAVA_HOME
)也可以在中设置/etc/environment
。