研究学习 Linux Shell 的系列文章.
这篇文章主要以 CentOS 为例讲环境变量的配置文件.
1. 环境变量配置文件简介
变量类型:
- 用户自定义变量(本地变量)
- 环境变量:定义每个用户的操作环境.
- 预定义变量
- 位置参数变量
环境变量在命令行中修改只能临时生效,把它写入配置文件才能永久生效. PATH、HISTSIZE、PS1、HOSTNAME 等环境变量写入对应的环境配置文件,在登陆 Shell 时自动加载生效.
source
命令$ source 配置文件
或
$ . 配置文件
修改配置文件后,必须注销重新登陆才能生效.
使用source
命令可以不用重新登陆,立即激活配置文件
环境变量配置文件中主要是定义对系统操作环境生效的系统默认环境变量,如 PATH 等. 不同发行版,配置文件和加载过程有所区别.
CentOS 中登陆时加载的配置文件
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
2. 环境变量配置文件的功能
2.1 环境变量配置文件的加载过程
CentOS 中环境变量配置文件的加载过程可以用下图概括,它有两种方式:
1. 普通的正常登陆过程
输入用户名和密码后,系统从 /etc/profile
文件开始,先按照路线
1
◯
\text{\textcircled 1}
1◯,后按照
2
◯
\text{\textcircled 2}
2◯,最终进入命令提示符界面:
2. 非登陆过程:例如 su 命令
su 命令切换用户后,系统从 /etc/bashrc
文件开始,先按照路线
1
◯
\text{\textcircled 1}
1◯,后按照
2
◯
\text{\textcircled 2}
2◯,最终进入命令提示符界面:
2.2 环境变量配置文件的具体作用
1. /etc/profile
的作用:
- 定义环境变量:
- USER 变量
- LOGNAME 变量
- MAIL 变量:
- PATH 变量:
- HOSTNAME 变量:
- HISTSIZE 变量:
- umask:
- 调用
/etc/profile.d/*.sh
文件
53 行将之前定义的变量声明为环境变量:
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL # line 53
59行 ~ 63行设置系统默认权限:
# By default, we want umask to get set. This sets it for login shell
# Current threshold for system reserved uid/gids is 200
# You could check uidgid reservation validity in
# /usr/share/doc/setup-*/uidgid file
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
umask # 查看系统默认权限
注意:
- 文件最高权限为 666
- 目录最高权限为 777
- 权限不能使用数字进行换算,而必须使用字母
- umask 定义的权限,时系统默认权限中准备丢弃的权限
rw-rw-rw- # 666 ----w--w- # 022 = rw-r--r-- # 644
rw-rw-rw- # 666 ----wx-wx # 033 = rw-r--r-- # 644
rwxrwxrwx # 777 ----w--w- # 022 = rwxr-xr-x # 755
65行 ~ 73行 调用 /etc/profile.d/*.sh
文件
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
unset i
unset -f pathmunge
[user@centos ~]# ls /etc/profile.d/
256term.csh abrt-console-notification.sh colorgrep.csh colorls.csh csh.local lang.sh less.sh vim.csh which2.csh
256term.sh bash_completion.sh colorgrep.sh colorls.sh lang.csh less.csh sh.local vim.sh which2.sh
[user@centos ~]# cat /etc/locale.conf
LANG="en_US.UTF-8"
2. ~/.bash_profile
的作用
- 调用
~/.bashrc
文件 - 在 PATH 变量后面加入了 “:$HOME/bin” 这个目录
3. ~/.bashrc
的作用
- 定义默认别名
- 调用
/etc/bashrc
4. /etc/bashrc
的作用
- if PS1 变量不存在,则定义 PS1 变量值:12 行 ~ 49行
- if not a login shell:51 行 ~ 91行
- umask
- PATH 变量
- 调用
/etc/profile.d/*.sh
文件
在上述配置文件添加自定义环境变量设置均可生效,一般在
~/.bashrc
文件中修改设置.
2.1 其它的环境变量配置文件
1. ~/.bash_logout
的作用
在注销当前 Shell 时调用,默认为空,可自行添加命令,例如清除历史命令:history -c
.
2. .bash_history
保存历史命令,与 history
命令有一定差异
3. /etc/issue
:本地终端欢迎信息
- 登陆之前即显示
- 远程工具不生效
转义符 | 作用 |
---|---|
\d | 显示当前系统日期 |
\s | 显示操作系统名称 |
\l | 显示登陆的终端号,这个比较常用 |
\m | 显示硬件体系结构,如i386、i686等 |
\n | 显示主机名 |
\o | 显示域名 |
\r | 显示内核版本 |
\t | 显示当前系统时间 |
\u | 显示当前登陆用户的序列号 |
4. /etc/issue.net
:远程终端欢迎信息
- 登陆之前即显示
- 转义符在
/etc/issue.net
文件中不能使用 - 是否显示此欢迎信息,由 ssh的配置文件
/etc/ssh/sshd_config
决定,加入 “Banner /etc/issue.net” (默认123 行) 行才能显示(记得重启 SSH 服务)
5. /etc/motd
:终端欢迎信息
- 登陆后欢迎信息
- 不管是本地登陆,还是远程登陆,都可以显示此欢迎信息
建议将欢迎信息写在 /etc/motd
中,建议写成警告信息.