设置环境变量
profile和bashrc文件
/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件。此文件为系统的每一个用户设置环境信息,当用户第一次登录时,该文件被运行。
并从/etc/profile.d文件夹的配置文件里搜集shell的设置。
/etc/bashrc:为每个执行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。
~/.bash_profile:每一个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件只运行一次!默认情况下,他设置一些环境变量,运行用户的.bashrc文件.每一个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件只运行一次!默认情况下,他设置一些环境变量,运行用户的.bashrc文件.
~/.bashrc:该文件包括专用于你的bash shell的bash信息。当登录时以及每次打开新的shell时,该该文件被读取。
~/.profile:在登录时用到的第三个文件。profile文件,每一个用户都可使用该文件输入专用于自己使用的shell信息。当用户登录时,该文件只运行一次!默认情况下。他设置一些环境变量,运行用户的.bashrc文件。
/etc/bashrc:为每个执行bash shell的用户执行此文件。当bash shell被打开时。该文件被读取。
差别:改动/etc下的配置文件对全部用户均生效。须要root权限,而改动~(也就是$HOME)下的隐藏文件。bash_profile和.bash_rc仅对当前用户有效。他们的差别起始就是windows系统变量和用户变量的差别
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2F0aWVtZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >
profile和bashrc文件的差别
要搞清bashrc与profile的差别,首先要弄明确什么是交互式shell和非交互式shell,什么是login shell 和non-login shell。
交互式模式就是shell等待你的输入,而且运行你提交的命令。这样的模式被称作交互式是由于shell与用户进行交互。
这样的模式也是大多数用户很熟悉的:登录、运行一些命令、签退。当你签退后,shell也终止了。
shell也能够执行在第二种模式:非交互式模式。在这样的模式下,shell不与你进行交互,而是读取存放在文件里的命令,而且执行它们。当它读到文件的结尾,shell也就终止了。
bashrc与profile都用于保存用户的环境信息,bashrc用于交互式non-loginshell,而profile用于交互式login shell。系统中存在很多bashrc和profile文件,以下逐一介绍:
举例来说。export脚本最好放在profile下,而alias的变量最好放在bashrc下
在bash配置文件里加入环境变量
C_INCLUDE_PATH(for C header files)和CPLUS_INCLUDE_PATH(for C++ header files)的环境变量是指明头文件的搜索路径,此两个环境变量指明的头文件会在-I指定路径之后,系统默认路径之前进行搜索。
LIBRARY_PATH指明库搜索路径。此环境变量指明路径会在-L指定路径之后,系统默认路径之前被搜索, 环境变量用于在程序编译期间查找动态链接库时指定查找共享库的路径,比如,指定gcc编译须要用到的动态链接库的文件夹。
LD_LIBRARY_PATH环境变量用于在程序载入执行期间查找动态链接库时指定除了系统默认路径之外的其它路径,注意,LD_LIBRARY_PATH中指定的路径会在系统默认路径之前进行查找。
bashrc和profile运行的时机和顺序
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 [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
else
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
pathmunge /sbin after
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/.bash_profile中,会在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
以gatieme用户(普通用户)为例
/usr/kerberos/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/alice/bin
使环境变量生效
有上面运行运行时机我们发现。linux下的环境变量总会在用户下次登录或者登入shell时生效。可是我们也能够使用source命令强制载入配置文件,可是须要注意的是source命令仅仅对当前shell(终端有效),终端关闭后,source就失效了。要么又一次source要么注销。所以建立大家改动完以后注销一下