0

0

如何在Linux中查看环境变量?使用env命令列出当前环境变量列表

蓮花仙者

蓮花仙者

发布时间:2025-08-27 08:41:01

|

592人浏览过

|

来源于php中文网

原创

最直接查看Linux环境变量的方法是使用env命令,它会列出当前会话所有环境变量及其值,格式为KEY=VALUE,如PATH和HOME;env还可临时修改环境运行命令,如env -u LD_LIBRARY_PATH执行程序以排除变量干扰;与printenv相比,env更侧重环境管理,printenv专用于查看变量,可指定单个变量输出;export则用于将Shell变量导出为环境变量,使其在子进程中生效;设置环境变量分临时和永久,临时通过export定义,永久需修改配置文件:用户级修改~/.bashrc或~/.profile,系统级修改/etc/profile、/etc/environment或使用/etc/profile.d/下的脚本;修改后需source或重启生效,注意加载顺序与备份以防出错。

如何在linux中查看环境变量?使用env命令列出当前环境变量列表

在Linux中查看环境变量,最直接的方法就是使用

env
命令。它会一股脑儿地把当前会话中所有环境变量及其对应的值列出来,让你对系统和程序运行环境有个基础的认识。当然,还有
printenv
echo
,但
env
无疑是最全面、最常用的一个起点。

说实话,我个人在日常工作中,遇到需要查看环境变量的场景,第一反应往往就是敲下

env
。它就像一个快照,瞬间把当前Shell进程能“感知”到的所有环境信息都摆在你面前。

你只需在终端输入:

env

然后回车,你就会看到一长串的输出,每一行都遵循

KEY=VALUE
的格式。比如,你可能会看到
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
,这告诉你的Shell去哪里找可执行文件;或者
HOME=/home/youruser
,指明你的家目录在哪。

这个命令的妙处在于,它不仅能展示当前环境,还能让你在一个“干净”或“定制化”的环境下运行其他命令。比如,如果你想在一个没有特定

LD_LIBRARY_PATH
的环境下测试一个程序,可以这样做:

env -u LD_LIBRARY_PATH your_program

这会临时取消

LD_LIBRARY_PATH
这个变量,然后运行
your_program
。这种操作在调试一些依赖问题时特别有用,避免了环境污染。我记得有一次就是通过这种方式,定位到一个程序因为加载了错误的库文件而崩溃的问题。

Linux环境变量究竟是什么?它们为何如此重要?

要理解

env
命令的输出,首先得搞清楚这些“环境变量”到底是个啥。在我看来,它们就像是操作系统给每个运行中的程序(或者说进程)贴上的一张张便签,上面写着各种配置信息、路径指引或者一些状态声明。这些信息不是硬编码在程序里的,而是由外部环境提供,程序可以读取并根据它们来调整自己的行为。

举个例子,

PATH
变量,它定义了一系列目录,当你输入一个命令(比如
ls
grep
)时,Shell就会按照
PATH
里列出的顺序,去这些目录里找对应的可执行文件。如果没有
PATH
,你每次运行命令都得输入完整的路径,比如
/bin/ls
,那简直是灾难。

再比如

LANG
LC_ALL
,它们决定了你的系统和程序显示语言、日期格式、货币符号等本地化信息。对我这种偶尔需要在多语言环境下工作的人来说,这些变量的准确性直接影响到工作效率。还有
HOME
变量,程序经常需要知道用户的主目录在哪里,比如保存配置文件或者读取用户数据,
HOME
就提供了这个入口。

所以说,环境变量的重要性不言而喻。它们提供了一种灵活且标准化的方式,让程序能够适应不同的用户、不同的系统配置,而无需修改程序本身的源代码。它们是操作系统和应用程序之间沟通的桥梁,也是Linux系统强大灵活性的一个体现。

env、printenv和export,这几个命令到底有何区别

初学者常常会对

env
printenv
export
这几个命令感到困惑,它们看起来都和环境变量有关,但实际功能却各有侧重。我个人理解,它们之间的差异主要体现在“作用”和“范围”上。

env
命令,我们前面已经提到了,它主要有两个用途:

  1. 显示当前环境:不带任何参数时,它会列出当前Shell进程的所有环境变量。这是它最常用的功能。
  2. 在特定环境中运行命令:你可以通过
    env
    命令来修改或清理某些环境变量,然后在这个修改过的环境中运行另一个命令。比如
    env VAR=value command
    。它会创建一个新的环境,运行
    command
    ,但不会改变当前Shell的环境。

