文章目录(Table of Contents)
简介
这一篇会介绍 Linux 中环境变量(PATH 是一个常用的环境变量)的相关内容。包括介绍 Linux 中环境变量的种类,「系统级环境变量」,「用户级环境变量」和「临时环境变量」。除此之外,我们还会在 Linux 下环境变量查看和设置的方法,以及常见的环境变量。
本文的大部分内容根据实验楼课程,「楼+ 之运维进阶实战」进行改编。部分内容参考自,Linux 环境变量配置全攻略(这一篇也是讲的非常详细)。
Linux 环境变量
和 Windows 系统相似,在安装许多软件的时候需要配置环境变量。同样,在 Linux 里也需要配置相应的环境变量。Linux 中的环境变量主要分为系统级和用户级:
- 系统级环境变量是每个登录到系统的用户都要读取的变量;
/etc/profile
文件:当用户登录 Shell 时执行的第一个文件,用来完成一些初始化工作,通常是调用/etc/bash.bashrc
文件来完成具体工作。/etc/environment
文件:系统级别的环境变量,并不是一个脚本,内容为一些环境变量赋值语句,用来给不从 Shell 启动的程序设置环境变量。在读取完毕上面profile
文件之后,会读取environment
文件中的配置。
- 用户级的环境变量则是用户使用系统时加载的个人环境变量(文件主要是在
/home
目录下),不同用户的环境变量可以是不同的~/.profile
:每个用户都可以调用来输入自己使用的shell
信息,不过在用户登录时,该文件只执行一次。~/.bashrc
: 包含登录用户的专用bash shell
的bash
信息。也就是说每开一个shell
,该文件都会被读取一次。(如果使用zsh
,就是zshrc
)
- 临时的环境变量
-
- 针对当前
shell
的环境变量。
- 针对当前
简单来说,环境变量就是指定一个目录,软件在运行的时候,相关程序会按照该目录来查找相关文件。
在默认情况下,一个进程被创建时,除了创建过程会被明确指定,它也将继承其父进程的绝大部分环境设置。如图所示:
Linux 变量种类
在前面我们安装「系统」和「用户级」来划分环境变量。 若按照变量的生存周期来划分,那么变量就可以分为「永久的环境变量」和「临时的环境变量」:
- 永久的:需要修改配置文件,变量永久生效(配置文件中的环境变量,重启后仍然会生效)。
- 临时的:使用
export
命令来声明即可,变量在关闭shell
的时候自动失效。
若按照环境变量自身的信息来划分,则可以分为:
- 当前
shell
进程私有用户自定义变量。此时变量只在当前shell
中有效。 shell
自身的內建变量。- 从自定义变量导出的环境变量。
Linux 环境变量设置的方法
下面会介绍四种设置环境变量的方式,我个人比较推荐第三种,在 shell
的配置文件中进行修改。例如我使用的是 zsh
,那么只需要在 ~/.zshrc
中使用 export
即可。
通过 /etc/profile 文件中添加变量(永久的)
用 vim 编辑器编辑 /etc/profile
文件来增加变量,将作用于 Linux 下所有用户,且具有永久性。(此方法谨慎使用!)
例如我们进入该文件(sudo vim /etc/profile
),在该文件的最后一行插入一句(之间使用冒号来进行分割的),我不是很推荐直接这么做,推荐在 zshrc 或是 bashrc 中进行修改:
export PATH=$PATH:/NEW_PATH
在文件中插入之后,文件如下所示,我们对该文件进行保存:
接着我们运行上面的 /etc/profile
文件:
source /etc/profile
运行完毕之后,会进入一个新的 shell,这个时候我们看一下 PATH
这个环境变量,可以看到多了一个 NEW_PATH
在末尾:
修改 ~/.profile 文件(对单一用户生效,永久的)
这种方法较为安全,可以把使用这些环境变量的权限控制到用户级别,主要是针对某一特定的用户,如果需要给某个用户权限使用这些环境变量,只需要修改其个人用户主目录下的 .profile
文件就可以了。
例如我们编辑 wmn7
用户目录下的 .profile
文件。在该文件的最后一行,我们加入一行,加入一个 test 目录:
export PATH=$PATH:/test
接着运行上面的文件:
source ~/.profile
之后使用 echo $PATH
就可以查看修改之后的环境变量了。
修改 shell profile 文件(永久的,推荐使用)
我们也可以直接对 shell 的配置文件进行修改。例如我使用的是 zsh,那么我会在 ~/.zshrc 中对 PATH 进行修改(推荐使用这种方式)。
例如我希望添加 /home/wmn7/.local/bin
到环境变量 PATH
中,那么我们只需要在 ~/.zshrc
中添加以下的语句即可:
export PATH=$PATH:/home/wmn7/.local/bin
直接运行export
命令定义环境变量(临时的)
在控制台中设置,不赞成这种方式,这种设置只对当前的 shell 起作用,换一个 shell 设置就无效了。 在 shell 的命令行下直接使用 [export 变量名=变量值] 来定义变量。
在每个用户的 home
目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。
zsh
的配置文件是 .zshrc
,相应 Bash
的配置文件为 .bashrc
。它们在 etc 下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。因此在退出当前 shell
后,临时的自定义环境变量不会在新打开的 shell
中出现。
例如我们在当前的 shell 中添加一个自定义的「环境变量」,uname='wmn7'
:
export uname='wmn7' echo $uname
需要注意的是,在使用 echo
输出变量时需要在变量名前面加 $
符号:
Linux 环境变量的查看
上面我们介绍了使用 echo 来查看某个环境变量。如果我们要查看当前用户的所有的环境变量,可以使用 env
来进行查看,如下所示:
我们使用 set
可以查看当前 shell 的所有变量,例如 shell 的外观等环境变量:
为了说明 env
和 set
的不同,我们定义一个变量和一个环境变量:
temp=123 # 定义变量 export temp_env=123 # 环境变量
接下来我们将 env
,set
和 export
保存为三个文件:
env | sort>env.txt # 将 env 的结果保存在 env.txt export | sort>export.txt set | sort>set.txt
最后我们可以使用 vimdiff
来比较不同输出之间的差别。
vimdiff env.txt export.txt set.txt
可以看到 set 中有前面设置的 temp=123,而 env 和 export 中是没有的。
修改和删除环境变量
现在我们向环境变量中增加两个路径,分别是 /wmn/test
和 /wmn/test1
。为了防止误操作,我们首先将原本的 PATH
保存在一个新的变量 tmp_path
中去,接着对新变量进行添加:
tmp_path=$PATH:/wmn/test tmp_path=$tmp_path:/wmn/test1
添加完毕之后,我们使用 echo $tmp_path
来查看变量:
接着我们删除 /wmn/test1
这个路径,通过 ${变量名%匹配字串}
从尾向前开始匹配,删除符合匹配字串的最短数据:
tmp_path=${tmp_path%:/wmn/test1} echo $tmp_path
如果要删除整个环境变量,那么就使用 unset 来进行删除。主要这里变量前面不需要添加 $ 符号:
unset tmp_path echo $tmp_path
常用的环境变量
PATH
,决定了 shell 将到哪些目录中寻找命令或程序,也就是寻找可执行命令的路径;HOME
,当前用户的主目录;LOGNAME
,当前用户的登录名HOSTNAME
,指主机的名称SHELL
,当前用户 Shell 类型LANGUGE
,语言相关的环境变量,多语言可以修改此环境变量MAIL
,当前用户的邮件存放目录PS1
,基本提示符,对于 root 用户是 #,对于普通用户是 $
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论