30 特殊系統功能 #
本章會提供特定軟體套件、虛擬主控台及鍵盤配置的相關資訊。我們將介紹 bash
、cron
和 logrotate
等軟體元件,因為它們在上一個發行週期中已進行了變更或增強。這些元件也許不很重要,但與系統的關係密切,使用者應該變更它們的預設行為。本章最後一節則會介紹語言與國家特定的設定 (I18N 與 L10N)。
30.1 特殊軟體套件的相關資訊 #
後續章節提供了有關以下工具的基本資訊:bash
、cron
、logrotate
、locate
、ulimit
和 free
。
30.1.1 bash
套件和 /etc/profile
#
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
檔案複製回去。
30.1.2 cron 套件 #
使用 cron
可在預先定義的時間自動在背景中執行指令。cron
使用格式經過特別設定的時間表,並且該工具隨附了幾個預設的時間表。使用者也可以視需要指定自訂的表。
cron 表格位於 /var/spool/cron/tabs
。/etc/crontab
做為整個系統的 cron 表格。在時間表格之後、指令之前,輸入要直接執行指令的使用者名稱。在範例 30.1 「/etc/crontab 中的項目」中,輸入的是 root
。位於 /etc/cron.d
的套件專用表格具有相同的格式。請參閱 cron
手冊頁 (man cron
)。
1-59/5 * * * * root test -x /usr/sbin/atrun && /usr/sbin/atrun
不能透過呼叫指令 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
項目定期移除時戳檔案 (請參閱 範例 30.2 「/etc/crontab:移除時戳檔案」,它會在每個整點之前移除 hourly
時戳檔案,在每天的凌晨 2:14 移除 daily
時戳檔案,等等)。
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 天。
30.1.3 停止 Cron 狀態訊息 #
若要避免 Cron 狀態訊息導致的郵件氾濫,在新安裝的 /etc/sysconfig/cron
中,SEND_MAIL_ON_NO_ERROR
的預設值設為「no
」。即使將此設定設為「no
」,系統仍會將 cron 資料輸出傳送至 MAILTO
位址,如 cron 手冊頁所述。
對於更新,建議根據需要設定這些值。
30.1.4 記錄檔案:套件 logrotate #
某些系統服務 (精靈) 以及核心本身,會定期將系統狀態與特定事件記錄到記錄檔案中。這樣,管理員可以定期檢查某個時間點的系統狀態、找出錯誤或有問題的功能,並用精確的方式來排除它們。這些記錄檔案通常儲存在 /var/log
中 (如 FHS 所指定),檔案大小每天都會增長。logrotate
套件有助於控制這些檔案增大的方式。如需詳細資訊,請參閱Section 3.3, “Managing log files with logrotate
”。
30.1.5 locate
指令 #
可以快速尋找檔案的 locate
指令,未包含在軟體標準安裝的範圍內。如果需要,請安裝套件 mlocate
,它是套件 findutils-locate
的後續套件。updatedb
程序會在每晚自行啟動,或在啟動系統後的 15 分鐘左右啟動。
30.1.6 ulimit
指令 #
利用 ulimit
(使用者限制) 指令,您可以設定系統資源的使用限制,並顯示這些限制。ulimit
對於限制應用程式可使用的記憶體特別有用。利用它,可以避免應用程式佔用過多的系統資源,降低作業系統效能,甚至讓系統當機。
ulimit
可以搭配多種選項來使用。若要限制記憶體的使用,請利用表格 30.1 「ulimit
:為使用者設定資源」 中所列的選項。
ulimit
:為使用者設定資源 #
|
最大的常駐集大小 |
|
外圍程序可用的虛擬記憶體最大容量 |
|
堆疊的最大大小 |
|
所建立的核心檔案的最大大小 |
|
將會報告所有目前限制 |
系統範圍的預設項目在 /etc/profile
中設定。建議不要直接編輯此檔案,因為在系統升級期間將會覆寫變更。若要自訂系統範圍的設定檔設定,請使用 /etc/profile.local
。各使用者的設定應該在 ~USER/.profile
中進行。
ulimit
:~/.bashrc
中的設定 ## Limits maximum resident set size (physical memory): ulimit -m 98304 # Limits of virtual memory: ulimit -v 98304
記憶體配置的單位必須為 KB。如需詳細資訊,請參閱man bash
。
ulimit
支援
並非所有的外圍程序都支援 ulimit
指示詞。PAM (例如 pam_limits
) 做為 ulimit
的替代方法,提供了全面的調整功能。
30.1.7 free
指令 #
free
指令會顯示系統中的可用記憶體總容量、已用實體記憶體和交換空間,以及核心佔用的緩衝區和快取。可用的 RAM 的概念要回溯到聯合記憶體管理的年代之前。記憶體要物盡其用的口號非常適用於 Linux。所以,Linux 一直致力於平衡快取,不允許有剩餘或未使用的記憶體。
基本上,核心不會直接瞭解有關任何應用程式或使用者資料的資訊。相反地,它會在頁面快取中管理應用程式與使用者資料。如果記憶體不足,它的某些部分會寫入交換分割區或檔案中,這樣,使用 mmap
指令便可一開始就從這些交換分割區或檔案中讀取這些部分 (請參閱 man mmap
)。
核心也可以有其他的快取,例如 slab 快取,網路存取的快取資料會儲存於此處。這也許能夠解釋 /proc/meminfo
中計數器之間的差異。透過 /proc/slabinfo
可以存取大多數 (但並非全部) 快取。
但如果您的目的是要確定目前所用的 RAM 量,請在 /proc/meminfo
中尋找此資訊。
30.1.8 手冊頁和資訊頁 #
某些 GNU 應用程式 (例如 tar) 不再支援手冊頁。針對這些指令,請使用 --help
選項來取得資訊頁的快速綜覽,這些頁面將提供更深入詳盡的說明。Info 是 GNU 的超文字系統。輸入 info
info
可以查看此系統的介紹。您可以輸入 emacs
-f info
使用 Emacs 檢視資訊頁,也可以直接在主控台中使用 info
來檢視。您也可以使用 tkinfo、xinfo 或說明系統來檢視資訊頁面。
30.1.9 使用 man
指令選取手冊頁 #
若要閱讀手冊頁,請輸入 man
MAN_PAGE。如果不同區段中存在同名的手冊頁,所有的這些 手冊頁都會列出,並會顯示對應的區段號碼。請選取要顯示的那個頁面。如果您未在幾秒內輸入區段號碼,將會顯示第一個手冊頁。
若要將此行為變更為預設系統行為,請在外圍程序啟始化檔案 (如 ~/.bashrc
) 中設定 MAN_POSIXLY_CORRECT=1
。
30.1.10 GNU Emacs 的設定 #
GNU Emacs 是個複雜的工作環境。以下幾個小節包含在 GNU Emacs 啟動時組態檔案的處理情形。更多相關資訊可在 https://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
定義為 custom-file
。如果使用者透過 Emacs 中的 customize
選項進行設定,這些設定會儲存至 ~/.gnu-emacs-custom
。
在 SUSE Linux Enterprise Desktop 中,emacs
套件會在目錄 /usr/share/emacs/site-lisp
中安裝 site-start.el
檔案。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
(用戶端和伺服器操作) 等。
30.2 虛擬主控台 #
Linux 是多使用者及多工的作業系統。這些功能的優點即使在獨立的個人電腦系統中一樣令人讚賞。在文字模式中,有六個虛擬主控台可用。使用 Alt–F1 到 Alt–F6 可以在虛擬主控台之間進行切換。第七個主控台保留給 X 使用,第十個主控台可以顯示核心訊息。
若要在不關閉主控台的情況下,從 X 切換到主控台,請使用 Ctrl–Alt– + F1 到 Ctrl–Alt–F6 這些鍵。若要回到 x,請按 Alt– F7。
30.3 鍵盤對應 #
若要標準化程式的鍵盤配置,請變更下列的檔案:
/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),可以進行進一步的設定。
如需 XKB 的資訊,請參閱 /usr/share/doc/packages/xkeyboard-config
(xkeyboard-config
套件的一部分) 中所列的文件。
30.4 語言和國家/地區相關設定 #
本系統已在很大程度上進行了國際化,可以根據當地的需求進行修改。國際化 (I18N) 允許特定的當地語系化 (L10N)。I18N 與 L10N 這兩個縮寫是取首尾兩個字母,兩字母中間再加上省略的字母數量。
透過檔案 /etc/sysconfig/language
中定義的 LC_
變數來進行這些設定。這不僅是指本地語言支援,還包括訊息 (語言)、字元集、排序順序、時間和日期、數字及貨幣等類別。這些類別中的每一種都可以使用自己的變數直接定義,或使用 language
檔案中的主變數間接定義 (請參閱 locale
手冊頁)。
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
或ctype
(預設值)。如果設定為yes
,root
將使用語言和國家/地區相關設定,否則系統管理員將永遠在 POSIX 環境中作業。
變數可以用 YaST sysconfig 編輯器來設定。這樣的變數值中包含語言碼、國碼、編碼及輔助按鍵。個別元件會以特殊字元來連接:
LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]
30.4.1 泛系統地區設定 #
systemd
會在開機初期讀取 /etc/locale.conf
。除非存在個別設定,否則此檔案中設定的地區設定將由每個服務或使用者繼承。
舊版 SUSE Linux Enterprise Desktop 從 /etc/sysconfig/language
、/etc/sysconfig/keyboard
和 /etc/sysconfig/console
讀取地區設定。從 SUSE Linux Enterprise Desktop
15 GA 開始,這些檔案被視為已過時。systemd
不再從這些檔案讀取設定。systemd
改為從 /etc/locale.conf
讀取設定,
但仍會使用 /etc/sysconfig/language
中定義的變數。這些變數會覆寫系統範圍的地區設定,並可用於定義使用者外圍程序的不同地區設定 (請參閱第 30.4.2 節 「一些範例」)。
若要設定泛系統地區設定,您可以採用以下其中一種方式:
在
/etc/locale.conf
中寫入您的設定。每行指定一個環境型變數 (如需變數清單,請參閱man 5 locale.conf
):LANG=de_DE.UTF-8
若要微調設定,可以新增更多的變數 (每行一個變數)。
使用指令
localectl
:#
localectl
set-locale LANG=de_DE.UTF-8同樣,您也可以在
localectl set-locale
指令後面指定更多變數。
在更新 systemd 套件期間為了與舊系統保留反向相容性,上述所有變數都將從 sysconfig 移轉至其最終目標 (如果尚未在這些目標中定義這些變數)。
30.4.2 一些範例 #
您必須將語言與國碼一起設定。語言設定必須符合 https://www.evertype.com/standards/iso639/iso639-en.html 和 https://www.loc.gov/standards/iso639-2/ 中的標準 ISO 639。國碼列在 ISO 3166 中,請參閱 https://en.wikipedia.org/wiki/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
所做的變更將透過以下程序鏈來啟用:
對於 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
所做的任何變更在下次登入相應外圍程序時即會生效,而不必手動將其啟用。
使用者可以編輯他們的 ~/.bashrc
來覆寫系統預設值。例如,如果不想對程式訊息使用泛系統 en_US
,請加入 LC_MESSAGES=es_ES
,這樣訊息將以西班牙語顯示。
30.4.3 ~/.i18n
中的地區設定 #
如果您對系統預設的地區設定不滿意,請根據 Bash 指令碼撰寫語法變更 ~/.i18n
中的設定。~/.i18n
中的項目會覆寫來自 /etc/sysconfig/language
中的系統預設值。請使用相同的變數名稱,但不要包含 RC_
名稱空間字首。例如,使用 LANG
而非 RC_LANG
:
LANG=cs_CZ.UTF-8 LC_COLLATE=C
30.4.4 語言支援的設定 #
按照規定,在訊息類別中的檔案僅會儲存於對應的語言目錄中 (像是 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
),但使用的定義檔案 glibc 位於 /usr/share/lib/de_DE/LC_NUMERIC
,就會發生這種情況。因此,LC_NUMERIC
必須設定為 de_DE
,讓系統能辨識分隔符號定義。
30.4.5 更多資訊 #
The GNU C Library Reference Manual 的 「Locales and Internationalization」 一章,包含在套件 glibc-info 中。
Markus Kuhn 所寫的 UTF-8 and Unicode FAQ for Unix/Linux,目前網址如下:https://www.cl.cam.ac.uk/~mgk25/unicode.html。