文章目录
- 什么是环境变量PATH及作用
- Linux下读取当前的环境变量
- Linux下如何来配置环境变量
- 方式一:在控制台bash中设置 export PATH
- 方式二:在当前用户家目录下的.bashrc中设置 vim ~/.bashrc
- 方式三:在当前用户家目录下的.bash_profile中设置 vim ~/.bash_profile
- 方式四:在/etc/目录下的bashrc中设置 sudo vim /etc/bashrc
- 方式五:在/etc/目录下的profile中设置 sudo vim /etc/profile
- 安装脚本里面自动配置环境变量
什么是环境变量PATH及作用
我们前天在安装JDK的时候,已经说了安装过程中最重要的一步就是设置环境变量。当然若是不配置的话就会出现下面的问题:(就是在非JDK安装的目录下运行 java和javac 命令)
OK,那我们就首先介绍一下 什么是这个环境变量 PATH ,以及它有什么作用?
1、通常情况下,我们要运行一个软件或者一些工具的时候:若是我们指定一个目录或者说就在这个目录下面操作,那么相关的程序久将会在该目录里面寻找相关文件。否则就会像上面的javac一样找不到命令。
2、而设置变量PATH 对于我们最实用的作用就是:不用拷贝某些dll或lib等库文件到系统目录中了,而PATH这一系统变量就是存储了系统搜索库文件的一系列路径。同时若是设置了可执行程序的路径,那么我们也就不必在可执行程序的目录下面执行它。
上面的实例是在Windows上设置环境变量的,我们今天则主要看一下在Linux 操作系统上面如何设置我们安装程序的环境变量(设置可执行程序的路径到PATH之后,我们就不用必须在其目录下面去执行它)
注:我们这里使用的Linux实用版本为Centos 7,不同的版本可能配置环境变量的方式会有所区别!
Linux下读取当前的环境变量
如上图所示:环境变量PATH是一系列具体路径的集合,彼此之间使用 :分割
Linux下如何来配置环境变量
注:我们给我们所要安装的这个软件的环境变量(路径)名字统一为My_HOME 配置里面的bin目录,假设软件安装位置是:/home/song/songbaobao/dbsql/bin
OK,通常情况下在Linux上配置环境变量(把My_HOME添加到PATH上)有五种方式:
方式一:在控制台bash中设置 export PATH
其使用方式如下: |
export PATH=/home/uxdb/songbaobao/dbsql/bin:$PATH
--------------或者把PATH放在前面------------------
export PATH=$PATH:/home/uxdb/songbaobao/dbsql/bin
注:位置的前后也就决定了在变量PATH里面的前后顺序!
其注意事项如下: |
1、立刻生效
2、仅当前终端有效,bash关闭后失效;仅对当前用户有效,别的用户用不了
3、配置的环境变量中不要忘了加上原来的配置,即:$PATH。否则则直接覆盖原来的PATH值
4、适用于一些临时起作用的环境变量设置
方式二:在当前用户家目录下的.bashrc中设置 vim ~/.bashrc
注:这种方式是我推荐大家使用的方式,也是等下我们最后在安装脚本里面添加自动配置环境的方式。原来文件的内容如下:
OK,开始我们的配置!
其使用方式如下: |
# 在export PATH的上面一行加上如下内容:
export My_HOME=/home/uxdb/songbaobao/dbsql
PATH=$My_HOME/bin:$PATH
1、关闭这个bash,使用相同的用户打开新的终端时生效
2、或者手动source ~/.bashrc
立刻生效
其注意事项如下: |
1、永久有效
2、仅对当前用户有效,使用比较安全
3、如果有后续的环境变量加载文件覆盖了PATH定义,则可能会失效
方式三:在当前用户家目录下的.bash_profile中设置 vim ~/.bash_profile
其实这种方式和上面的差不多,我们首先先看一下这个.bash_profile文件:
[uxdb@local64 ~]$ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
GRADLE=/usr/local/gradle/gradle-4.6/bin
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$GRADLE
export PATH
[uxdb@local64 ~]$
解释一下:若是.bashrc文件存在,则相当于使用source命令 就是使这个.bashrc文件里面环境变量生效(和我们上面的做的事情一样,只是这里使用了点命令)。除此之外,它里面也是可以定义环境变量的。
其使用方式如下: |
# 在export PATH的上面一行加上如下内容:
export My_HOME=/home/uxdb/songbaobao/dbsql
PATH=$My_HOME/bin:$PATH
1、关闭这个bash,使用相同的用户打开新的终端时生效。(有时候不一定生效,重启之后即可)
2、或者手动source ~/.bashrc
可能立刻生效
3、不建议这种,有时候不会立刻生效或者立刻失效 需要重启
其注意事项如下: |
1、永久有效
2、仅对当前用户有效,使用同上一种方式
3、如果有后续的环境变量加载文件覆盖了PATH定义,则可能会失效
OK,下面我们就来看一下针对于全部用户生效的方式(配置中需要管理员权限),建议:我们在学习过程中可以这么做,但是真的用在工作或者一些严格的场景下 建议采用上面方式。当然如果有特殊的需求,那我们就采用下面的这些方式也是可以的。
方式四:在/etc/目录下的bashrc中设置 sudo vim /etc/bashrc
其使用方式如下: |
# 在export PATH的上面一行加上如下内容:
export My_HOME=/home/uxdb/songbaobao/dbsql
PATH=$My_HOME/bin:$PATH
1、关闭这个bash,使用相同的用户打开新的终端时生效
2、或者手动source ~/.bashrc
立刻生效
其注意事项如下: |
1、永久有效
2、对所有用户有效,使用不太安全
方式五:在/etc/目录下的profile中设置 sudo vim /etc/profile
我们在改动这个文件之前先看一下,文件的注释说明内容:
[uxdb@local64 ~]$ head -10 /etc/profile
# /etc/profile
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
[uxdb@local64 ~]$
上面已经说的很清楚,大家若是不指定自己在干啥的时候最好不要改动这个文件。
其使用方式如下: |
# 在其中一处 export PATH的上面一行加上如下内容:
export My_HOME=/home/uxdb/songbaobao/dbsql
PATH=$My_HOME/bin:$PATH
1、关闭这个bash,使用相同的用户打开新的终端时生效。(有时候不一定生效,重启之后即可)
2、或者手动source ~/.bashrc
可能立刻生效
3、不建议这种,有时候不会立刻生效或者立刻失效 需要重启
其注意事项如下: |
1、永久有效
2、对所有用户有效,使用不太安全
注:也许是因为环境的问题,我的centos7 有些时候source之后,不一定立刻生效(需要重启)。相比之下,第二种方式算是最优的方案,下面我们就使用第二种方案来完成 软件安装脚本里面添加自动配置环境变量
安装脚本里面自动配置环境变量
场景:我们得到一个软件的安装包,里面有一个install.sh的安装脚本。我们可以使用它来完成该软件的安装,例如我们这里的软件 它拥有一个充满可执行程序的bin目录。在通常情况下,我们可以等安装完成之后,将其路径用上面你喜欢的方式来完成环境变量PATH的配置。
而现在,我们主要是利用Shell脚本的命令,以及上面第二种配置方式来完成软件安装的自动化配置!
来看一下我写的这个函数:
function Auto_configure_environ_varia()
{
if [ -f "/home/$User/.bashrc" ] ; then #选择第二种方式,预先判断文件存在
PATH_OF_SOFTWARE=$InstallDir/dbsql
hasPATH=$(grep -v "^#" /home/$User/.bashrc | grep "\export PATH" | wc -l)
if [ $hasPATH -eq 0 ] ; then
sed -i '$a \export My_HOME='"${PATH_OF_SOFTWARE}"'' /home/$User/.bashrc
sed -i '$a PATH='"\$My_HOME\/bin"':$PATH' /home/$User/.bashrc
sed -i '$a \export PATH' /home/$User/.bashrc
else
hasUXDBHOME=`grep -v "^#" /home/$User/.bashrc | grep "\export My_HOME" | wc -l`
if [ $hasUXDBHOME -eq 0 ] ; then
theFirst=$(grep -n "^export PATH" /home/$User/.bashrc | awk -F ':' '{print $1}' | sed -n '1p;1q')
sed -i ''"${theFirst}"'i \export My_HOME='"${PATH_OF_SOFTWARE}"'' /home/$User/.bashrc
let theFirst++
sed -i ''"${theFirst}"'i \PATH='"\$My_HOME\/bin"':$PATH' /home/$User/.bashrc
else
sed -i -r "s#export My_HOME.*#export My_HOME="${PATH_OF_SOFTWARE}"#g" /home/$User/.bashrc
hasConfigured=$(grep -v "^#" /home/$User/.bashrc | grep "^PATH" | grep "\$My_HOME\/bin" | wc -l)
if [ $hasConfigured -eq 0 ] ; then
sed -i '/export PATH/i\PATH='"\$My_HOME\/bin"':$PATH' /home/$User/.bashrc
fi
fi
fi
source /home/$User/.bashrc
echo "done"
fi
}
解释一下上面这个函数:
$User:是指当前安装的用户,我们就是为其设计的环境变量
$InstallDir:是指你这个软件选择安装的位置
我这个函数的逻辑处理为:
1、有没有.bashrc文件,有则设置
2、该文件里面有没有有效的 export PATH,若无则添加My_HOME定义;添加PATH新定义;补上export PATH
3、若有则先判断有无My_HOME的有效的 定义(因为之前也许安装配置过)。若无则在第一次export PATH之前,添加My_HOME定义;添加PATH新定义
4、若有这个My_HOME的有效的 定义,则直接进行替换。目的:也许安装位置变了,之前的环境变量失效了。
5、无论是否相同,则都进行替换为新的位置。接下来判断PATH里面有无My_HOME的添加,若无则添加上。
6、让这个文件生效,之后新打开的bash就都是自动配置这个最新的环境变量了。
OK,这些都是我利用Shell脚本的文件操作三剑客完成的,已经完成了测试(没有问题) 特此拿出来供大家借鉴和指正!
最后还是口号奉上:苟利国家生死以,岂因祸福趋避之。漫漫清华路,且行且珍惜。
2020年5月23日16:50:51