如何设置、列出和管理Linux环境变量

环境变量是 Linux 管理的一个重要方面,它为工程师提供了一个强大的定制系统的工具。在本文中,我们将详细了解什么是 Linux 环境变量,它们与 shell 变量有何不同,以及如何列出、设置和管理它们。

如何设置、列出和管理Linux环境变量

什么是 Linux 环境变量?

Linux 环境变量是 shell 及其子进程使用的动态变量。环境变量定义了与 Linux 系统如何工作相关的各个方面。例如,用户的默认 shell 是在 SHELL 变量中定义的。同样,许多管理员使用 JAVA_HOME= 环境变量将程序指向系统上特定版本的 Java。

使用 Linux 环境变量时要记住的几个要点是:

  • 环境变量遵循<NAME>=<VALUE>格式。
  • 您可以通过用冒号分隔它们来为单个变量指定多个值,如下所示:
    <NAME>=<VALUE1>:<VALUE2>:<VALUE3>
  • 环境变量区分大小写。
  • 按照惯例,但不是规则,环境变量名称总是大写。
  • Shell 变量与环境变量不同。Shell 变量仅适用于当前 shell,不适用于任何子进程。我们将在 Linux shell 变量与 Linux 环境变量部分仔细研究这个主题。

考虑到所有这些,让我们继续学习本教程。

先决条件

我们的示例使用 Ubuntu 20.04 和 GNU Bash 5.0.17,但您可以在大多数现代 Linux 系统上进行操作。
如何列出 Linux 环境变量 列出 Linux 环境变量
的方法有多种,这里我们将演示一些最常见的方法。

使用 printenv 列出 Linux 环境变量

该printenv命令显示当前环境变量。

您可以printenv通过运行不带任何选项或参数的命令来列出所有当前的 Linux 环境变量。

printenv

的输出应该与此类似:

SHELL=/bin/bash
SUPERBREAKFAST=Pepper and Egg
PWD=/root
LOGNAME=root
XDG_SESSION_TYPE=tty
MOTD_SHOWN=pam
HOME=/root
LANG=C.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
SSH_CONNECTION=24.148.23.154 2068 84.32.188.154 22
EASTEREGG=You pay attention to detail, good job!
LESSCLOSE=/usr/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
TERM=xterm
LESSOPEN=| /usr/bin/lesspipe %s
USER=root
SHLVL=1
XDG_SESSION_ID=839
XDG_RUNTIME_DIR=/run/user/0
SSH_CLIENT=24.148.23.154 2068 22
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
SSH_TTY=/dev/pts/0
_=/usr/bin/printenv

您还可以printenv用来显示各个环境变量。显示单个 Linux 环境变量的基本语法printenv是:
printenv [name]

例如,要打印PWD环境变量,请使用以下命令:

printenv PWD

输出应该显示您的 shell 的当前工作目录。

如何设置、列出和管理Linux环境变量

使用 env 列出 Linux 环境变量

env 命令可以列出所有环境变量,输出类似于printenv. 要使用 env 列出所有 Linux 环境变量,请运行不带任何选项或参数的命令,如下所示:

env

在大多数情况下,env输出应与printenv除_=变量外的输出相匹配。发生这种情况是因为该_=变量是用于调用 shell 或 shell 脚本的特殊 Bash 参数。如果您在现代 Linux 系统上使用 env,该 _=值将匹配env二进制文件的位置(例如/usr/bin/env)。如果您使用printenv,它将匹配 printenv 二进制文件的位置(例如/usr/bin/printenv)。

使用 echo 显示 Linux 环境变量

显示单个 Linux 环境变量的最快方法之一是使用echo命令。基本语法是echo $<variable_name>.

例如,要打印 PATH 环境变量,请使用以下命令:

echo $PATH

输出应类似于:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

该echo $<variable_name>命令也适用于不是环境变量的 shell 变量。例如,如果我们创建一个 BREAKFAST 变量并将其设置为'Pepper & Egg',我们可以看到输出 withecho $BREAKFAST但看不到 with printenv。

如何设置、列出和管理Linux环境变量

列出 Linux 环境变量的其他方法

列出 Linux 环境变量的其他方法包括:

  • declare- 这个内置的 shell 实用程序可以使用此命令显示 shell 和环境变量。
    如何设置、列出和管理Linux环境变量
  • set- 显示 shell 变量、环境变量和 shell 函数。
    如何设置、列出和管理Linux环境变量
  • compgen -v- 显示所有 shell 和环境变量的名称。
    如何设置、列出和管理Linux环境变量

如何设置 Linux 环境变量

设置 Linux 环境变量的基本命令是

export <NAME>='<value>'

例如,要创建名为 SANDWICH 且值为 Pepper And Egg 的环境变量,请使用以下命令:

export SANDWICH='Pepper And Egg'

要确认环境变量已创建,请使用命令

printenv SANDWICH

输出应如下所示:

如何设置、列出和管理Linux环境变量

如何创建 Shell 变量

您可以使用这个基本命令结构创建 shell 变量<NAME>='<value>'。

