摘要
本章首先提供有关各种软件包、虚拟控制台和键盘布局的信息。讨论诸如 bash、cron 和 logrotate 等软件组件,因为在最后的发行周期中已对这些组件进行了更改或增强。即使这些组件很小或者被认为不太重要,但是用户可能希望更改它们的默认行为,因为这些组件通常是与系统紧密结合的。本章的最后是有关语言和国家/地区特定设置(I18N 和 L10N)的内容。
程序 bash、cron、logrotate、locate、ulimit 和 free 对于系统管理员和许多用户是非常重要的。手册页和信息页是命令相关信息的两个有用来源,但是它们并不是始终可用的。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/spool/cron/tabs 中。/etc/crontab 用作系统范围的 cron 表。输入在时间表之后且在此命令之前运行此命令的用户名。在例 11.1 “/etc/crontab 中的项” 中,输入的是 root。位于 /etc/cron.d 中的包特定的表具有相同的格式。请参见 cron 手册页 (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.
通过 cron 控制 logrotate,并通过 /etc/cron.daily/logrotate 每天对其进行调用。
locate 是一个用于查找文件的命令,它不包括在已安装软件的标准范围内。如果需要,请安装包 findutils-locate。updatedb 进程将在每天晚上或引导系统约 15 分钟后自动启动。
使用 ulimit(用户限制)命令可以为系统资源的使用设置限制并使其显示出来。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),已不再保留手册页。对于这些命令,可使用 --help 选项快速查看信息页,其中提供更多深入的描述。info 是 GNU 的超文本系统。通过输入 infoinfo 可以看到此系统的介绍。通过输入 emacs -f Info 可使用 Emacs 查看信息页,也可以在控制台中使用 info 直接查看信息页。还可以使用 tkinfo、xinfo 或帮助系统来查看信息页。
要阅读手册页,请输入 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。要自定义程序,请(通过 cp /etc/skel/.gnu-emacs ~/.gnu-emacs)将 .gnu-emacs 复制到用户主目录并在那里进行所需的设置。
.gnu-emacs 将文件 ~/.gnu-emacs-custom 定义为 custom-file。如果用户通过 Emacs 中的 customize 选项进行设置,则这些设置将保存到 ~/.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 中指定整个系统范围的设置。
初始化文件下的 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 是一个多用户和多任务的系统。即使是在独立计算机系统上也可以感受到这些功能的好处。在文本方式下,提供了 6 个虚拟控制台。可以使用 Alt+F1 到 Alt+F6 在这些控制台间切换。第 7 个控制台是为 X 保留的,而第 10 个控制台显示内核消息。可以通过修改文件 /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、less 等)的应用程序。不是系统附带的应用程序应该根据这些默认设置进行调整。
在 X 下,可以如 /etc/X11/Xmodmap 中所说明的启用 Compose 键(多键)。
可以通过“X 键盘扩展”(XKB) 进行进一步的设置。桌面环境 GNOME (gswitchit) 和 KDE (kxkb) 也使用此扩展。
![]() | 更多信息 |
|---|---|
有关 XKB 的信息可以在 | |
该系统在很大程度上实现了国际化,可修改以满足本地需要。国际化 (I18N) 允许特定的本地化 (L10N)。I18N 和 L10N 这两个缩写词使用原单词的第一个和最后一个字母,中间的数字表示省略的字母数。
设置是通过文件 /etc/sysconfig/language 中定义的 LC_ 变量进行的。这不仅指本地语言支持,还指消息(语言)、字符集、排序顺序、时间和日期、数字和货币等类别。这些类别中的每一种都可以使用其自己的变量直接定义或使用文件 language 中的主变量间接定义(请参见手册页 man 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 或 no 变量。如果将其设置为 no,则 root 用户始终在 POSIX 环境中工作。
这些变量可通过 YaST sysconfig 编辑器进行设置(请参见第 9.3.1 节 “使用 YaST Sysconfig 编辑器更改系统配置”)。此类变量的值包含语言代码、国家/地区代码、编码和修饰符。各部分之间通过特殊字符连接:
LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]
语言和国家/地区代码始终应该一起设置。语言设置遵循 ISO 639 标准(可从 http://www.evertype.com/standards/iso639/iso639-en.html 和 http://www.loc.gov/standards/iso639-2/ 上获取)。国家/地区代码在 ISO 3166(可从 http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.html 上获取)中列出。
只有设置可以在 /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 的程序。随后,Emacs 等程序将对定义字符集的字符串(在本例中为 ISO-8859-1)进行求值。
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/SuSEconfig/profile 已替换为 /etc/profile.d/lang.sh,/etc/SuSEconfig/csh.login 则替换为 /etc/profile.de/lang.csh。但如果这两个旧文件存在,登录时仍会读取它们。
进程链现在如下所示:
对于 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),但使用的定义文件 glibc 位于 /usr/share/lib/de_DE/LC_NUMERIC,则将出现此问题。因此必须将 LC_NUMERIC 设置为 de_DE 以使系统能够识别出分隔符定义。
《GNU C 库参考手册》中的“区域设置和国际化”一章。它包含在 glibc-info 中。该包可从 SUSE Linux Enterprise SDK 中获取。SDK 是 SUSE Linux Enterprise 的外接式附件产品,可从 http://www.novell.com/developer/sle_sdk.html 下载。
Markus Kuhn 编写的 Unix/Linux 的 UTF-8 和 Unicode 常见问题解答,当前位于 http://www.cl.cam.ac.uk/~mgk25/unicode.html。
Bruno Haible 编写的 Unicode-Howto,位于 http://tldp.org/HOWTO/Unicode-HOWTO-1.html。