在 Linux 中,环境变量是一个可用于提供系统不同部分的配置和数据的值。
这些变量充当数据的占位符,使应用程序和 shell 能够更顺畅地相互交互。
环境变量的一个主要优点是它们促进进程之间的值共享,从而实现对系统行为各方面的集中控制。
范围(本地与全球)
Linux 中的环境变量根据其范围可以分为两大类:本地变量和全局变量。
局部变量
局部变量仅限于当前 shell 会话。在该会话中启动的任何子 shell 或程序都可以访问这些变量,但它们在其他会话中不可用。
创建局部变量的方法如下:
variable_name="local value"
echo $variable_name
Output:
local value
在此代码中,您声明一个名为variable_name
并为其分配值“本地值”。当使用echo
命令打印变量,它返回分配的值。
该变量仅在当前 shell 中可用,并且在新的终端窗口或其他会话中不会被识别。
全局变量
全局变量,也称为环境变量,系统上的所有会话和用户都可以访问。
它们提供了一种在不同应用程序和 shell 会话之间共享配置设置的方法。
您可以使用以下命令创建全局变量导出命令:
export GLOBAL_VARIABLE="global value"
echo $GLOBAL_VARIABLE
Output:
global value
通过在声明前加上前缀export
,你正在创建变量GLOBAL_VARIABLE
系统上的所有会话和用户都可以访问。
与局部变量不同,全局变量在不同的终端会话中保留其值。
列出环境变量
在 Linux 中,您可以使用多种方法来列出环境变量。在这里,我们将探索不同的方法来做到这一点。
使用 printenv
The printenv
命令可以列出所有环境变量或显示特定变量的值。
printenv
Output:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOME=/home/username
...
通过简单地运行printenv
,您将获得所有环境变量的列表。如果你想查看某个特定的变量,比如HOME
, use:
printenv HOME
Output:
/home/username
上面的命令具体显示了HOME
多变的。
使用环境
如同printenv
, the 环境命令还可以列出所有环境变量。
env
Output:
SHELL=/bin/bash
USER=username
...
它返回系统上所有活动环境变量的完整列表。
使用回声
要打印特定环境变量的值,可以使用回显命令变量名前缀为$
.
echo $USER
Output:
username
这返回的值USER
变量,显示当前登录的用户名。
使用/etc/环境
在某些 Linux 发行版中,/etc/environment
文件保存全局环境变量。您可以使用文本编辑器或cat
命令。
cat /etc/environment
Output:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
这将显示文件的内容,包括任何定义的全局环境变量。
设置环境变量(永久变量)
当您想让环境变量在所有会话中以及重新启动后永久可用时,您需要将它们添加到 shell 配置文件之一。
编辑.bashrc
The .bashrc
file 是每次打开新终端窗口时运行的脚本。您可以在此处添加环境变量。
Open .bashrc
使用像这样的文本编辑器nano
:
nano ~/.bashrc
在文件末尾添加导出行:
export NEW_VARIABLE="value"
保存并退出文件。
现在,应用更改:
source ~/.bashrc
或者您可以重新启动终端。
验证:
echo $NEW_VARIABLE
Output:
value
变量NEW_VARIABLE
现在已永久设置,重启后不会消失。
编辑 .bash_profile 或 .profile
一些系统使用.bash_profile
or .profile
用于登录 shell。该过程与.bashrc
.
只需更换.bashrc
with .bash_profile
or .profile
在上述说明中。
这些文件之间的选择取决于您的系统和个人喜好。
一般来说,.bashrc
用于非登录 shell,并且.bash_profile
or .profile
用于登录 shell。环境变量可以放置在其中任何一个中,具体取决于您的具体需要。
通过将环境变量添加到这些配置文件中,您可以确保它们可以在不同的终端会话中以及系统重新启动后进行全局访问。
设置环境变量(系统范围)
系统上的所有用户都可以访问系统范围的环境变量。这些变量可以在系统启动或用户登录期间读取的特定文件中设置。
/etc/环境
The /etc/environment
file 是一个包含键值对的简单文本文件。您可以在此处添加环境变量:
sudo echo 'GLOBAL_PATH="/new/path"' | sudo tee -a /etc/environment
然后,您需要注销并重新登录,或重新启动系统。
验证:
printenv GLOBAL_PATH
Output:
/new/path
The GLOBAL_PATH
现在已经为系统上的所有用户设置了变量。
/etc/配置文件
或者,您可以使用/etc/profile
文件来设置系统范围的环境变量。打开文件:
sudo nano /etc/profile
添加您的导出行:
export SYSTEM_VARIABLE="system value"
保存并退出。
要应用更改,请重新启动系统或运行:
source /etc/profile
验证:
echo $SYSTEM_VARIABLE
Output:
system value
The SYSTEM_VARIABLE
现在为所有用户全局设置。
这两种方法都允许您设置所有用户都可以访问的环境变量,从而确保整个系统的环境一致。
/etc/environment 与 bashrc
Aspect |
/etc/environment |
~/.bashrc |
Scope |
System-wide (all users) |
User-specific |
Type of sessions |
All types (including GUI like KDE and GNOME) |
Interactive non-login shells |
Syntax |
key=value pairs only |
Shell scripting syntax |
Effect |
Variables loaded upon login |
Variables loaded on new shell |
Suitable for |
Setting environment variables for all users and sessions |
Setting user-specific aliases, functions, and shell variables |
Impact on GUI applications |
Variables available |
Variables are not be available |
Requires shell restart |
No (changes apply at next login) |
Yes (for changes to take effect in current session) |
Accepts scripting |
No |
Yes |
取消设置环境变量
有时您可能想要删除环境变量,无论是出于测试目的还是为了清除不必要或不正确的设置。
The unset
命令可以让你做到这一点。
以下是取消设置环境变量的方法:
export VARIABLE_TO_UNSET="value"
echo $VARIABLE_TO_UNSET
Output:
value
上面的代码首先设置了一个名为VARIABLE_TO_UNSET
值为“值”。现在,您将取消它:
unset VARIABLE_TO_UNSET
echo $VARIABLE_TO_UNSET
Output:
(blank line)
该变量已被删除,因此尝试echo
它返回一个空行。
如果该变量是在 shell 配置文件或系统范围文件之一中设置的,则需要从文件中删除相应的行并使用以下命令重新加载文件source
或重新启动会话。
特殊环境变量
Linux 定义了几个特殊的环境变量来控制系统行为的各个方面。了解这些可以帮助您进行系统配置和脚本编写。
PATH
The PATH
变量定义系统查找可执行文件的目录。
echo $PATH
Output:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
这显示了系统搜索可执行文件的目录,允许您运行命令而无需指定其完整路径。
HOME
The HOME
变量指向当前用户的主目录。
echo $HOME
Output:
/home/username
这提供了用户主目录的路径,在需要引用用户特定文件或目录的脚本或命令中很有用。
USER
该变量包含当前登录的用户名。
echo $USER
Output:
username
SHELL
The SHELL
变量定义用户的默认 shell。
echo $SHELL
Output:
/bin/bash
HOSTNAME
该变量包含系统的主机名。
echo $HOSTNAME
Output:
your-hostname
LANG
The LANG
变量设置系统的语言和区域设置。
echo $LANG
Output:
en_US.UTF-8
PS1
(提示字符串 1):这是定义主提示字符串的环境变量。是终端等待输入时显示的字符串。
echo $PS1
Output:
[\u@\h \W]\$
阅读更多内容Linux PS1提示定制.
PS2
(提示字符串 2):这是当命令需要更多输入才能完成时显示的辅助提示。
例如,如果您输入echo "
不关闭报价并按 Enter,第二个提示(>
默认情况下)将出现在下一行。
这是向您表明该命令尚未完成,正在等待结束报价。
echo $PS2
Output:
>
PWD
The PWD
变量包含当前工作目录。
echo $PWD
Output:
/home/username/directory
The PWD
当创建 shell 会话时,环境变量不存储在物理文件中,而是存储在系统内存中。
HISTSIZE
The HISTSIZE
变量定义命令历史记录的大小。
echo $HISTSIZE
Output:
1000
EDITOR
, BROWSER
可以设置这些变量来定义默认的文本编辑器和 Web 浏览器。
echo $EDITOR
Output:
/usr/bin/vim
在 Bash 脚本中使用环境变量
这是一个基本示例,说明如何在bash脚本:
创建一个名为example.sh
:
#!/bin/bash
MY_NAME="John"
export MY_OS="Linux"
echo "Hello, $MY_NAME. Welcome to $MY_OS!"
现在,使脚本可执行:
chmod +x example.sh
运行脚本:
./example.sh
Output:
Hello, John. Welcome to Linux!
Here, MY_NAME
and MY_OS
是脚本中设置的环境变量。
The export
命令使MY_OS
可用于任何子流程。然后在 echo 语句中使用它们来打印欢迎消息。
您甚至可以在运行脚本时从命令行传递环境变量。这对于根据输入更改脚本的行为很有用。
MY_NAME="Alice" ./example.sh
Output:
Hello, Alice. Welcome to Linux!
通过在脚本运行前加上前缀MY_NAME="Alice"
,你暂时覆盖了MY_NAME
脚本中的变量,允许自定义输出。
在脚本编写中使用环境变量可以让您编写动态、可重用的代码。
Systemd 和环境变量
systemd
是一个初始化系统,用于引导用户空间并管理所有后续进程。
使用以下命令为特定服务设置环境变量systemd
,您通常会编辑服务的单元文件。
这是一个例子:
sudo systemctl edit my-service.service
Add an [Environment]
部分:
[Service]
Environment="MY_VARIABLE=my value"
Reload systemd
并重新启动服务:
sudo systemctl daemon-reload
sudo systemctl restart my-service.service
变量MY_VARIABLE
现在可供my-service
服务,以“我的价值”为价值。
您还可以使用专用的环境文件:
创建文件/etc/my-service.env
内容:
MY_VARIABLE=my value
在服务的单元文件中引用此文件:
[Service]
EnvironmentFile=/etc/my-service.env
像以前一样重新加载并重新启动。
这允许完全分离配置,这对于复杂的服务特别有用。
从文件加载环境变量
以下是实现这一目标的两种常见方法:
使用源码
The 源命令在当前 shell 环境中读取并执行给定文件名的命令。
创建一个名为variables.sh
包含以下内容:
export VAR1="value1"
export VAR2="value2"
要加载这些变量,请运行:
source variables.sh
验证:
echo $VAR1
echo $VAR2
Output:
value1
value2
这些变量现在在您当前的 shell 中可用。
使用 dotenv
dotenv
是一个可以从a加载变量的工具.env
文件到环境中。您需要先安装它。
创建一个名为.env
包含以下内容:
VAR1=value1
VAR2=value2
使用加载这些变量dotenv
:
dotenv
按照之前的方法进行验证。
Output:
value1
value2
F.A.Q
问:如何使用export
设置默认编辑器的命令?
A:使用以下命令设置默认编辑器export
命令,需要修改EDITOR
环境变量。例如,如果您想设置vim
作为默认编辑器,您可以使用以下命令:
export EDITOR=vim
如果您想使其永久化,请将以上行添加到您的 shell 配置文件中(~/.bashrc
, ~/.bash_profile
, or ~/.profile
),然后保存并关闭文件。要使更改生效,您可以使用source
命令:
source ~/.bashrc