例如,要创建一个名为 COOLSERVER 且值为 Cherry 的 shell 变量,请使用以下命令:

COOLSERVER='Cherry'

您可以使用以下命令确认变量现在存在:

echo $COOLSERVER

输出应该是:

Cherry

要确认该变量不是环境变量,请执行以下命令:

printenv COOLSERVER

因为变量不是环境变量,所以应该没有输出:

如何设置、列出和管理Linux环境变量

如何将 Shell 变量转换为环境变量

要将 shell 变量转换为环境变量,基本的命令语法是export <Shell_Variable_Name>.

例如,要将上一示例中的COOLSERVER变量转换为环境变量,请使用以下命令:

export COOLSERVER

现在,该printenv COOLSERVER命令应打印 Cherry 作为输出:

如何设置、列出和管理Linux环境变量

Linux Shell 变量与 Linux 环境变量

到目前为止,您可以看到 shell 变量和环境变量是不同的东西。现在,让我们仔细看看差异及其重要性。

Linux shell 变量和 Linux 环境变量之间的主要区别在于:
shell 变量不与 shell 的子进程共享,环境变量与 shell 的子进程共享。

为了说明为什么这种差异很重要,让我们通过一个简单的 bash 脚本来演示一个示例。

首先,创建一个名为CLOUD的变量并将值设置为Cherry Servers!.

CLOUD='Cherry Servers!'

接下来,使用echo命令显示变量。

echo $CLOUD

这是端到端的样子:

如何设置、列出和管理Linux环境变量

现在,创建一个test.sh包含相同命令的 bash 脚本。该脚本应如下所示:

#!/bin/bash
echo $CLOUD

使用此命令使脚本可执行:

chmod +x test.sh

现在,运行脚本:

./test.sh

输出应为空白,如下所示:

如何设置、列出和管理Linux环境变量

输出为空的原因是因为$CLOUD它是一个 shell 变量。它包含在当前 shell 实例中。同时,test.sh脚本启动一个新进程,并且由于$CLOUD未设置环境变量,脚本不打印任何内容。

让我们$CLOUD用这个命令创建一个环境变量(注意不要在变量名前使用 $):

export CLOUD

现在,再次运行 test.sh 脚本。

./test.sh

你应该看到这个输出:

如何设置、列出和管理Linux环境变量

如何删除 Linux 环境变量

删除现有 Linux 环境变量的基本语法是unset <NAME>.

例如,要取消设置我们的COOLSERVER变量,请使用以下命令:

unset COOLSERVER

要确认变量现在已删除,请执行以下命令:

printenv COOLSERVER

因为变量不是环境变量,所以应该没有输出:

如何设置、列出和管理Linux环境变量

如何使 Linux 环境变量永久化

到目前为止,我们创建的环境变量只会在您的 shell 会话期间持续存在。如果您注销或重新启动,您需要重新创建它们才能使用它们。

幸运的是,有几种方法可以使 Linux 环境变量在不同的 shell 会话中保持不变。

使用 .profile 使登录 Shell 的环境变量永久化

该.profiile文件存在于用户的主目录中。您可以通过编辑用户的.profile文件以包含用于设置环境变量的导出命令来为用户添加环境变量。

例如,要使我们的COOLSERVER环境变量对当前用户永久有效,请遵循以下过程:

  1. 将目录更改为用户的主目录cd ~
  2. .profile在文本编辑器(例如 nano、vi、vim 等)中打开文件
  3. 将以下行添加到文件底部:export COOLSERVER='Cherry'
  4. 保存更改

更改将在下次登录时生效。您可以使用以下命令使它们对当前终端生效:

. ~/.profile

使用 .bashrc 使非登录交互式 Shell 的环境变量永久化

对于非登录 shell,您可以遵循与登录 shell 相同的过程,但不是编辑~/.profile文件,而是编辑~/.bashrc.

使用 /etc/environment 使环境变量在系统范围内永久化

⚠️警告: 系统上的任何 shell 都可以访问系统范围的变量,因此请谨慎设置。

要设置系统范围的 Linux 环境变量,您可以编辑该/etc/environment文件。不是将导出命令附加到文件,而是将该<NAME>='<VALUE>'对附加到文件末尾。

例如,要使我们的COOLSERVER环境变量对整个系统永久有效,请遵循以下过程:

  1. 将目录更改为用户的主目录cd /etc
  2. environment在文本编辑器(例如 nano、vi、vim 等)中打开文件
  3. 将以下行添加到文件底部COOLSERVER='Cherry'
  4. 保存更改

文章链接: https://www.mfisp.com/13554.html

文章标题:如何设置、列出和管理Linux环境变量

文章版权:梦飞科技所发布的内容,部分为原创文章,转载请注明来源,网络转载文章如有侵权请联系我们!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
IDC云库

如何使用SFTP上传文件?

2022-12-1 15:00:59

IDC云库

如何使用Ansible Shell模块运行远程命令

2022-12-1 15:58:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
客户经理
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索

梦飞科技 - 最新云主机促销服务器租用优惠