linux图形界面登录时类似于windows的登录,会读取系统变量文件和用户变量文件将环境变量和用户变量数据载入内存
可以认为/etc/profile文件是系统变量文件,$HOME/.bashrc, $HOME/.profile是用户变量文件,其实这些文件是在用户登录进系统时系统首先运行一个登录bash,这个bash会首先执行这些文件,所以可在这些文件中执行一些需要开机启动的shell命令,如设置系统环境变量,开机启动程序等(它们都是shell命令)。
1.系统变量
可在变量文件中使用export将变量值导出到bash(因为这些文件是在系统登录时启动的登录bash中执行的,所以这些变量值是在启动bash中定义并被export到当前登录用户下所有打开的bash的)。
在系统变量文件/etc/profile中最后一段代码如下:
这段代码的意思是如果存在/etc/profile.d文件夹,就执行这个文件夹下的所有shell(.sh结尾的)文件。(也可将此段代码加入到$HOME/.bashrc或$HOME/.profile文件中,结合下面的介绍可为用户变量提供较大灵活性)
所以在安装某些程序需要配置系统变量时可以将这些系统变量写在一个以.sh结尾的shell文件中并将此文件保存到/etc/profile.d/目录下,也可在此目录下创建该shell文件的软链接。下面以配置jdk的系统变量为例。
假设jdk安装在(解压到) /usr/local/jdk目录下,
cd /usr/local/jdk #切换到jdk目录
sudo touch java_env.sh #创建系统变量文件
sudo gedit ./java_env.sh #编辑文件并保存
java_env.sh内容如下:
#
#this file is used to set
#the java's environment variables
#
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
sudo ln -s java_env.sh /etc/profile.d/java_env.sh #创建此文件的软链接
至此jdk的系统变量就配置好了。当然也可以直接在/etc/profile.d/目录下创建java_env.sh文件。但笔者推荐读者将/usr/local创建为独立的分区并使用本文介绍的方法。这样在重装系统时对已安装的程序不会有其他改动,只需在/etc/profile.d/目录下重新创建.sh文件软链接即可。
2.开机运行命令
也可写一些其他需要开机运行的shell命令。如笔者在/etc/profile.d/startup.sh文件中定义了启动mysql的别名,这样在想开启时只需输入别名就可以了。当然也可以将一些需要开机启动的程序启动命令写入这个shell文件中(注意要在这些启动程序命令后面加 & 符号使该程序在后台运行,否则启动的程序会阻塞登录bash)。