Linux 环境变量

王 茂南 2021年10月16日07:17:34
评论
3300字阅读11分0秒
摘要本文会介绍关于 Linux 环境变量的相关内容,包括 Linux 中环境变量的种类,以及 Linux 下环境变量查看和设置的方法,以及常见的环境变量。

简介

这一篇会介绍 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 环境变量

 

 

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

在文件中插入之后,文件如下所示,我们对该文件进行保存:

Linux 环境变量

接着我们运行上面的  /etc/profile 文件:

source /etc/profile

运行完毕之后,会进入一个新的 shell,这个时候我们看一下 PATH 这个环境变量,可以看到多了一个 NEW_PATH 在末尾:

Linux 环境变量

 

修改 ~/.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 环境变量

 

Linux 环境变量的查看

上面我们介绍了使用 echo 来查看某个环境变量。如果我们要查看当前用户的所有的环境变量,可以使用 env 来进行查看,如下所示:

Linux 环境变量

我们使用 set 可以查看当前 shell 的所有变量,例如 shell 的外观等环境变量:

Linux 环境变量

为了说明 envset 的不同,我们定义一个变量和一个环境变量:

temp=123 # 定义变量
export temp_env=123 # 环境变量

接下来我们将 envsetexport 保存为三个文件:

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 中是没有的。

Linux 环境变量

 

修改和删除环境变量

现在我们向环境变量中增加两个路径,分别是 /wmn/test/wmn/test1。为了防止误操作,我们首先将原本的 PATH 保存在一个新的变量 tmp_path 中去,接着对新变量进行添加:

tmp_path=$PATH:/wmn/test
tmp_path=$tmp_path:/wmn/test1

添加完毕之后,我们使用 echo $tmp_path 来查看变量:

Linux 环境变量

接着我们删除 /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 用户是 #,对于普通用户是 $

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2021年10月16日07:17:34
  • 转载请务必保留本文链接:https://mathpretty.com/14011.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: