2.5 环境变量配置文件

2.5.1 source 命令

先来看看source 命令,这个命令会强制执行脚本中的全部命令,而忽略脚本文件的权限。source 命令主要用于让重新配置的环境变量配置文件强制生效。命令格式如下:

img

img

举一个例子:

img

img

“.”就是source 命令,使用上述哪种方法都是可以的。原来修改了环境变量配置文件,如果想让其生效,则必须注销或重启系统;现在只要使用source 命令,就可以省略注销或重启系统的过程,更加方便。

2.5.2 环境变量配置文件的分类

1.登录时生效的环境变量配置文件

在环境变量配置文件中主要定义了对系统的操作环境生效的系统默认环境变量,如PATH、HISTSIZE、PS1、HOSTNAME 等。如果修改了这些环境变量,而没有保存到环境变量配置文件中,那么,一旦注销或重启系统,这些修改就会失效。还是那句话:“在Linux 系统中,修改要想永久生效,必须写入相应的配置文件中。”当然,我们自己定义的别名虽然不是系统的默认环境变量,但也是用于修改操作环境的,如果要想永久生效,则也要放入相应的环境变量配置文件中。

在Linux 系统登录时主要生效的环境变量配置文件有以下5个:

● /etc/profile。

● /etc/profile.d/*.sh。

● ~/.bash_profile。

● ~/.bashrc。

● /etc/bashrc。

这5个环境变量配置文件(/etc/profile.d/*.sh 是一系列的配置文件)在用户登录过程中会依次生效。不过需要注意,/etc/profile、/etc/profile.d/*.sh 和/etc/bashrc 这3个环境变量配置文件会对所有的登录用户生效,而~/.bash_profile 和~/.bashrc 这两个环境变量配置文件只会对当前用户生效(因为在每个用户的家目录中都有这两个文件)。这些环境变量配置文件是依靠如图2-4所示的顺序被调用的。

img

图2-4 环境变量配置文件调用流程

登录过程分为“有用户登录过程”和“没有用户登录过程”两种。其中,“有用户登录过程”主要指登录过程需要输入用户名和密码,这时获取的Shell 就是Login Shell,绝大多数的Shell 获取都是这种过程;“没有用户登录过程”指的就是在用户登录时不需要输入用户名和密码,如在当前Shell 中开启子Shell,这种情况比较少见。下面分别分析一下这两种Shell 的获取情况。

1)有用户登录过程的Shell 获取

先来看看“有用户登录过程”的Shell 获取方式,这是最常见的情况,在图2-4中,用实线描述这种登录情况。

● 在用户登录过程中,先调用/etc/profile 文件。

在这个环境变量配置文件中会定义如下默认环境变量。

- USER 变量:根据登录的用户给这个变量赋值(让USER 变量的值是当前用户)。

- LOGNAME 变量:根据USER 变量的值给这个变量赋值。

- MAIL 变量:根据登录的用户来定义用户的邮箱为/var/spool/mail/用户名。

- PATH 变量:定义了基本的PATH 变量中的值。

- HOSTNAME 变量:根据主机名给这个变量赋值。

- HISTSIZE 变量:定义历史命令的保存条数。

- umask:定义umask 默认权限。注意:/etc/profile 文件中的umask 权限是在“有用户登录过程(输入了用户名和密码)”时才会生效的。

- 调用/etc/profile.d/*.sh 文件,也就是调用/etc/profile.d/目录下所有以.sh 结尾的文件。

● 由/etc/profile 文件调用/etc/profile.d/*.sh 文件。

在这个目录中,所有以.sh 结尾的文件都会被/etc/profile 文件调用,这里最常用的就是lang.sh 文件,而这个文件又会调用/etc/locale.conf 文件(在CentOS 6.x 中,这个默认语系文件是/etc/sysconfig/i18n)。对/etc/locale.conf 文件眼熟吗?就是前面讲过的默认语系配置文件。

● 由/etc/profile 文件接着调用~/.bash_profile 文件。

~/.bash_profile 文件就没有那么复杂了,在这个文件中主要实现两个功能。

- 调用~/.bashrc 文件。

- 在PATH 变量后面加入“:$HOME/bin”这个目录。也就是说,如果我们在自己的家目录中建立了bin 目录,然后把自己的脚本放入“~/bin”目录中,则可以直接执行脚本,而不用通过目录执行了。

● 由~/.bash_profile 文件调用~/.bashrc 文件。

在~/.bashrc 文件中主要实现两个功能。

- 定义默认别名。

- 调用/etc/bashrc 文件。

● 由~/.bashrc 文件调用/etc/bashrc 文件。

在/etc/bashrc 文件中主要定义了如下内容。

PS1变量:用于设置命令提示符。如果想要永久修改命令提示符,就要在这个文件中进行设置。

这5个环境变量配置文件会被依次调用。如果是我们自己定义的环境变量,则应该放入哪个文件中呢?如果你的修改是打算对所有用户生效的,那么可以放入/etc/profile 文件中;如果你的修改只是给自己使用的,那么可以放入~/.bash_profile 或~/.bashrc 文件中。

但是,如果误删除了这些环境变量配置文件,如删除了/etc/bashrc 或~/.bashrc 文件,那么这些文件中的配置就会失效(~/.bashrc 文件会调用/etc/bashrc 文件),命令提示符就会变成下面这样:

img

因为在/etc/bashrc 文件中会设置PS1变量,所以,如果这个文件不存在或没有被调用,那么命令提示符就会是Bash 最基本的样子。

2)没有用户登录过程的Shell 获取

再来看看“没有用户登录过程”的Shell 获取方式,这种方式相对简单多了。

● 在用户登录后,直接调用~/.bashrc 文件。

在~/.bashrc 文件中主要实现了两个功能。

- 定义默认别名。

- 调用/etc/bashrc 文件。

● 由~/.bashrc 文件调用/etc/bashrc 文件。

/etc/bashrc 文件比较复杂,在“有用户登录过程”调用时只生效了PS1这一个环境变量,剩余的绝大多数变量是在“没有用户登录过程”调用时生效的。在“没有用户登录过程”调用时,在/etc/bashrc 文件中主要定义了如下内容。

- umask:定义umask 默认权限。

- PATH 变量:会给PATH 变量追加值。

- PS1变量:用于设置命令提示符。

- 调用/etc/profile.d/*.sh 文件。

2.注销时生效的环境变量配置文件

在用户退出登录时,只会调用一个环境变量配置文件,就是~/.bash_logout。这个文件默认没有写入任何内容。但是,如果希望在用户退出登录时执行一些操作,如清除历史命令、备份某些数据,就可以把命令写入这个文件中。

3.其他的环境变量配置文件

还有一些环境变量配置文件,最常见的是~/bash_history 文件,也就是历史命令保存文件。这个文件已经讲过了,在这里只是把它归入“环境变量配置文件”一节而已。

2.5.3 Shell 登录信息

1./etc/issue 文件

在登录tty1~tty6这6个本地终端时,会出现几行欢迎信息。这些欢迎信息是保存在哪里的?可以修改吗?当然可以修改。这些欢迎信息保存在/etc/issue 文件中,查看一下这个文件,命令如下:

img
img

系统在每次登录时,会依赖这个文件的配置显示欢迎信息。在/etc/issue 文件中允许使用转义符调用相应信息,其支持的转义符可以通过man agetty 命令查询,如表2-13所示。

表2-13 /etc/issue 文件支持的转义符

img

在本地终端登录时,因为有tty1~tty6这6个本地终端(可以通过Alt+F1~F6组合键切换),有时我们会忘记在哪个本地终端中,所以笔者习惯加入“\l”选项,例如:

img

这样,在本地终端登录时,就可以看到到底在哪个本地终端中。

2./etc/issue.net 文件

配置/etc/issue 文件会在本地终端登录时显示欢迎信息。如果远程登录(如ssh 远程登录,或者Telnet 远程登录)需要显示欢迎信息,则需要配置/etc/issue.net 文件。在使用这个文件时有两点需要注意。

● 在/etc/issue 文件中支持的转义符在/etc/issue.net 文件中不能使用。

● ssh 远程登录是否显示/etc/issue.net 文件中设置的欢迎信息,是由ssh 的配置文件决定的。

如果需要ssh 远程登录显示/etc/issue.net 文件中设置的欢迎信息,那么,首先需要修改ssh的配置文件/etc/ssh/sshd_config,加入如下内容:

img

这样,在ssh 远程登录时,也可以显示欢迎信息,只是不能再识别“\d”和“\l”等转义符。

3./etc/motd 文件

在/etc/motd 文件中也设置了欢迎信息,这个文件和/etc/issue 及/etc/issue.net 文件的区别是:/etc/issue 及/etc/issue.net 文件是用于在用户登录之前显示欢迎信息的;而/etc/motd 文件是用于在用户输入用户名和密码,正确登录之后显示欢迎信息的。在/etc/motd 文件中设置的欢迎信息,不论是本地登录,还是远程登录,都可以显示。

大家需要注意,在国外曾经有黑客入侵服务器,因在服务器上显示的欢迎信息是“welcome…”而免于处罚的案例。所以,我们虽然一直是按照“欢迎信息”进行讲解的,但是在这里其实应该写入一些“警告信息”,如禁止非法用户登录之类的信息。

2.5.4 定义Bash 快捷键

还记得在Shell 中有很多快捷键吗?先来查看一下,命令如下:

img

“-a”选项用于查看系统中所有可用的快捷键。可以看到,快捷键Ctrl+C 用于强制中止,快捷键Ctrl+D 用于中止输入。那么,这些快捷键可以更改吗?当然可以,只需执行以下命令即可。

img

例如:

img
img