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")
......
[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),总结了设置环境变量的常用指令及说明。
指 令 | 说 明 |
---|---|
echo | 查看显示环境变量,变量使用时要加上符号“$”,例如:echo $PATH |
export | 设置新的环境变量,export 新环境变量名=内容 |
修改环境变量 | 修改环境变量没有指令,可以直接使用环境变量名进行修改 |
env | 查看所有环境变量 |
set | 查看本地定义的所有 Shell 变量 |
unset | 删除一个环境变量 |
readonly | 设置只读环境变量 |
在 Linux 系统中有很多预设的环境变量,但是用户经常使用的却不多。表 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
为了解决应用程序放置可执行文件的目录常常不在 PATH 环境变量所包含的目录中的问题,通常 PATH 变量会包含所有存放应用程序的目录。把新的目录添加到现有的 PATH 变量中是最常用的方法,即无须从头定义,只要在 PATH 中的各个目录之间用冒号隔开,需要引用原来的 PATH 值,然后再给字符串添加新的目录就可以了。如果命令或者程序的位置没有放在 PATH 变量中,并且不使用绝对路径,Shell 是没有办法找到指定路径的,会产生错误信息提示。
【例 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