printenv
命令则更专注于“打印”环境变量。

  • 如果你不带任何参数运行
    printenv
    ,它通常会显示与
    env
    命令相似的结果,即当前Shell的所有环境变量。
  • 但它的一个特点是,你可以指定要查看的某个特定变量,比如
    printenv PATH
    ,它只会输出
    PATH
    变量的值。这在你想快速检查某个特定变量时非常方便,比
    echo $PATH
    更“正式”一些,也更不容易出错(因为
    echo
    可能会对一些特殊字符进行解释)。

export
命令则完全不同,它的核心作用是将一个Shell变量提升为环境变量。在Shell中,你可以定义很多变量,比如
MY_VAR="hello"
。但这个
MY_VAR
默认只在当前Shell进程内部可见,子进程是看不到的。当你执行
export MY_VAR
之后,
MY_VAR
就成了一个环境变量,任何从当前Shell启动的子进程都能继承并访问到它。

简单来说:

  • env
    :看所有,或者临时改变环境跑命令。
  • printenv
    :看所有,或者看指定的某个。
  • export
    :让Shell变量能被子进程看到。

理解这三者的区别,对于编写Shell脚本或者排查程序运行环境问题,是相当关键的。我曾经因为忘记

export
一个变量,导致子进程一直拿不到我想要的值,排查了半天,最后才发现是这个小细节。

音剪
音剪

喜马拉雅旗下的一站式AI音频创作平台,强大的在线剪辑能力,帮你轻松创作优秀的音频作品

下载

如何设置或修改Linux环境变量,并让它们永久生效?

查看环境变量是基础,但更进一步的,我们经常需要根据自己的需求去设置或修改它们。而让这些修改“永久生效”,则是一个更具挑战性也更重要的议题,因为它涉及到不同的作用域和配置文件。

1. 临时设置 (当前Shell会话有效)

最简单的方式就是在终端直接设置:

MY_NEW_VAR="这是一个新的变量"
export MY_NEW_VAR

或者更简洁地:

export ANOTHER_VAR="这是另一个变量"

这样设置的变量,只在当前的Shell会话中有效。一旦你关闭终端或者打开一个新的终端窗口,这些变量就消失了。这对于临时测试或者一次性任务来说很方便,但显然不是“永久”的解决方案。

2. 用户级别永久设置 (针对当前用户)

如果你希望某个环境变量对你当前登录的用户始终有效,那么你需要修改用户家目录下的配置文件。最常见的有:

  • ~/.bashrc
    :对于Bash Shell,这是每次启动新的交互式Shell时都会读取的文件。
  • ~/.profile
    :在用户登录时读取(通常包括图形界面登录)。
    ~/.bashrc
    有时会从
    ~/.profile
    中被
    source
  • ~/.zshrc
    :如果你使用的是Zsh Shell,那么对应的文件是这个。

通常,我会选择在

~/.bashrc
(或
~/.zshrc
)中添加
export
语句。例如,我想把一个自定义的脚本目录添加到
PATH
中,我会这样写:

# 在~/.bashrc中添加
export PATH="/home/myuser/scripts:$PATH"

这里

$PATH
会保留原有的路径,然后把我的新路径添加到前面。修改完文件后,你需要让Shell重新加载配置,可以执行
source ~/.bashrc
或者直接关闭并重新打开终端。

3. 系统级别永久设置 (对所有用户有效)

如果某个环境变量需要对系统上的所有用户都生效,那么就需要修改系统级别的配置文件。这通常需要root权限:

  • /etc/profile
    :与
    ~/.profile
    类似,但对所有用户有效。
  • /etc/environment
    :一个非常简洁的文件,每行一个
    KEY="VALUE"
    ,系统启动时会读取。它不执行脚本,只设置变量,因此非常适合设置全局性的、不依赖Shell的变量。
  • /etc/bash.bashrc
    :对于Bash Shell,所有用户登录时都会读取。
  • /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
混乱,花了不少时间才修复回来,那段经历真是记忆犹新。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

703

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

294

2023.06.30

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

776

2023.07.05

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

573

2023.07.06

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

545

2023.07.20

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

297

2023.07.20

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

381

2023.07.25

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号