環(huán)境調(diào)優(yōu)
本節(jié)介紹初級管理(LPIC-1)考試 102 的 1.111.2 主題的內(nèi)容。這個主題的權(quán)值為 3。
在本節(jié)中,學習如何對用戶環(huán)境進行調(diào)優(yōu),包括以下任務(wù):
- 設(shè)置和取消環(huán)境變量
- 為新用戶帳戶維護框架目錄
- 設(shè)置命令搜索路徑
設(shè)置和取消環(huán)境變量
在創(chuàng)建新用戶時,常常根據(jù)自己的需要對許多變量進行初始化。這些變量常常是在為新用戶提供的配置文件中設(shè)置的,比如 .bash_profile 和 .bashrc,也可以在系統(tǒng)范圍的配置文件 /etc/profile 和 /etc/bashrc 中設(shè)置。清單 14 演示如何在 Ubuntu 7.04 系統(tǒng)上的 /etc/profile 中設(shè)置 PS1 系統(tǒng)提示。第一個 if 語句檢查是否設(shè)置了 PS1 變量(這表示一個交互式 shell),因為非交互式 shell 不需要提示。第二個 if 語句檢查是否設(shè)置了 BASH 環(huán)境變量。如果設(shè)置了,那么設(shè)置一個復(fù)雜的提示和源 /etc/bash.bashrc(注意點號)。如果沒有設(shè)置 BASH 變量,對根進行檢查(id=0),并將提示相應(yīng)地設(shè)置為 # 或 $。
清單 14. 設(shè)置環(huán)境變量
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、腳本、編程和編譯” 詳細描述了設(shè)置和取消環(huán)境變量所用的命令,還介紹了如何以及何時使用各個配置文件。
在為用戶定制環(huán)境時,要注意兩個重要問題:
- 系統(tǒng)只在用戶登錄時讀取 /etc/profile,所以在創(chuàng)建每個新 shell 時并不執(zhí)行它。
- 新 shell 并不繼承函數(shù)和別名。因此,常常要根據(jù)自己的需要在 /etc/bashrc 中或用戶自己的配置文件中設(shè)置環(huán)境變量。
除了系統(tǒng)配置文件 /etc/profile 和 /etc/bashrc 之外,Linux Standard Base(LSB)還指定其他腳本可以放在 /etc/profile.d 目錄中。當創(chuàng)建交互式登錄 shell 時,會執(zhí)行這些腳本。它們提供了將不同程序的定制設(shè)置分隔開的簡便方法。清單 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
|
請記住,應(yīng)該常常對配置文件中設(shè)置的變量執(zhí)行 export ;否則,它們不會對新 shell 中運行的命令生效。
為新用戶維護框架目錄
在 “添加和刪除用戶和組” 一節(jié)中,您學習了如何為用戶創(chuàng)建和填充新的主目錄。這個新目錄的內(nèi)容來自以 /etc/skel 為根的子目錄樹。清單 16 顯示 Fedora 7 系統(tǒng)上這個子樹中的文件。注意,大多數(shù)文件以點號開頭,所以需要用 -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 顯示以上系統(tǒng)中的 /etc/skel/.bashrc。在不同的版本或不同的發(fā)行版上,這個文件可能不一樣,但是它說明了默認用戶設(shè)置是如何建立的。
清單 17. Fedora 7 上的 /etc/skel/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
|
可以看到,首先執(zhí)行全局 /etc/bashrc,然后可以添加用戶特有的指令。清單 18 給出 /etc/bashrc 中的一部分,它執(zhí)行 /etc/profile.d 中的 .sh 腳本。
清單 18. 執(zhí)行 /etc/profile.d 中的 .sh 腳本
for i in /etc/profile.d/*.sh; do
if [ -r "$i" ]; then
. $i
fi
done
unset i
|
注意,在循環(huán)之后取消了變量 i。
設(shè)置命令搜索路徑
默認的配置文件常常包含本地功能或安裝的產(chǎn)品的 PATH 變量??梢栽?/etc/skel 中的骨架文件中設(shè)置這些變量,或者通過修改 /etc/profile 和 /etc/bashrc 或在 /etc/profile.d 中創(chuàng)建文件來設(shè)置這些變量。如果修改了系統(tǒng)文件,那么在任何系統(tǒng)更新之后,都要檢查您的修改是否保持不變。清單 19 演示如何在現(xiàn)有的 PATH 之前或之后添加一個新目錄 /opt/productxyz/bin。
清單 19. 添加路徑目錄
PATH="$PATH${PATH:+:}/opt/productxyz/bin"
PATH="/opt/productxyz/bin${PATH:+:}$PATH"
|
表達式 ${PATH:+:} 不是必需的;如果 PATH 變量未設(shè)置或者為空,它就插入一個路徑分隔符(冒號)。
|