ubuntu环境变量的三种设置⽅法
⼀:设置环境变量的三种⽅法
1.1 临时设置
export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH
1.2 当前⽤户的全局设置
打开~/.bashrc,添加⾏:
export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH
使⽣效:
source .bashrc
1.3 所有⽤户的全局设置
$ vim /etc/profile
在⾥⾯加⼊:
export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH
使⽣效
source profile
⼆:测试当前的环境变量
echo $PATH
env
⽤户登录后加载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/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
>>>>>>>>>##
3.1 打开的⽂件如下:
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("/f", 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("/f", 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
3.2 脚本解析说明
3.2.1 第⼀部分
从1-21⾏基本是打开动态链接库⽂件和⾝份验证的⽂件.
HOME/.bashprofile 中,会在PATH 变量的最后增加HOM E/.bas rofile 中,会在PATH 变量的最后增加h p
3.2.2 第⼆部分
第22⾏是打开/etc/profile⽂件,如下:
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
#定义pathmunge函数
#echo $PATH | /bin/egrep -q "(^|:)$1($|:)"是过滤$PATH中的可执⾏⽬录,如果egrep到批配项,返回真但取反
#也就是不增加执⾏⽬录到$PATH中,选项-q禁⽌所有的输出到标准输出,不管匹配⾏。如果选中输⼊⾏,以 0 状态退出#这⾥由 | (竖线)或者换⾏符隔开的多个正则表达式会匹配与任何⼀个正则表达式所匹配的字符串
#⼀个正则表达式可以被包括在“()”(括弧)中进⾏分组
pathmunge () {
if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
fi
}
#如果uid为0的⽤户,将在$PATH变量上加⼊/sbin/,/usr/sbin,/usr/local/sbin三个⽬录-q "(^|:)($|:)"
#因为调⽤pathmunge函数,没有加⼊after参数,所以以上三个⽬录都加在了$PATH变量的最前⾯
# Path manipulation
if [ `id -u` = 0 ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
#调⽤pathmunge函数,在$PATH后⾯增加/usr/X11R6/bin
pathmunge /usr/X11R6/bin after
unset pathmunge
#ulimit设定-S为软控制,-c为core file⽂件⼤⼩,这⾥是不做限制java设置环境变量的方法代码
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
#id -un是打印输出当前的⽤户名,例如:root
#定义了LOGNAME变量和MAIL变量,会有程序⽤到这些变量
USER="`id -un`"
LOGNAME=$USER
MAIL="/var/spool/mail/$USER"
#通过/bin/hostname获取主机名
#定义history的记录数为1000
HOSTNAME=`/bin/hostname`
HISTSIZE=1000
#如果没有定义$INPUTRC并且不存在$HOME/.inputrc⽂件
#定义变量INPUTRC的值为/etc/inputrc
if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
INPUTRC=/etc/inputrc
fi
export REMOTE_JAVA_DEBUG=on
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
#执⾏/etc/profile.d/下的所有脚本,-r是确认它们可读
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
. $i
fi
done
unset i
. /ceno/prod t/imeg/etc/profile
export PS1="\[\e[32;1m\][\u@\h]\[\e[33;1m\]:\[\e[31;1m\]\w>\\$ \[\e[0m\]"
3.2.3 第三部分
从24⾏到36⾏是执⾏/etc/profile.d/下的所有脚本,这个执⾏过程在/etc/profile中定义.
见前⾯/etc/profile中的脚本分析.
下⾯是对/etc/profile.d/下脚本做的简要说明,主要设定了环境变量(例如:PATH),alias等
/etc/profile.d/colorls.sh:对/etc/DIR_COLORS的提取,并⽤dircolors进⾏设定,最后定义了⼀些ls的alias
/etc/profile.d/glib2.sh:设定G_BROKEN_FILENAMES=1
/etc/profile.d/gnome-ssh-askpass.sh:设定SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
/etc/profile.d/krb5.sh:增加/usr/kerberos/bin或/usr/kerberos/sbin到PATH变量中
/etc/profile.d/lang.sh:设定语⾔环境,⾸先会加载/etc/sysconfig/i18n中的环境变量(LANG,SUPPORTED,SYSFONT)到shell中,
根据以上的变量再定义语⾔环境⽀持⼦集,最后再根据LANG设定终端
/etc/profile.d/less.sh:设定LESSOPEN="|/usr/bin/lesspipe.sh %s",LANGVAR=$LANG
/etc/profile.d/qt.sh:设定QTDIR="/usr/lib/qt-3.1"
/etc/profile.d/vim.sh:设定alias vi=vim
/etc/profile.d/which-2.sh:设定alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
3.2.4 第四部分
第37⾏open(“/ceno/prod t/imeg/etc/profile”, O_RDONLY|O_LARGEFILE) = 3,这⾥加载了⽤户⾃⼰的
环境设定脚本.
3.2.5 第五部分
第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
第⼀步:bash打开/home/alice/.bash_profile⽂件,
第⼆步:.bash_profile⽂件再判断有⽆/home/alice/.bashrc,如果有加载.bashrc⽂件
第三步:最后通过.bashrc⽂件加载/etc/bashrc⽂件
3.2.6 第六部分
在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
第⼀步打开.bash_history⽂件准备记录命令
第⼆步打开termcap⽂件
terminfo 数据库⽤于定义终端和打印机的属性及功能,包括各设备(例如,终端和打印机)的⾏数和列数以及要发送⾄该设备的⽂本的属性第三步打开inputrc
inputrc ⽂件为特定的情况处理键盘映射,这个⽂件被 Readline ⽤作启动⽂件,Readline 是 Bash 和其它⼤多数 shell 使⽤的与输⼊相关的库
3.2.7 第七部分:
第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
这⾥是⽤户⽤logout或exit退出的表现.如果直接关闭掉terminal,则不会执⾏.bash_logout和写回.bash_history⽂件
.bash_logout脚本默认是调⽤clear清⼀下屏幕
原⽂地址:blog.csdn/vertor11/article/details/70799971

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论