特别的系统功能组件

目录

22.1. 特殊软件包的相关信息
22.2. 虚拟控制台
22.3. 键盘映射
22.4. 语言和国家/地区特定的设置

摘要

本章提供有关各种软件包、虚拟控制台和键盘布局的信息。 讨论诸如 bashcronlogrotate 等软件组件,因为在最后的发行周期中已对这些组件进行了更改或增强。 即使这些组件很小或者被认为不太重要,但是用户可能希望更改它们的默认行为,因为这些组件通常是与系统紧密结合的。 本章的最后是有关语言和国家/地区特定设置(I18N 和 L10N)的内容。

特殊软件包的相关信息

程序 bashcronlogrotatelocateulimitfree,以及文件 resolv.conf 对于系统管理员和许多用户是非常重要的。 手册页和信息页是命令相关信息的两个有用来源,但是它们并不是始终可用的。 GNU Emacs 是一种流行的并且非常容易配置的文本编辑器。

bash 包和 /etc/profile

Bash 是默认的系统 shell。在用作登录 shell 时,它将读取几个初始化文件。 Bash 按照这些文件在列表中出现的顺序处理它们:

  1. /etc/profile

  2. ~/.配置文件

  3. /etc/bash.bashrc

  4. ~/.bashrc

~/.profile~/.bashrc 中进行自定义设置。要确保正确处理这些文件,需要将基本设置从 /etc/skel/.profile/etc/skel/.bashrc 复制到用户的主目录中。 建议在更新后从 /etc/skel 复制这些设置。执行以下 shell 命令可防止个人调整的损失:

mv ~/.bashrc ~/.bashrc.old
cp /etc/skel/.bashrc ~/.bashrc
mv ~/.profile ~/.profile.old
cp /etc/skel/.profile ~/.profile

然后从 *.old 文件将个人调整复制过来。

cron 包

如果要在预定义的时间在后台定期自动运行命令,请使用 cron 工具。cron 是由特殊格式的时间表驱动的。这些表有一部分是系统附带的,但如有需要,用户可以自行编写表。

cron 表位于 /var/spool/cron/tabs 中。 /etc/crontab 用作系统范围的 cron 表。 输入在时间表之后且在此命令之前运行此命令的用户名。 在例 22.1 “/etc/crontab 中的项”中,输入的是 root。 位于 /etc/cron.d 中的包特定的表具有相同的格式。 请参见 cron 手册页 (man cron)。

例 22.1. /etc/crontab 中的项

1-59/5 * * * *   root   test -x /usr/sbin/atrun && /usr/sbin/atrun

不能通过调用命令 crontab -e 来编辑 /etc/crontab。 必须直接将该文件装载到编辑器中,对其进行修改,然后保存。

许多包将 shell 脚本安装到目录 /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) 中运行一次。 这样可以确保在适当的时间运行可能被忽略的进程。

要运行 hourlydaily 或在自定义时间运行其他周期性维护脚本,请删除通常使用 /etc/crontab 项的时戳文件(请参见例 22.2 “/etc/crontab:删除时戳文件”,它删除了每个整点之前的 hourly 和每天早上 2:14 的 daily 等)。

例 22.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-rpmdbsuse.de-clean-tmpsuse.de-cron-local

日志文件:包 logrotate

有许多系统服务(守护程序)以及内核本身定期将系统状态和特定事件记录到日志文件中。 这样,管理员可以定期检查系统在某一时刻的状态,识别错误或故障功能,并精确诊断它们。这些日志文件通常储存在 FHS 指定的 /var/log 中,文件大小每天都会增长。 logrotate 包可以帮助控制这些文件的增长。

用文件 /etc/logrotate.conf 配置 logrotate。特别地,include 规范主要配置了其他要读取的文件。 在 /etc/logrotate.d 中产生日志文件、安装的各个配置文件的程序。例如,随包 apache2(/etc/logrotate.d/apache2) 和 syslogd(/etc/logrotate.d/syslog) 一起提供的文件。

例 22.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 每天对其进行调用。

[Important]

使用 create 选项可以读取管理员在 /etc/permissions* 中进行的所有设置。 确保没有因个人修改而引起的冲突。

locate 命令

locate 是一个用于查找文件的命令,它不包括在已安装软件的标准范围内。 如果需要,请安装包 findutils-locate。updatedb 进程将在每天晚上或引导系统约 15 分钟后自动启动。

ulimit 命令

使用 ulimit (user limits) 命令,可以对系统资源的使用设置限制并将这些信息显示出来。ulimit 尤其适用于限制应用程序可用的内存。 使用此命令,可以防止某个应用程序自己占用太多内存,这可能导致系统停顿。

可以对 ulimit 使用多个选项。 要限制使用内存,请使用 表 22.1 “ulimit:为用户设置资源” 中列出的选项。

表 22.1. ulimit:为用户设置资源

-m

物理内存的最大大小

-v

虚拟内存的最大大小

-s

堆栈的最大大小

-c

核心文件的最大大小

-a

显示限制设置


可以在 /etc/profile 中创建系统范围的项。 在这里可以创建编程人员进行调试所需的核心文件。 普通用户不能增加系统管理员在 /etc/profile 中指定的值,但可以在 ~/.bashrc 中进行特殊输入。

例 22.4. ulimit:~/.bashrc 中的设置

# Limits of physical memory:
ulimit -m 98304
 
# Limits of virtual memory:
ulimit -v 98304

必须以 KB 为单位指定内存大小。 有关详细信息,请参见 man bash

[Important]

并非所有 shell 都支持 ulimit 指令。 如果您依赖于这些限制的内含设置,则 PAM(例如 pam_limits)提供了全面的调整功能。

free 命令

如果您的目的是查看当前使用了多少 RAM,则 free 命令可能会令人产生误解。 /proc/meminfo 中提供了此信息。 目前,使用 Linux 等现代操作系统的用户实际上无需过多地担心内存。 可用 RAM 的概念可追溯到统一内存管理之前。 可用内存不是好的内存这种说法非常适用于 Linux。 因此,Linux 一直在平衡缓存方面下功夫,不允许实际上存在可用或未使用的内存。

内核基本上不直接管理任何应用程序或用户数据。 而是在一个页缓存中管理应用程序和用户数据。 如果内存不足,它的某些部分会被写入交换分区或文件中,借助于 mmap 命令,可以最先从这些交换分区或文件中读取这些部分(请参见 man mmap)。

此外,内核中还包含其他缓存,如 slab 缓存,其中储存着用于网络访问的缓存。 这也许能够解释 /proc/meminfo 中计数器之间的差异。 通过 /proc/slabinfo 可以访问大多数(但并非全部)slab 缓存。

/etc/resolv.conf 文件

系统通过文件 /etc/resolv.conf 处理域名解析。 请参见第 33 章 域名系统

此文件仅由脚本 /sbin/modify_resolvconf 进行更新,任何其他程序都没有直接修改 /etc/resolv.conf 的权限。 只有实施这条规则才能确保系统的网络配置和相关文件保持一致。

手册页和信息页

对于某些 GNU 应用程序(如 tar),已不再保留手册页。 对于这些命令,可使用 --help 选项快速查看信息页,其中提供更多深入的说明。info 是 GNU 的超文本系统。 通过输入 infoinfo 可以看到此系统的介绍。 通过输入 emacs -f Info 可使用 Emacs 查看信息页,也可以在控制台中使用 info 直接查看信息页。 还可以使用 tkinfo、xinfo 或 帮助系统来查看信息页。

GNU Emacs 的设置

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,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(用于客户机和服务器操作)以及其他。