RHEL重要的环境变量

简介: Linux 系统中的环境变量是用来定义系 统运行环境的一些参数

变量是计算机系统用于保存可变值的数据类型。在 Linux 系统中,变量名称一般都是大 写的,命令则都是小写的,这是一种约定俗成的规范。Linux 系统中的环境变量是用来定义系 统运行环境的一些参数,比如每个用户不同的家目录、邮件存放位置等。可以直接通过变量 名称来提取到对应的变量值。

在 Linux 系 统中一切都是文件,Linux 命令也不例外。那么,在用户执行了一条命令之后,Linux 系统中 到底发生了什么事情呢?简单来说,命令在 Linux 中的执行分为 4 个步骤。

第一步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是绝对 路径则直接执行,否则进入第 2 步继续判断。

第二步:Linux 系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名 称来替换原本的命令名称。

之前在使用 rm 命令删除文件时,Linux 系统都会要求用户确认是否执行删除操作,其实 这就是 Linux 系统为了防止用户误删除文件而特意设置的 rm 别名命令—“rm -i”

[root@rhel-8 ~]# rm initial-setup-ks.cfgrm: remove regular file 'initial-setup-ks.cfg'? y

可以用 alias 命令来创建一个属于自己的命令别名,语法格式为“alias 别名=命令”。若要 取消一个命令别名,则是用 unalias 命令,语法格式为“unalias 别名”。 将当前 rm 命令所被设置的别名取消掉,再删除文件试试:

[root@rhel-8 ~]# rm initial-setup-ks.cfg[root@rhel-8 ~]#

第三步:Bash 解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部 的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤 4 继 续处理。可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令:

[root@rhel-8 ~]# type echoecho is a shell builtin
[root@rhel-8 ~]# type uptimeuptime is /usr/bin/uptime

第四步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作 PATH, 可以简单地把它理解成是“解释器的小助手”,作用是告诉 Bash 解释器待执行的命令可能存 放的位置,然后 Bash 解释器就会乖乖地在这些位置中逐个查找。PATH 是由多个路径值组成 的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到 Bash 解释器对 Linux 命令的查找。

[root@rhel-8 ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@rhel-8 ~]# PATH=$PATH:/root/bin[root@rhel-8 ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin

这里有比较经典的问题:“为什么不能将当前目录(.)添加到 PATH 中呢?”原因是,尽 管可以将当前目录(.)添加到 PATH 变量中,从而在某些情况下可以让用户免去输入命令所 在路径的麻烦。但是,如果黑客在比较常用的公共目录/tmp 中存放了一个与 ls 或 cd 命令同名的木马文件,而用户又恰巧在公共目录中执行了这些命令,那么就极有可能中招了。

所以,作为一名态度谨慎、有经验的运维人员,在接手一台 Linux 系统后一定会在执行 命令前先检查 PATH 变量中是否有可疑的目录。另外,读者从前面的 PATH 变量示例中是否 也感觉到环境变量特别有用呢?我们可以使用 env 命令来查看 Linux 系统中所有的环境变量。

image.png

一个相同的变量会因为用户身份的不同而具有不同的值。例如,使用下述 命令来查看 HOME 变量在不同的用户身份下都有哪些值:

[root@rhel-8 ~]# echo $HOME/root
[root@rhel-8 ~]# su - charlie[charlie@rhel-8 ~]$ echo$HOME/home/charlie

变量是由固定的变量名与用户或系统设置的变量值两部分组成的,我们完全可以自 行创建变量来满足工作需求。例如,设置一个名称为 WORKDIR 的变量,方便用户更轻松地 进入一个层次较深的目录:

[root@rhel-8 ~]# mkdir /home/workdir[root@rhel-8 ~]# WORKDIR=/home/workdir/[root@rhel-8 ~]# cd $WORKDIR[root@rhel-8 workdir]# pwd/home/workdir

但是,这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用:

[root@rhel-8 workdir]# su charlie[charlie@rhel-8 workdir]$ cd$WORKDIR[charlie@rhel-8 ~]$ echo$WORKDIR

如果工作需要,可以使用 export 命令将其提升为全局变量,这样其他用户也就可以使用 它了:

[root@rhel-8 workdir]# export WORKDIR[root@rhel-8 workdir]# su charlie[charlie@rhel-8 workdir]$ cd$WORKDIR[charlie@rhel-8 workdir]$ pwd/home/workdir

后续要是不使用这个变量了,则可执行 unset 命令把它取消掉:

[charlie@rhel-8 workdir]$ unset WORKDIR
[charlie@rhel-8 workdir]$

直接在终端设置的变量能够立即生效,但在重启服务器后就会失效,因此我们需 要将变量和变量值写入到.bashrc 或者.bash_profile 文件中,以确保永久能使用它们。

相关文章
|
7月前
|
存储 Linux Shell
Linux--环境变量
Linux--环境变量
|
7月前
|
Shell Linux 编译器
【Linux】8. 环境变量
【Linux】8. 环境变量
45 2
|
7月前
|
自然语言处理 Shell Linux
Linux下的环境变量【详解】
Linux下的环境变量【详解】
153 0
|
7月前
|
存储 安全 Linux
『 Linux 』环境变量(上)
『 Linux 』环境变量(上)
|
7月前
|
存储 Linux
『 Linux 』环境变量(下)
『 Linux 』环境变量(下)
|
7月前
Linux4.8、环境变量续
Linux4.8、环境变量续
49 0
|
Linux Shell
CentOS环境变量
CentOS环境变量概述
232 1
|
小程序 Linux Shell
[Linux]环境变量
[Linux]环境变量
|
编译器 Linux Shell
【Linux修炼】9.环境变量(二)
【Linux修炼】9.环境变量(二)
【Linux修炼】9.环境变量(二)
|
Shell Linux
【Linux修炼】9.环境变量(一)
【Linux修炼】9.环境变量(一)
【Linux修炼】9.环境变量(一)