首页 > 编程笔记

Linux环境变量配置方法详解

Linux 系统中的程序和脚本都是通过环境变量来获取系统信息、存储数据和配置信息。在 Linux 中,一般通过环境变量配置操作系统的环境,例如提示符、查找命令的路径和用户家目录等,这些系统默认的环境变量的变量名是固定的,因此只能修改其变量的值。

环境变量也称全局变量,环境变量可用于定义 Shell 的运行环境,环境变量可以在配置文件中定义与修改,也可以在命令行中设置,但是命令行中的修改操作在终端重启时就会丢失,因此最好在配置文件中修改(用户家目录的“.Bash_profile“文件或者全局配置“/etc/profile”、“/etc/Bashrc”文件或者“/etc/profile.d”文件中定义)。

注意,环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量。用户自定义变量只在当前的 Shell 中生效,而环境变量会在当前 Shell 和这个 Shell 的所有子 Shell 中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的 Shell 中生效。

查看环境变量的设置可以使用 set 命令,命令如下:

[root@bogon ~]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
......

set 既可以查询所有的变量,也可以查询环境变量,刚刚就是使用 set 命令进行环境变量查询。当然,也可以使用 env 命令进行环境变量的查询,命令如下:

[root@bogon ~]# env
ORBIT_SOCKETDIR=/tmp/orbit-root
HOSTNAME=bogon
GIO_LAUNCHED_DESKTOP_FILE_PID=2846
TERM=xterm
SHELL=/bin/bash
XDG_SESSION_COOKIE=1d9e5f67d8e8ae0368e1911d00000028-1598258960.284271-485945958
HISTSIZE=1000
GTK_RC_FILES=/etc/gtk/gtkrc:/root/.gtkrc-1.2-gnome2
WINDOWID=23068675
USER=root
......

注意,env 和 set 命令的区别是,set 命令可以查看所有变量,而 env 命令只能查看环境变量。


环境变量的删除使用 unset 命令,比如删除环境变量 gender,命令如下:

[root@bogon ~]# unset gender
[root@bogon ~]# env | grep gender


为了方便读者记忆,这里为大家设置了一张表格(表 1),总结了设置环境变量的常用指令及说明。

表 1 环境变量的常用指令及说明
指 令 说 明
echo 查看显示环境变量,变量使用时要加上符号“$”,例如:echo $PATH
export 设置新的环境变量,export 新环境变量名=内容
修改环境变量 修改环境变量没有指令,可以直接使用环境变量名进行修改
env 查看所有环境变量
set 查看本地定义的所有 Shell 变量
unset 删除一个环境变量
readonly 设置只读环境变量

在 Linux 系统中有很多预设的环境变量,但是用户经常使用的却不多。表 2 就是用户可能经常使用的环境变量及操作环境的命令。

表 2 常用环境变量及操作指令
变量及指令 说 明
HOME 当前用户的家目录
PWD 用户当前的工作目录
LANG 标识程序将要使用的默认语言
TERM 用户登录终端的类型
PATH 可执行文件(命令)的搜索路径,即搜寻存放程序的一个目录列表
SHELL 用户登录Shell路径
USER 用户的用户名
PS1 主命令提示符
PS2 次命令提示符
RANDOM 0~32767的随机数
reset 当屏幕崩溃即出现乱码时,重新设置终端的命令
which 定位并显示可执行文件(命令)所在路径的变量

PATH环境变量的设置

PATH 变量的值是用“:”分隔的路径,这些路径就是系统查找命令的路径。当输入一个没有写入路径的程序名时,系统就会到 PATH 变量定义的路径中去寻找是否有可以执行的程序,如果找到则执行,否则会出现“命令没有发现”的错误提示。

查询 PATH 环境变量的命令如下:

[root@bogon ~]# echo $PATH

在进行本教程学习时所使用的系统中,PATH 环境变量的内容如下:

[root@bogon ~]# echo $PATH
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin

可以看出,在输出中有 7 个可供 Shell 用来查找命令和程序。

如果命令或者程序的位置没有放在 PATH 变量中,并且不使用绝对路径,Shell 是没有办法找到指定路径的,会产生错误信息提示。

为了解决应用程序放置可执行文件的目录常常不在 PATH 环境变量所包含的目录中的问题,通常 PATH 变量会包含所有存放应用程序的目录。把新的目录添加到现有的 PATH 变量中是最常用的方法,即无须从头定义,只要在 PATH 中的各个目录之间用冒号隔开,需要引用原来的 PATH 值,然后再给字符串添加新的目录就可以了。

【例 1】在 PATH 环境变量中添加目录。

[root@bogon ~]# echo $PATH
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin
[root@bogon ~]# PATH=$PATH:/demo
[root@bogon ~]# echo $PATH
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin:/demo

优秀文章