环境调优
本节介绍初级管理(LPIC-1)考试 102 的 1.111.2 主题的内容。这个主题的权值为 3。
在本节中,学习如何对用户环境进行调优,包括以下任务:
- 设置和取消环境变量
- 为新用户帐户维护框架目录
- 设置命令搜索路径
设置和取消环境变量
在创建新用户时,常常根据自己的需要对许多变量进行初始化。这些变量常常是在为新用户提供的配置文件中设置的,比如 .bash_profile 和 .bashrc,也可以在系统范围的配置文件 /etc/profile 和 /etc/bashrc 中设置。清单 14 演示如何在 Ubuntu 7.04 系统上的 /etc/profile 中设置 PS1 系统提示。第一个 if 语句检查是否设置了 PS1 变量(这表示一个交互式 shell),因为非交互式 shell 不需要提示。第二个 if 语句检查是否设置了 BASH 环境变量。如果设置了,那么设置一个复杂的提示和源 /etc/bash.bashrc(注意点号)。如果没有设置 BASH 变量,对根进行检查(id=0),并将提示相应地设置为 # 或 $。
清单 14. 设置环境变量
if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1=‘\u@\h:\w\$ ‘
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1=‘# ‘
else
PS1=‘$ ‘
fi
fi
fi
|
教程 “LPI 102 考试准备:shell、脚本、编程和编译” 详细描述了设置和取消环境变量所用的命令,还介绍了如何以及何时使用各个配置文件。
在为用户定制环境时,要注意两个重要问题:
- 系统只在用户登录时读取 /etc/profile,所以在创建每个新 shell 时并不执行它。
- 新 shell 并不继承函数和别名。因此,常常要根据自己的需要在 /etc/bashrc 中或用户自己的配置文件中设置环境变量。
除了系统配置文件 /etc/profile 和 /etc/bashrc 之外,Linux Standard Base(LSB)还指定其他脚本可以放在 /etc/profile.d 目录中。当创建交互式登录 shell 时,会执行这些脚本。它们提供了将不同程序的定制设置分隔开的简便方法。清单 15 给出一个示例。
清单 15. Fedora 7 上的 /etc/profile.d/vim.sh
[if [ -n "$BASH_VERSION" -o -n "$KSH_VERSION" -o -n "$ZSH_VERSION" ]; then
[ -x //usr/bin/id ] || return
[ `//usr/bin/id -u` -le 100 ] && return
# for bash and zsh, only if no alias is already set
alias vi >/dev/null 2>&1 || alias vi=vim
fi
|
请记住,应该常常对配置文件中设置的变量执行 export ;否则,它们不会对新 shell 中运行的命令生效。
为新用户维护框架目录
在 “添加和删除用户和组” 一节中,您学习了如何为用户创建和填充新的主目录。这个新目录的内容来自以 /etc/skel 为根的子目录树。清单 16 显示 Fedora 7 系统上这个子树中的文件。注意,大多数文件以点号开头,所以需要用 -a 选项才能在目录列表中列出它们。-R 选项递归地列出子目录,-L 选项会显示任何符号链接。
清单 16. Fedora 7 上的 /etc/skel
[ian@lyrebird ~]$ ls -aRL /etc/skel
/etc/skel:
. .. .bash_logout .bash_profile .bashrc .emacs .xemacs
/etc/skel/.xemacs:
. .. init.el
|
除了 Bash shell 所需的 .bash_logout、.bash_profile 和 .bashrc 之外,这个示例还包含 emacs 和 xemacs 编辑器的配置文件信息。如果需要了解各个配置文件的功能,请参考教程 “LPI 102 考试准备:shell、脚本、编程和编译。
清单 17 显示以上系统中的 /etc/skel/.bashrc。在不同的版本或不同的发行版上,这个文件可能不一样,但是它说明了默认用户设置是如何建立的。
清单 17. Fedora 7 上的 /etc/skel/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
|
可以看到,首先执行全局 /etc/bashrc,然后可以添加用户特有的指令。清单 18 给出 /etc/bashrc 中的一部分,它执行 /etc/profile.d 中的 .sh 脚本。
清单 18. 执行 /etc/profile.d 中的 .sh 脚本
for i in /etc/profile.d/*.sh; do
if [ -r "$i" ]; then
. $i
fi
done
unset i
|
注意,在循环之后取消了变量 i。
设置命令搜索路径
默认的配置文件常常包含本地功能或安装的产品的 PATH 变量。可以在 /etc/skel 中的骨架文件中设置这些变量,或者通过修改 /etc/profile 和 /etc/bashrc 或在 /etc/profile.d 中创建文件来设置这些变量。如果修改了系统文件,那么在任何系统更新之后,都要检查您的修改是否保持不变。清单 19 演示如何在现有的 PATH 之前或之后添加一个新目录 /opt/productxyz/bin。
清单 19. 添加路径目录
PATH="$PATH${PATH:+:}/opt/productxyz/bin"
PATH="/opt/productxyz/bin${PATH:+:}$PATH"
|
表达式 ${PATH:+:} 不是必需的;如果 PATH 变量未设置或者为空,它就插入一个路径分隔符(冒号)。
|