1. 临时设置
export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH
  1. 当前用户全局设置
    打开~/.bashrc,添加行:
export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH
source .bashrc #使生效
  1. 所有用户全局设置
$ vim /etc/profile
export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH #在里面加入
source profile#使生效

测试当前环境变量:

echo $PATHenv

用户登录后加载profile和bashrc的流程如下:

1. /etc/profile
    ->/etc/profile.d/*.sh
 
2. $HOME/.bash_profile
    ->$HOME/.bashrc
        ->/etc/bashrc

说明:

bash首先执行/etc/profile脚本,/etc/profile脚本先依次执行/etc/profile.d/*.sh
随后bash会执行用户主目录下的.bash_profile脚本,.bash_profile脚本会执行用户主目录下的.bashrc脚本,
而.bashrc脚本会执行/etc/bashrc脚本。
至此,所有的环境变量和初始化设定都已经加载完成.
bash随后调用terminfo和inputrc,完成终端属性和键盘映射的设定.

其中PATH这个变量特殊说明一下:

如果是超级用户登录,在没有执行/etc/profile之前,PATH已经设定了下面的路径:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
如果是普通用户,PATH在/etc/profile执行之前设定了以下的路径:
/usr/local/bin:/bin:/usr/bin
这里要注意的是:在用户切换并加载变量,例如su -,这时,如果用户自己切换自己,比如root用户再用su - root切换的话,加载的PATH和上面的不一样.
准确的说,是不总是一样.所以,在/etc/profile脚本中,做了如下的配置:

if [ `id -u` = 0 ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi

如果是超级用户登录,在/etc/profile.d/krb5.sh脚本中,在PATH变量搜索路径的最前面增加/usr/kerberos/sbin:/usr/kerberos/bin
如果是普通用户登录,在/etc/profile.d/krb5.sh脚本中,在PATH变量搜索路径的最前面增加/usr/kerberos/bin

在/etc/profile脚本中,会在PATH变量的最后增加/usr/X11R6/bin目录
在HOME/.bashprofile中,会在PATH变量的最后增加HOME/.bashprofile中,会在PATH变量的最后增加HOME/bin目录

以root用户为例,最终的PATH会是这样(没有其它自定义的基础上)

/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

以alice用户(普通用户)为例
/usr/kerberos/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/alice/bin

脚本解析

###############################################
#strace -o su -e trace=open su - alice
#grep ^open /etc/su|grep -v null|grep "= 3"|nl
###############################################

打开的文件如下:

1    open("/etc/ld.so.cache", O_RDONLY)      = 3
2    open("/lib/libcrypt.so.1", O_RDONLY)    = 3
3    open("/lib/tls/libc.so.6", O_RDONLY)    = 3
4    open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
5    open("/etc/nsswitch.conf", O_RDONLY)    = 3
6    open("/etc/ld.so.cache", O_RDONLY)      = 3
7    open("/lib/libnss_files.so.2", O_RDONLY) = 3
8    open("/etc/passwd", O_RDONLY)           = 3
9    open("/etc/shadow", O_RDONLY)           = 3
10    open("/etc/group", O_RDONLY)            = 3
11    open("/etc/ld.so.cache", O_RDONLY)      = 3
12    open("/lib/libtermcap.so.2", O_RDONLY)  = 3
13    open("/lib/libdl.so.2", O_RDONLY)       = 3
14    open("/lib/tls/libc.so.6", O_RDONLY)    = 3
15    open("/dev/tty", O_RDWR|O_NONBLOCK|O_LARGEFILE) = 3
16    open("/etc/mtab", O_RDONLY)             = 3
17    open("/proc/meminfo", O_RDONLY)         = 3
18    open("/etc/nsswitch.conf", O_RDONLY)    = 3
19    open("/etc/ld.so.cache", O_RDONLY)      = 3
20    open("/lib/libnss_files.so.2", O_RDONLY) = 3
21    open("/etc/passwd", O_RDONLY)           = 3
22    open("/etc/profile", O_RDONLY|O_LARGEFILE) = 3
23    open("/etc/profile.d/", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
24    open("/etc/profile.d/colorls.sh", O_RDONLY|O_LARGEFILE) = 3
25    open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
26    open("/etc/profile.d/glib2.sh", O_RDONLY|O_LARGEFILE) = 3
27    open("/etc/profile.d/gnome-ssh-askpass.sh", O_RDONLY|O_LARGEFILE) = 3
28    open("/etc/profile.d/krb5.sh", O_RDONLY|O_LARGEFILE) = 3
29    open("/etc/profile.d/lang.sh", O_RDONLY|O_LARGEFILE) = 3
30    open("/etc/sysconfig/i18n", O_RDONLY|O_LARGEFILE) = 3
31    open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
32    open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3
33    open("/etc/profile.d/less.sh", O_RDONLY|O_LARGEFILE) = 3
34    open("/etc/profile.d/qt.sh", O_RDONLY|O_LARGEFILE) = 3
35    open("/etc/profile.d/vim.sh", O_RDONLY|O_LARGEFILE) = 3
36    open("/etc/profile.d/which-2.sh", O_RDONLY|O_LARGEFILE) = 3
37    open("/ceno/prod t/imeg/etc/profile", O_RDONLY|O_LARGEFILE) = 3
38    open("/home/alice/.bash_profile", O_RDONLY|O_LARGEFILE) = 3
39    open("/home/alice/.bashrc", O_RDONLY|O_LARGEFILE) = 3
40    open("/etc/bashrc", O_RDONLY|O_LARGEFILE) = 3
41    open("/home/alice/.bash_history", O_RDONLY|O_LARGEFILE) = 3
42    open("/home/alice/.bash_history", O_RDONLY|O_LARGEFILE) = 3
43    open("/etc/termcap", O_RDONLY)          = 3
44    open("/etc/inputrc", O_RDONLY|O_LARGEFILE) = 3
45    open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
46    open("/home/alice/.bash_logout", O_RDONLY|O_LARGEFILE) = 3
47    open("/home/alice/.bash_history", O_WRONLY|O_APPEND|O_LARGEFILE) = 3
48    open("/home/alice/.bash_history", O_RDONLY|O_LARGEFILE) = 3
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