在Linux中查看环境变量,最直接的方法就是使用
env
printenv
echo
env
说实话,我个人在日常工作中,遇到需要查看环境变量的场景,第一反应往往就是敲下
env
你只需在终端输入:
env
然后回车,你就会看到一长串的输出,每一行都遵循
KEY=VALUE
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOME=/home/youruser
这个命令的妙处在于,它不仅能展示当前环境,还能让你在一个“干净”或“定制化”的环境下运行其他命令。比如,如果你想在一个没有特定
LD_LIBRARY_PATH
env -u LD_LIBRARY_PATH your_program
这会临时取消
LD_LIBRARY_PATH
your_program
要理解
env
举个例子,
PATH
ls
grep
PATH
PATH
/bin/ls
再比如
LANG
LC_ALL
HOME
HOME
所以说,环境变量的重要性不言而喻。它们提供了一种灵活且标准化的方式,让程序能够适应不同的用户、不同的系统配置,而无需修改程序本身的源代码。它们是操作系统和应用程序之间沟通的桥梁,也是Linux系统强大灵活性的一个体现。
env、printenv和export,这几个命令到底有何区别?初学者常常会对
env
printenv
export
env
- 显示当前环境:不带任何参数时,它会列出当前Shell进程的所有环境变量。这是它最常用的功能。
-
在特定环境中运行命令:你可以通过命令来修改或清理某些环境变量,然后在这个修改过的环境中运行另一个命令。比如
env
。它会创建一个新的环境,运行env VAR=value command
,但不会改变当前Shell的环境。command
printenv
- 如果你不带任何参数运行,它通常会显示与
printenv
命令相似的结果,即当前Shell的所有环境变量。env
- 但它的一个特点是,你可以指定要查看的某个特定变量,比如,它只会输出
printenv PATH
变量的值。这在你想快速检查某个特定变量时非常方便,比PATH
更“正式”一些,也更不容易出错(因为echo $PATH
可能会对一些特殊字符进行解释)。echo
export
MY_VAR="hello"
MY_VAR
export MY_VAR
MY_VAR
简单来说:
- :看所有,或者临时改变环境跑命令。
env
- :看所有,或者看指定的某个。
printenv
- :让Shell变量能被子进程看到。
export
理解这三者的区别,对于编写Shell脚本或者排查程序运行环境问题,是相当关键的。我曾经因为忘记
export
查看环境变量是基础,但更进一步的,我们经常需要根据自己的需求去设置或修改它们。而让这些修改“永久生效”,则是一个更具挑战性也更重要的议题,因为它涉及到不同的作用域和配置文件。
1. 临时设置 (当前Shell会话有效)
最简单的方式就是在终端直接设置:
MY_NEW_VAR="这是一个新的变量" export MY_NEW_VAR
或者更简洁地:
export ANOTHER_VAR="这是另一个变量"
这样设置的变量,只在当前的Shell会话中有效。一旦你关闭终端或者打开一个新的终端窗口,这些变量就消失了。这对于临时测试或者一次性任务来说很方便,但显然不是“永久”的解决方案。
2. 用户级别永久设置 (针对当前用户)
如果你希望某个环境变量对你当前登录的用户始终有效,那么你需要修改用户家目录下的配置文件。最常见的有:
- :对于Bash Shell,这是每次启动新的交互式Shell时都会读取的文件。
~/.bashrc
- :在用户登录时读取(通常包括图形界面登录)。
~/.profile
有时会从~/.bashrc
中被~/.profile
。source
- :如果你使用的是Zsh Shell,那么对应的文件是这个。
~/.zshrc
通常,我会选择在
~/.bashrc
~/.zshrc
export
PATH
# 在~/.bashrc中添加 export PATH="/home/myuser/scripts:$PATH"
这里
$PATH
source ~/.bashrc
3. 系统级别永久设置 (对所有用户有效)
如果某个环境变量需要对系统上的所有用户都生效,那么就需要修改系统级别的配置文件。这通常需要root权限:
- :与
/etc/profile
类似,但对所有用户有效。~/.profile
- :一个非常简洁的文件,每行一个
/etc/environment
,系统启动时会读取。它不执行脚本,只设置变量,因此非常适合设置全局性的、不依赖Shell的变量。KEY="VALUE"
- :对于Bash Shell,所有用户登录时都会读取。
/etc/bash.bashrc
- 目录:这是一个非常推荐的方式。你可以在这个目录下创建自己的
/etc/profile.d/
脚本,比如.sh
,并在其中/etc/profile.d/my_custom_vars.sh
你的变量。系统启动时会自动加载这些脚本,这样可以保持配置的模块化和清晰。export
我个人更倾向于使用
/etc/profile.d/
/etc/profile.d/java_home.sh
# /etc/profile.d/java_home.sh export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" export PATH="$JAVA_HOME/bin:$PATH"
保存后,重启系统或者重新登录用户,这些变量就会生效。
需要注意的是,这些配置文件的加载顺序是有讲究的,不同的Linux发行版和Shell类型可能会有细微差别。一般来说,系统级的配置会先加载,然后是用户级的配置。如果同一个变量在多个地方被设置,后加载的配置会覆盖先加载的。在修改这些文件时,务必小心,备份是个好习惯,避免因为误操作导致系统环境出现问题。我曾经就因为修改了
/etc/profile
PATH
以上就是如何在Linux中查看环境变量?使用env命令列出当前环境变量列表的详细内容,更多请关注其它相关文章!
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。