0
点赞
收藏
分享

微信扫一扫

Linux环境变量

一、环境变量定义及作用

在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的 家目录(HOME)、当前使用的 SHELL 程序等。

且 Linux 系统中环境变量的名称一般都是大写的,这是一种约定俗成的规范。

百度百科定义:

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。

环境变量​是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序​所将使用到的信息。例如Windows​和DOS​操作系统中的path环境变量,当要求系统运行一个程序​而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境​​变量​​,来更好的运行进程。

PATH环境变量:用来指定可执行文件的搜索路径。

比如,当我们希望直接在命令行里执行命令时,系统首先会在当前所在的路径下搜索此命令,如果没有搜索到,系统会到Path环境变量所指定的路径中去找。如果找到,就正常执行,还没找到,就报错。

二、环境变量分类

按生命周期分:

  • 永久的:在环境变量脚本文件中配置,用户每次登录时会自动执行这些脚本,相当于永久生效。
  • 临时的:用户利用export命令,在当前终端下声明环境变量,关闭Shell终端失效。

按作用域分:

  • 系统环境变量:公共的,对全部的用户都生效。
  • 用户环境变量:用户私有的、自定义的个性化设置,只对该用户生效。

三、环境变量相关命令

3.1、env:查看当前用户全部的环境变量

[root@centos7-client ~]# env
XDG_SESSION_ID=1
HOSTNAME=centos7-client
SELINUX_ROLE_REQUESTED=
TERM=xterm-256color
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.88.1 12923 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/1
USER=root
LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=zh_CN.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.88.1 12923 192.168.88.132 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env

3.2、env | grep 环境变量名:筛选包含的环境变量

[root@centos7-client ~]# env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

3.3、export:显示当前系统定义的所有环境变量

[root@centos7-client ~]# export
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="centos7-client"
declare -x LANG="zh_CN.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PWD="/root"
declare -x SELINUX_LEVEL_REQUESTED=""
declare -x SELINUX_ROLE_REQUESTED=""
declare -x SELINUX_USE_CURRENT_RANGE=""
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_CLIENT="192.168.88.1 12923 22"
declare -x SSH_CONNECTION="192.168.88.1 12923 192.168.88.132 22"
declare -x SSH_TTY="/dev/pts/1"
declare -x TERM="xterm-256color"
declare -x USER="root"
declare -x XDG_RUNTIME_DIR="/run/user/0"
declare -x XDG_SESSION_ID="1"

3.4、printenv 环境变量名:查看指定环境变量的值

[root@centos7-client ~]# printenv PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

3.5、echo $环境变量名:查看指定环境变量的值

[root@centos7-client ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

3.6、unset 环境变量名:清除指定环境变量

四、添加环境变量

4.1、临时添加环境变量PATH

可通过export命令,如:

export PATH=/usr/local/nginx/sbin/:$PATH,将/usr/local/nginx/sbin/目录临时添加到环境变量中;

:$PATH是指把新添加的环境变量与原先的环境变量重新赋值给PATH这个变量,这里可以看出如果有多个环境变量时,应该使用:进行分隔,如:export PATH=/usr/local/php/bin:/usr/local/mysql/bin:$PATH 当然$PATH是放在开头还是最后是没有影响的。

4.2、当前用户永久添加环境变量

编辑.bashrc文件 vim ~/.bashrc   

文件末尾添加:export PATH="/usr/local/nginx/sbin/:$PATH"

source ~/.bashrc

4.3、所有用户永久添加环境变量

编辑/etc/profile文件 vim /etc/profile    

文件末尾添加:export PATH="/usr/local/nginx/sbin/:$PATH"

source /etc/profile

通过这种方式在/etc/profile下配置好环境变量后,每次关闭shell窗口都需要再执行一次source /etc/profile才能生效,这个问题需要在~/.bashrc 文件最后添加source /etc/profile,这样问题便得到解决。

五、/etc/profile.d

在/etc/profile文件中有如下一段脚本:

for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done

unset i

在每次启动时,自动加载并执行/etc/profile.d 下的*.sh,让*.sh中配置的变量生效。

/etc/profile.d/*.sh 与/etc/profile相比:

【共同】

1、都是用来设置环境变量的文件;

2、都是设置登录(login)级别的变量,当用户重新登录 shell 时会触发;所以效果一致;

3、source /etc/profile也都会生效。

【优点】

/etc/profile.d/*.sh高度解耦,比 /etc/profile 好维护,不想要什么变量直接删除 /etc/profile.d / 下对应的 sh 脚本即可。

示例:

添加新的环境变量时,在/etc/profile.d/下新建sh文件即可。

新建文件test.sh,vim /etc/profile.d/test.sh,输入内容如下:

#!/bin/bash
if [ -e /test/file ]; then
TEST=/test/file
export TEST
fi

[root@centos7-client ~]# source /etc/profile #立即生效
[root@centos7-client ~]# echo $TEST #由于该文件不存在,所以为空


[root@centos7-client ~]# mkdir /test && touch /test/file #创建文件

[root@centos7-client ~]# source /etc/profile #重新执行
[root@centos7-client ~]# echo $TEST
/test/file

[root@centos7-client ~]# env | grep TEST
TEST=/test/file

举报

相关推荐

0 条评论