在 Linux 系统中,环境变量起着至关重要的作用,它们犹如隐藏在系统背后的 “魔法指令”,掌控着诸多程序的运行路径、配置信息等关键要素。尤其在 shell 脚本编写时,巧妙运用环境变量,能让脚本如虎添翼,极大提升效率。接下来就为大家详细介绍 30 个常用的系统环境变量及其使用方式。
一、PATH
这可能是最广为人知的环境变量之一。它定义了系统在哪些目录下查找可执行文件。例如,当你在终端输入一个命令(如 ls)时,系统就会按照 PATH 变量所列出的目录顺序,依次查找名为 ls 的可执行文件。
使用示例:
在 shell 脚本中,如果要调用一个不在当前目录下的自定义脚本或工具,确保其所在目录已添加到 PATH 中,就可以直接使用命令调用,无需输入完整路径。假设你有个自定义脚本 myscript.sh 在 /home/user/scripts 目录下,将该目录添加到 PATH(export PATH=$PATH:/home/user/scripts)后,就能在任意目录下直接运行 myscript.sh。
二、HOME
指向当前用户的主目录。这在很多操作中都极为实用,比如保存用户的配置文件、个人数据等。在脚本中需要访问用户特定的配置文件时,就可以使用 $HOME/.config/filename 这样的路径,确保在不同用户下都能正确定位到对应的配置文件,增强脚本的通用性。
三、SHELL
指定当前用户所使用的 shell 程序路径,如 /bin/bash 或 /bin/zsh 等。了解这个变量有助于在脚本中根据不同 shell 特性进行兼容性处理。
使用示例:
#通过判断 SHELL 变量,脚本可以针对不同 shell 执行差异化代码。
if [ "$SHELL" = "/bin/bash" ];
then
echo "Using bash shell";
fi
四、USER
保存当前用户名,在需要识别操作主体时很有用。记录操作日志时,可以加上用户名信息,echo "User $USER executed the script at $(date)" >> log.txt,方便追踪责任人, 在运行nginx 的服务中,默认情况下nginx 是以nginx 用户运行的,如果我们想修改为当前用户运行,只需要修改nginx.conf 文件中的第一行 user ${USER} 改成这样即可。
五、PWD
代表当前工作目录,随时获取脚本运行时的位置信息。在脚本需要备份当前目录下文件到指定位置时,cp -r $PWD/* /backup/dir,确保备份的源文件路径准确无误。
六、LANG
定义系统的语言环境,影响程序的本地化输出,如显示的菜单、错误信息等语言风格。如果想在脚本中临时切换语言环境输出特定语言的提示信息,export LANG=fr_FR.UTF-8 可将语言切换为法语,随后的 echo 等输出就会以法语显示。
七、TERM
表示当前终端类型,像 xterm、vt100 等。一些需要与终端交互的程序依赖此变量来适配不同终端特性。在运行基于文本界面的交互式程序时,它能确保程序按终端能力正确显示格式,如 vim 编辑器会根据 TERM 值优化显示效果。
八、PS1
用于定制命令行提示符样式,可添加用户名、主机名、当前目录等信息,让提示符更具辨识度。export PS1='[\u@\h \w]\$ ',会让提示符显示为 [用户名@主机名 当前目录]$ 形式,方便用户随时知晓所处环境。
九、HOSTNAME
存放当前主机的名称,在网络配置、分布式系统操作中有广泛应用。在集群环境下,脚本需要区分不同节点执行不同任务时,if [ "$HOSTNAME" = "node1" ]; then start_service1; fi,根据主机名精准调度。
十、MAIL
指向用户的邮件收件箱文件路径,与邮件相关程序联动,比如邮件客户端可借此找到收件箱。若有脚本监控邮件状态,可通过检查 MAIL 路径下文件的变化来判断是否有新邮件到达。
十一、LD_LIBRARY_PATH
指定共享库的搜索路径。当程序运行需要链接外部共享库时,会在此路径下查找。
使用示例:
# 对于自行编译安装的软件,其依赖的特殊库在非标准位置时,确保程序运行不报错。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/mylibs
十二、INPUTRC
指向 readline 库的初始化配置文件路径,用于定制命令行输入的快捷键、自动补全等行为。若想在脚本运行时让用户输入更便捷,可修改 INPUTRC 指向的配置文件,添加自定义快捷键,如设置 Ctrl + E 为快速跳到行尾。
十三、HISTSIZE
定义命令历史记录的行数,控制 bash 历史记录保存规模。
使用示例:
export HISTSIZE=1000 # 可将历史记录行数扩展到 1000 条,方便回溯之前执行过的命令。
十四、HISTFILESIZE
与 HISTSIZE 类似,但它决定历史记录文件的最大行数,持久化保存历史记录。
使用示例:
export HISTFILESIZE=2000 # 保障即使多次打开终端,历史命令文件也能留存足够多的有用信息。
十五、TMPDIR
指定临时文件的存放目录,程序运行产生的临时数据都会放在此处。在脚本中创建临时文件时,mktemp -p $TMPDIR tmpfile.XXXXXX,确保临时文件统一管理,便于清理且不占用系统关键空间。
十六、EDITOR
设定默认的文本编辑器,像 vi、nano 等。当需要编辑文本时,系统按此变量调用编辑器。
使用示例:
export EDITOR=vim # 之后运行 git commit 等需要编辑提交信息的命令,就会自动弹出 vim 编辑器。
十七、VISUAL
与 EDITOR 类似,不过更倾向于可视化编辑器,优先级稍高。如果两者都设置,优先使用 VISUAL。
使用示例:
export VISUAL=gedit # 对于习惯图形化编辑的用户,执行相关操作时会打开 gedit 进行文本处理。
十八、TZ
设置系统的时区,保证时间显示符合当地习惯。
使用示例:
export TZ='Asia/Shanghai',将系统时区调整为上海时区,确保 date 等时间相关函数输出正确当地时间。
十九、LESS
定制 less 命令的默认行为,如是否显示行号、语法高亮等。
使用示例:
export LESS='-N -R',让 less 查看文件时默认显示行号且支持彩色语法高亮,提升阅读体验。
二十、GREP_OPTIONS
为 grep 命令设置默认选项,如忽略大小写、显示匹配行上下文等。
使用示例:
export GREP_OPTIONS='-i -C 2' # 后续执行 grep 时都会自动忽略大小写并显示匹配行前后各 2 行上下文。
二十一、MANPATH
定义 man 手册页的搜索路径,方便查找不同软件包的帮助文档。
使用示例:
# 当安装了自定义软件并带有手册页在 /opt/mydoc/man 目录下
# 设置这个变量之后就能通过 man mycommand 查找到对应手册。
export MANPATH=$MANPATH:/opt/mydoc/man
二十二、CPATH
供 C 语言编译器查找头文件的路径,编译 C 程序时必备。对于引入自定义头文件的 C 项目,export CPATH=$CPATH:/home/user/include,确保编译顺利进行。
二十三、CFLAGS
传递给 C 语言编译器的额外编译选项,如优化级别、调试信息等。
使用示例:
export CFLAGS='-O2 -g' # 开启二级优化并添加调试信息,让编译出的程序既高效又便于调试。
二十四、CPPFLAGS
类似 CFLAGS,但主要用于 C++ 编译器,处理 C++ 特定的预处理选项。
使用示例:
export CPPFLAGS='-I/home/user/cpplibs/include' # 指定 C++ 项目额外的头文件搜索路径。
二十五、CXXFLAGS
C++ 编译器的编译标志,是 CFLAGS 在 C++ 语境下的延伸,综合控制编译过程。
使用示例:
export CXXFLAGS='-std=c++11 -Wall' # 启用 C++11 标准并开启所有警告,提升代码质量。
二十六、LDFLAGS
用于指定链接器的选项,如链接库路径、库名称等,在程序最终链接阶段起作用。
使用示例:
export LDFLAGS='-L/home/user/libs -lmylib' # 告知链接器到指定目录查找 mylib 并链接进程序。
二十七、MAKEFLAGS
为 make 命令提供默认参数,优化构建过程,比如并行构建任务数。
使用示例:
export MAKEFLAGS='-j4'? #让 make 在编译大型项目时最多同时运行 4 个任务,加快构建速度。
二十八、SSH_AUTH_SOCK
指向 SSH 认证套接字文件,用于 SSH 密钥认证等安全登录相关操作。在自动化脚本中通过 SSH 连接远程服务器时,确保此变量正确设置,保障密钥认证顺畅,无需重复输入密码。
二十九、DISPLAY
在图形化环境下,指定 X Server 的显示地址,用于图形程序找到显示输出目标。运行图形化应用程序时,如 gedit,若远程连接到服务器且需要图形显示,需正确设置 DISPLAY 环境变量指向本地 X Server。
三十、RANDOM
这是一个特殊的变量,每次引用它都会生成一个 0 - 32767 之间的随机整数,常用于脚本生成随机数场景。
使用示例:
echo $RANDOM % 100 # 可获取一个 0 - 99 之间的随机数,用于模拟抽奖、生成随机端口号等场景。
掌握这些常用的 Linux 系统环境变量,不仅能让日常命令行操作更加得心应手,更能在 shell 脚本编写中充分发挥其强大威力,让脚本更智能、高效、通用。不断实践运用,定能挖掘出更多奇妙用法