Linux系统添加路径到PATH的方法及配置文件差异咨询
核心区别:
.bashrc vs /etc/environment /etc/environment- 生效范围:全系统全局生效,不区分用户,不区分shell类型,甚至图形界面拉起的无终端程序也会读取这里的配置
- 配置规则:它不是可执行的shell脚本,只是纯
KEY=VALUE格式的键值对配置文件,绝对不能写shell语法,比如想追加路径时不能写PATH=$PATH:/opt/myapp/bin,这么写会把字面量$PATH存进去,直接搞坏系统默认PATH,导致所有系统命令找不到。写PATH必须把完整路径串写全。 - 生效方式:系统启动、用户重新登录整个会话时加载,改完用
source命令无效,必须重登或者重启才会全局生效。
.bashrc- 生效范围:仅当前用户的交互式bash终端生效,其他用户无法读取,桌面直接双击启动的图形程序也读不到这里的配置,只有手动打开bash终端的时候才会加载
- 配置规则:它是标准的bash脚本,支持所有shell语法,追加路径可以直接写
export PATH="$PATH:/home/yourname/scripts"这类写法,不会出现语法问题 - 生效方式:每次新开bash终端自动加载,改完执行
source ~/.bashrc就能立刻在当前终端生效,不用重新登录。
是不是只能在
.bashrc里加目录路径? 完全不是。.bashrc的适用场景非常窄,只适合给当前用户在bash终端里用的命令加路径,但凡需要让其他用户调用、或者让图形界面启动的程序读到路径,写在.bashrc里都不会生效,要根据需要的生效范围选对应的配置文件。
其他常用的环境变量(含PATH)配置文件
系统级(对所有用户生效)
/etc/profile:全局登录shell配置脚本,所有用户走登录shell流程时都会加载,支持完整shell语法。不建议直接修改这个文件,通常自定义全局配置可以在/etc/profile.d/目录下新建独立的.sh后缀脚本写配置,系统升级时不会被覆盖,维护更方便。/etc/bash.bashrc(CentOS/RHEL系发行版路径为/etc/bashrc):全局交互式bash配置,所有用户打开bash交互式终端时都会加载,支持shell语法,适合给所有用户的终端加通用配置。/etc/environment:前面提到的全局最底层环境变量配置,由PAM模块加载,非脚本格式,不支持shell语法。
用户级(仅当前登录用户生效)
~/.profile(部分发行版对应~/.bash_profile、~/.bash_login):当前用户的登录会话配置,不管用什么shell、不管是图形界面登录还是字符终端登录,进用户会话时都会加载,支持shell语法。如果要给当前用户配所有场景(包括图形程序)都生效的PATH,写在这里比写在.bashrc合适。~/.bashrc:前面提到的当前用户交互式bash终端配置,仅在打开bash终端时生效。~/.pam_environment:PAM模块加载的用户级环境变量配置,和/etc/environment一样是纯键值对格式,不支持shell语法,登录会话加载时不依赖具体shell类型。
新手避坑提示:配PATH前先想清楚两个问题:① 要给所有用户用还是只给自己用?② 只在终端里用还是图形程序也要能读到?想清楚再选对应文件,不要所有配置都往
.bashrc里塞。另外只要是支持shell语法的配置文件,改完都可以用source 对应文件路径临时生效,非脚本格式的配置文件必须重新登录用户会话才会生效。
内容的提问来源于stack exchange,提问作者user18533532
相关产品推荐
相关产品推荐

