一、概述
linux系统的用户权限分为超级用户(root)和普通用户,环境变量对应系统级环境变量和用户级环境变量。
二、系统级环境变量
2.1、/etc/profile
此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。
这个文件中的环境变量对所有用户有效,包括普通用户和超级用户,但是这个文件通常在重启后并不自动加载,而是需要使用source命令启动。因为我们第一次登录时,通常是以普通用户登录的,并非超级用户。
source /etc/profile
echo $PATH
在这个文件中我们可以使用export来导入环境变量:
export PATH=/toolchain/hcc_riscv32/bin:$PATH
2.2、/etc/bash.bashrc
为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
2.3、/etc/environment
在系统启动时运行,用于配置与系统运行相关但与用户无关的环境变量,修改该文件配置的环境变量将影响全局。
它的格式如下:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
- 注意:这个文件的修改可能会引起一些莫名其妙的问题,比如如果使用export在此处定义环境变量会出现反复登录界面。
2.4、总结
- /etc/profile文件只在用户登录的时候读取一次,它对所有的shell有效;
- /bash.bashrc会在每次运行Shell的时候读取一次,它只对当前shell有效。
- shell的种类有很对,bash只是其中的一种,不同的shell依赖的环境变量不同,/bash.bashrc只针对bash;
- /etc/environment针对整个linux系统,与用户和shell无关,它在linux系统启动后自动加载;
三、用户级
3.1、~/.profile
普通用户登录时执行,由于系统登录时默认是普通用户,所以该文件在重启后自动生效。更改这个文件,也可以使用source命令使其立即生效。
3.2、~/.bashrc
当普通用户每次打开shell时加载,修改这个文件会影响shell的加载效率,因为每一次打开shell都要加载一次bashrc。
3.3、~/.bash_profile 或 ~./bash_login
这两个文件,如果有其中的一个文件存在的话, 当启动的是一个 登录shell时,Bash 会执行该文件而不会执行~/.profile ;
如果两个文件都存在的话,Bash 将会优先执行~/.bash_profile 而不是~/.bash_login ;
3.4、~/.bash_logout
当每次退出系统(退出bash shell)时执行该文件。
四、环境变量执行顺序
==> /etc/environment
==> /etc/profile
==> ~/.bash_profile | ~/.bash_login | ~/.profile
==> ~/.bashrc
==> /etc/bashrc
==> ~/.bash_logout