摘要
本章會提供各種軟體套件、虛擬主控台及鍵盤配置的相關資訊。還會介紹 bash、cron 和 logrotate 等軟體元件,因為這些元件較之上一版有所變更或加強。這些元件也許不很重要,但與系統的關係密切,使用者可能想變更它們的預設動作。本章最後一節則會介紹語言與國家特定的設定 (I18N 與 L10N)。
程式 bash、cron、logrotate、locate、ulimit 和 free,對系統管理員和許多使用者而言十分重要。man 頁面和 info 頁面是兩個很有用的指令資訊來源,但並非隨時都能使用。GNU Emacs 是非常普遍而且很好設定的文字編輯器。
Bash 是預設的系統外圍程序。如果以它做為登入外圍程序,可以讀取多種啟始化檔案。Bash 會以它們顯示在清單中的順序來處理。
/etc/profile
~/.profile
/etc/bash.bashrc
~/.bashrc
在 ~/.profile 或 ~/.bashrc 中進行自定設定。為了要確保這些檔案能正確的處理,您必須將基本設定從 /etc/skel/.profile 或 /etc/skel/.bashrc 中複製至使用者的主目錄。建議您在更新後從 /etc/skel 複製設定。請執行下列的外圍程式指令,以避免遺失您調整過的設定。
mv ~/.bashrc ~/.bashrc.old cp /etc/skel/.bashrc ~/.bashrc mv ~/.profile ~/.profile.old cp /etc/skel/.profile ~/.profile
然後個人的調整設定需要從 *.old 檔案再複製回去。
如果您需要按預先定義的時間,在背景中定期自動執行指令,則可以使用 cron 工具。cron 由採用特殊格式的時間表驅動。其中一些表格是由系統提供,使用者也可以視需要撰寫自己的表格。
cron 表格現在位於 /var/cron/tabs。/etc/crontab 做為整個系統的 cron 表格。在時間表格之後、指令之前,輸入要直接執行指令的使用者名稱。在 範例 11.1 「/etc/crontab 中的項目」 中,則是輸入 root。位於 /etc/cron.d 的套件專用表格有相同的格式。請參閱 cron man 頁面 (man cron)。
您不能呼叫 crontab -e 指令來編輯 /etc/crontab。這個檔案必須直接載入編輯器中,然後進行修改和儲存。
有些套件會將外圍程式程序檔安裝至 /etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 及 /etc/cron.monthly 目錄中,由 /usr/lib/cron/run-crons 控制其執行。/usr/lib/cron/run-crons 每隔 15 分鐘會從主表格 (/etc/crontab) 執行一次。這會保證被忽略的程序可以在適當的時間執行。
若要在自定的時間執行 hourly、daily 或其他定期維護程序檔,請定期使用 /etc/crontab 項目移除時戳檔案 (請參閱範例 11.2 「/etc/crontab:移除時戳檔案」,它可以在每個整點前移除 hourly,在每天凌晨的 2:14 移除 daily 等)。
範例 11.2. /etc/crontab:移除時戳檔案¶
59 * * * * root rm -f /var/spool/cron/lastrun/cron.hourly 14 2 * * * root rm -f /var/spool/cron/lastrun/cron.daily 29 2 * * 6 root rm -f /var/spool/cron/lastrun/cron.weekly 44 2 1 * * root rm -f /var/spool/cron/lastrun/cron.monthly
或者,可以將 /etc/sysconfig/cron 中的 DAILY_TIME 設定為 cron.daily 啟動的時間。MAX_NOT_RUN 設定確保日常任務能夠觸發並加以執行,即使使用者在長時間內均未於指定的 DAILY_TIME 開啟電腦。MAX_NOT_RUN 的最大值為 14 天。
為明確起見,日常系統維護工作會配送至不同的程序檔。它們包含在 aaa_base 套件中。例如,/etc/cron.daily 中有 suse.de-backup-rpmdb、suse.de-clean-tmp 或 suse.de-cron-local 元件。
某些系統服務 (精靈) 以及核心本身,會定期將系統狀態與特定事件記錄到記錄檔中。這樣,管理員可以定期檢查某個時間點的系統狀態、找出錯誤或有問題的功能,並用精確的方式來排除它們。這些記錄檔通常以 FHS 所指定的方式儲存於 /var/log,而且會日益增大。logrotate 套件有助於控制這些檔案增大的方式。
使用檔案 /etc/logrotate.conf 來設定 logrotate。尤其 include 規格主要是設定其他要讀取的檔案。產生記錄檔的程式會在 /etc/logrotate.d 中單獨安裝組態檔。例如,套件 apache2 (/etc/logrotate.d/apache2) 與 syslogd (/etc/logrotate.d/syslog) 隨附的檔案。
範例 11.3. /etc/logrotate.conf 的範例¶
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own lastlog or wtmp - we'll rotate them here
#/var/log/wtmp {
# monthly
# create 0664 root utmp
# rotate 1
#}
# system-specific logs may be also be configured here.
logrotate 是透過 cron 來控制,並且每日是經由 /etc/cron.daily/logrotate 來呼叫。
可以快速尋找檔案的 locate 指令,未包含在軟體標準安裝的範圍內。若有需要,請安裝 findutils-locate 套件。updatedb 程序會在每晚自行啟動,或啟動系統後的 15 分鐘左右啟動。
利用 ulimit (user limits) 指令,您可以限制系統資源的使用,並顯示這些限制。ulimit 對於限制應用程式可使用的記憶體特別有用。利用它,可以避免應用程式佔用過多的系統資源,降低作業系統效能,甚至讓系統當機。
ulimit 可以搭配多種選項來使用。若要限制記憶體的使用,請利用 表格 11.1 「ulimit:設定使用者的資源」 中所列的選項。
您可以在 /etc/profile 中設定全系統的項目。在此可建立核心檔案 (供程式設計人員除錯之用)。一般使用者無法增加系統管理員在 /etc/profile 中所指定的值,但可以在 ~/.bashrc 中建立特殊的設定項目。
範例 11.4. ulimit:~/.bashrc 中的設定¶
# Limits maximum resident set size (physical memory): ulimit -m 98304 # Limits of virtual memory: ulimit -v 98304
記憶體配置的單位必須為 KB。如需詳細資訊,請參閱 man bash。
![]() | |
並非所有的外圍程序都支援 ulimit 指示詞。在您根據這些限制的內含設定時,PAM (例如 | |
free 指令顯示系統中總的可用與已用實體記憶體及交換空間,以及核心耗用的緩衝區和快取。可用的 RAM 的概念要回溯到聯合記憶體管理的年代之前。記憶體要物盡其用的口號非常適用於 Linux。所以,Linux 一直致力於平衡快取,而不允許有剩餘或未使用的記憶體。
基本上,核心不會有任何應用程式或使用者資料的的直接知識。相反地,它會在頁面快取中管理應用程式與使用者資料。如果記憶體不足,部份的記憶體資料會寫入交換分割區或檔案中,這部份一開始就能用 mmap 指令的協助來讀取 (請參閱 man mmap)。
核心也可以有其他的快取,例如 slab 快取,網路存取的快取資料會儲存於此處。這可以解釋 /proc/meminfo 中計數器之間的不同。它們大部分 (但非全部) 都可以透過 /proc/slabinfo 來存取。
不過,如果您的目標是要得知目前使用了多少 RAM,請在 /proc/meminfo 中尋找此資訊。
某些 GNU 應用程式 (例如 tar) 不再支援 man 頁面。針對這些指令,請使用 --help 選項來取得 info 頁面的快速綜覽,這些頁面將提供更深入詳盡的說明。info 是 GNU 的超連結文字系統。您可以輸入 infoinfo 來讀取此系統的介紹。您可以輸入 emacs -f info 或直接在主控台中使用 info,以便使用 Emacs 檢視 info 頁面。您也可以使用 tkinfo、xinfo 或說明系統來檢視資訊頁面。
若要閱讀 man 頁面,請輸入 man man_page。如果不同區段中存在同名的 man 頁面,所有的這些 man 頁面都會列出,並會顯示對應的區段號碼。請選取要顯示的那個頁面。如果您未在幾秒內輸入區段號碼,將會顯示第一個 man 頁面。
如果您要將此行為設定為預設系統行為,請在外圍程序啟始化檔案 (例如 ~/.bashrc) 中設定 MAN_POSIXLY_CORRECT=1。
GNU Emacs 是個複雜的工作環境。以下幾個小節包含在 GNU Emacs 啟動時組態檔案的處理情形。更多相關資訊可在 http://www.gnu.org/software/emacs/ 取得。
啟動時,Emacs 會讀取多個檔案,其中包含使用者、系統管理員以及供應商的自定設定或預設組態設定。啟始化檔案 ~/.emacs 會從 /etc/skel 安裝至個別使用者的主目錄。.emacs 接著會讀取 /etc/skel/.gnu-emacs 檔案。如果要自定程式,請將 .gnu-emacs 複製到主目錄 (利用 cp /etc/skel/.gnu-emacs ~/.gnu-emacs 指令),並依照您的需求來設定。
.gnu-emacs 定義 ~/.gnu-emacs-custom 檔案為 自定檔案。如果使用者是使用 Emacs 中的自定選項來進行設定,這些設定會儲存至 ~/.gnu-emacs-custom 中。
透過 SUSE Linux Enterprise Desktop,emacs 套件可將檔案 site-start.el 安裝至目錄 /usr/share/emacs/site-lisp 中。site-start.el 檔案會在啟始化檔案 ~/.emacs 前載入。此外,site-start.el 會確保那些以 Emacs 附加套件來散佈的特定組態檔案皆能自動載入,例如 psgml。此類型的組態檔案也位於 /usr/share/emacs/site-lisp 中,並且會以 suse-start- 為開頭。本地系統管理員可在 default.el 中指定整個系統的設定。
有關這些檔案的詳細資訊可在 Init File 下的 Emacs 資訊檔案中取得:info:/emacs/InitFile。關於如何在需要時停止載入這些檔案的資訊,也可在此找到。
Emacs 的元件分成數個套件:
emacs 基本套件。
emacs-x11 (通常已安裝):具有 X11 支援的程式。
emacs-nox:沒有 X11 支援的程式。
emacs-info:info 格式的線上文件。
emacs-el:以 emacs lisp 編寫的未編譯文件庫檔案。執行期間用不到這類檔案。
需要時可安裝多種附加產品套件:emacs-auctex (LaTeX)、psgml (SGML 與 XML)、gnuserv (用戶端與伺服器作業) 以及其他。
Linux 是多重使用者及多工的作業系統。這些功能的優點即使在獨立的個人電腦系統中一樣令人讚賞。在文字模式中,有六個虛擬主控台可用。使用 Alt+F1 到 Alt+F6 可以在虛擬主控台之間進行切換。第七個主控台保留給 X 使用,第十個主控台可以顯示核心訊息。您可以修改 /etc/inittab 檔案來指定較多或較少的主控台。
若要在不關閉主控台的情況下,從 X 切換到主控台,請使用 Ctrl+Alt+F1 到 Ctrl+Alt+F6 這些鍵。若要回到 x,請按 Alt+F7。
若要標準化程式的鍵盤配置,請變更下列的檔案:
/etc/inputrc
/etc/X11/Xmodmap
/etc/skel/.emacs
/etc/skel/.gnu-emacs
/etc/skel/.vimrc
/etc/csh.cshrc
/etc/termcap
/usr/share/terminfo/x/xterm
/usr/share/X11/app-defaults/XTerm
/usr/share/emacs/VERSION/site-lisp/term/*.el這些變更僅會影響使用 terminfo 項目的應用程式,或其組態檔是被直接變更的應用程式 (vi、emacs 等等)。未隨附於此系統的應用程式必須相容於這些預設值。
在 X 下,可以按照 /etc/X11/Xmodmap 中的說明啟用組合鍵 (複合鍵)。
使用 X 鍵盤延伸程式 (XKB),可以進行進一步的設定。GNOME (gswitchit) 以及 KDE (kxkb) 桌面環境也會使用此延伸程式。
![]() | 如需更多資訊 |
|---|---|
XKB 的相關資訊,可參閱 | |
本系統已在很大程度上進行了國際化,可以根據當地的需求進行修改。國際化 (I18N) 允許特定的當地語系化 (L10N)。I18N 與 L10N 這兩個縮寫是取首尾兩個字母,兩字母中間再加上省略的字母數目。
設定位於 /etc/sysconfig/language 中所定義的 LC_ 變數。這不僅是指本地語言支援,還包括訊息 (語言)、字元集、排序順序、時間和日期、數字及貨幣等類別。每種類別都可以用自己的變數來直接定義,或用在 language 檔案中的主要變數來間接定義 (請參閱 locale man 頁面)。
RC_LC_MESSAGES、RC_LC_CTYPE、RC_LC_COLLATE、RC_LC_TIME、RC_LC_NUMERIC、RC_LC_MONETARY
這些變數會傳送到外圍程序,但不會包含 RC_ 字首,並代表列出的類別。相關外圍程序設定檔會列於下面。目前的設定可以用 locale 指令來顯示。
RC_LC_ALL
此變數 (如果設定) 會覆寫先前所提到的變數值。
RC_LANG
如果沒有設定前面的變數,則此為備用變數。依照預設,只會設定 RC_LANG。這讓使用者更容易輸入自己的值。
ROOT_USES_LANG
有 yes 或 no 兩個變數。如果設為 no,root 始終可以在 POSIX 環境中作業。
變數可以用 YaST sysconfig 編輯器來設定 (請參閱第 9.3.1 節「使用 YaST Sysconfig 編輯器變更系統組態」)。這樣的變數值中包含語言碼、國碼、編碼及輔助按鍵。個別的元件會以特定的字元來連接:
LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]
您必須將語言與國碼一起設定。語言設定必須符合 http://www.evertype.com/standards/iso639/iso639-en.html 和 http://www.loc.gov/standards/iso639-2/ 中的標準 ISO 639。國碼列在 http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.html 中的 ISO 3166。
只有設定那些可以在 /usr/lib/locale 中找到的可用描述檔案的值,才會有意義。您可以用 localedef 指令從 /usr/share/i18n 中的檔案建立其他描述檔;描述檔屬於 glibc-i18ndata 套件的一部份。en_US.UTF-8 (針對美式英文) 的描述檔可以用以下指令建立:
localedef -i en_US -f UTF-8 en_US.UTF-8
LANG=en_US.UTF-8
如果安裝期間選擇美式英文的話,則此為預設設定。如果您選擇了其他語言,則仍然可以使用該語言,但會以 UTF-8 做為字元編碼。
LANG=en_US.ISO-8859-1
這會將語言設成英文、國家設成美國、字元集設成 ISO-8859-1。此字元集並不支援歐元符號,但有時對於尚未支援 UTF-8 的程式卻非常實用。然後,有些程式將會評估定義字元集的 (此例為 ISO-8859-1) 的字串,像是 Emacs。
LANG=en_IE@euro
上方範例在語言設定中明確包括歐元符號。這項設定現在基本上已不再使用,因為 UTF-8 也涵蓋歐元符號。它只有在應用程式支援 ISO-8859-15 而不支援 UTF-8 時才有用。
在較早的版本中,對 /etc/sysconfig/language 進行任何變更之後,都需要執行 SuSEconfig。之後,SuSEconfig 會將變更寫入 /etc/SuSEconfig/profile 及 /etc/SuSEconfig/csh.login。登入時,這些檔案由 /etc/profile (對於 Bash) 或 /etc/csh.login (對於 tcsh) 讀取。
在近期的版本中,/etc/profile.d/lang.sh 取代了 /etc/SuSEconfig/profile,/etc/profile.de/lang.csh 取代了 /etc/SuSEconfig/csh.login。但如果這兩個舊檔案存在,登入系統時仍會讀取這兩個檔案。
現在,該程序的處理過程如下所示:
對於 Bash:/etc/profile 會讀取 /etc/profile.d/lang.sh,後者會分析 /etc/sysconfig/language。
對於 tcsh:在登入時,/etc/csh.login 會讀取 /etc/profile.d/lang.csh,後者會分析 /etc/sysconfig/language。
如此可確保對 /etc/sysconfig/language 的任何變更在下次登入相應的外圍程序時即會生效,而不必先執行 SuSEconfig。
使用者可以適當地編輯自己的 ~/.bashrc 來覆寫系統預設值。例如,若不想讓整個系統的程式訊息皆使用 en_US,請加入 LC_MESSAGES=es_ES,以便改用西班牙文來顯示訊息。
~/.i18n 中的地區設定¶
如果您對區域設定的系統預設值不滿意,可以根據 Bash 指令碼語法在 ~/.i18n 中變更設定值。~/.i18n 中的項目會覆寫 /etc/sysconfig/language 中的系統預設值。使用相同的變數名稱,但不使用 RC_ 名稱空間字首。例如,以 LANG 取代 RC_LANG:
LANG=cs_CZ.UTF-8 LC_COLLATE=C
按照規定,在訊息類別中的檔案僅會儲存於對應的語言目錄中 (像是 en),以便有備用可用。如果您將 LANG 設為 en_US,而且 /usr/share/locale/en_US/LC_MESSAGES 中的訊息檔案不存在的話,則它會回到 /usr/share/locale/en/LC_MESSAGES 中。
您也可以定義備用鍊,例如,不列塔尼文之於法文,或是加里斯亞文之於西班牙文之於葡萄牙文:
LANGUAGE="br_FR:fr_FR"
LANGUAGE="gl_ES:es_ES:pt_PT"
如有需要,請改用挪威文變體 Nynorsk 與 Bokmal (讓其他備用為 no):
LANG="nn_NO"
LANGUAGE="nn_NO:nb_NO:no"
或
LANG="nb_NO"
LANGUAGE="nb_NO:nn_NO:no"
請注意,在挪威文中,會以不同方式處理 LC_TIME。
如果無法適當的辨識界定位數群組的分隔符號,可能會發生問題。如果 LANG 設定為類似 de 的兩個字母的語言碼,但卻使用 /usr/share/lib/de_DE/LC_NUMERIC 中的定義檔 glibc,就會發生這種情形。因此,LC_NUMERIC 必須設定為 de_DE,讓系統能辨識分隔符號定義。
The GNU C Library Reference Manual 的 「Locales and Internationalization」 一章。包含在 glibc-info 中。該套件可從 SUSE Linux Enterprise SDK 中取得。SDK 是 SUSE Linux Enterprise 的附加產品,可從 http://www.novell.com/developer/sle_sdk.html 下載。
Markus Kuhn 所寫的 UTF-8 and Unicode FAQ for Unix/Linux,目前網址如下:http://www.cl.cam.ac.uk/~mgk25/unicode.html。
Bruno Haible 提供的 Unicode-Howto,可從 http://tldp.org/HOWTO/Unicode-HOWTO-1.html 取得。