跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 管理指南 / 系统 / 特殊系统功能
适用范围 SUSE Linux Enterprise Server 15 SP6

30 特殊系统功能

本章会提供有关特定软件包、虚拟控制台和键盘布局的信息。我们将介绍 bashcronlogrotate 等软件组件,因为它们在上一个发布周期中已进行了更改或增强。即使这些组件很小或者被认为不太重要,用户也应该更改它们的默认行为,因为这些组件往往与系统密切相关。本章的最后是有关语言和国家/地区特定设置(I18N 和 L10N)的内容。

30.1 特殊软件包的相关信息

后续章节提供了有关以下工具的基本信息:bashcronlogrotatelocateulimitfree

30.1.1 bash 软件包和 /etc/profile

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

  1. /etc/profile

  2. ~/.profile

  3. /etc/bash.bashrc

  4. ~/.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)。

例 30.1︰ /etc/crontab 中的项
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) 中运行一次。这样可以确保在适当的时间运行可能被忽略的进程。

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

例 30.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 天。

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 软件包可以帮助控制这些文件的增长。有关详细信息,请参见第 3.3 节 “使用 logrotate 管理日志文件”

30.1.5 locate 命令

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

30.1.6 ulimit 命令

利用 ulimit用户限制)命令,您可以设置系统资源的使用限制并显示这些限制。ulimit 对于限制应用程序的可用内存尤其有用。设置可用内存限制后,可以防止应用程序占用过多系统资源,而导致操作系统变慢甚至挂起。

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

表 30.1︰ ulimit:为用户设置资源

-m

最大驻留集大小

-v

外壳可用虚拟内存的最大量

-s

堆栈的最大大小

-c

创建的核心文件的最大大小

-a

所有当前限制均已报告

系统范围的默认项在 /etc/profile 中设置。建议不要直接编辑此文件,因为系统升级期间会覆盖所做的更改。要自定义系统范围的配置文件设置,请使用 /etc/profile.local。各用户的设置应该在 ~USER/.profile 中配置。

例 30.3︰ 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 Serveremacs 软件包可将文件 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(客户端和服务器操作)等。

30.2 虚拟控制台

Linux 是一个多用户和多任务的系统。即使是在独立计算机系统上也可以感受到这些功能的好处。在文本方式下,提供了 6 个虚拟控制台。可以使用 AltF1AltF6 在这些控制台间切换。第 7 个控制台为 X 预留,而第 10 个控制台显示内核消息。

要从 x 切换到控制台而不将其关闭,请使用 CtrlAltF1CtrlAltF6。要返回到 X,请按 AltF7

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 项的应用程序或其配置文件被直接更改的应用程序(viemacs 等)。不是系统附带的应用程序应该根据这些默认设置进行调整。

在 X 下,可以按照 /etc/X11/Xmodmap 中的说明启用组合键(多键)。

可以通过“X 键盘扩展”(XKB) 进行进一步的设置。

提示
提示:更多信息

有关 XKB 的信息,请参见 /usr/share/doc/packages/xkeyboard-configxkeyboard-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

此变量可设置为 yesctype(默认值)。如果设置为 yesroot 将使用特定于语言和国家/地区的设置,否则系统管理员将始终在 POSIX 环境中操作。

这些变量可通过 YaST sysconfig 编辑器进行设置。此类变量的值包含语言代码、国家/地区代码、编码和修饰符。各个组成部分之间通过特殊字符联接:

LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]

30.4.1 系统范围的区域设置

systemd 会在引导初期读取 /etc/locale.conf。除非存在单独的设置,否则此文件中配置的区域设置将由每个服务或用户继承。

注意
注意:SUSE Linux Enterprise Server 下旧配置文件的行为

早期版本的 SUSE Linux Enterprise Server 会从 /etc/sysconfig/language/etc/sysconfig/keyboard/etc/sysconfig/console 读取区域设置。从 SUSE Linux Enterprise Server 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 一些示例

语言和国家/地区代码始终应该一起设置。语言设置遵循 ISO  639 标准(可从 https://www.evertype.com/standards/iso639/iso639-en.htmlhttps://www.loc.gov/standards/iso639-2/ 上获取)。国家/地区代码在 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 的程序。随后,Emacs 等程序将对定义字符集的字符串(在本例中为 ISO-8859-1)进行求值。

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 更多信息

  • GNU C 库参考手册》中的区域设置和国际化一章。它包含在软件包 glibc-info 中。

  • Markus Kuhn 编写的 Unix/Linux 的 UTF-8 和 Unicode 常见问题解答,当前位于 https://www.cl.cam.ac.uk/~mgk25/unicode.html