跳转到内容跳转到页面导航:上一页 [访问键 p]/下一页 [访问键 n]
适用于 openSUSE Leap 15.6

15 特殊系统功能 编辑源文件

摘要

本章从有关特定软件包、虚拟控制台和键盘布局的信息开始。我们讨论了诸如 bashcronlogrotate 之类的软件组件,因为它们在最近的发布周期中已被更改或增强。即使它们很小或被认为不重要,用户也应该更改它们的默认行为,因为这些组件通常与系统紧密耦合。本章最后介绍有关语言和国家/地区特定设置 (I18N 和 L10N) 的部分。

15.1 有关特殊软件包的信息 编辑源文件

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

15.1.1 软件包 bash/etc/profile 编辑源文件

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

  1. /etc/profile

  2. ~/.profile

  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 文件中复制回来。

15.1.2 软件包 cron 编辑源文件

使用 cron 在预定义的时间自动在后台运行命令。cron 使用格式特殊的时表,并且该工具附带几个默认时表。如果需要,用户也可以指定自定义时表。

cron 时表位于 /var/spool/cron/tabs/etc/crontab 作为系统范围的 cron 时表。在时间表之后但在命令之前,直接输入运行命令的用户名。在 示例 15.1,“/etc/crontab 中的条目” 中,输入了 root。位于 /etc/cron.d 中的特定于软件包的时表具有相同的格式。请参阅 cron man 页面 (man cron)。

示例 15.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 条目定期删除时间戳文件(参见 示例 15.2,“/etc/crontab:删除时间戳文件”,它在每个整点之前删除 hourly 文件,每天凌晨 2:14 删除 daily 文件,等等)。

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

15.1.3 停止 cron 状态消息 编辑源文件

为了避免由 cron 状态消息引起的邮件泛滥,新安装的 /etc/sysconfig/cronSEND_MAIL_ON_NO_ERROR 的默认值设置为“no”。即使此设置设置为“no”,cron 数据输出仍将发送到 MAILTO 地址,如 cron man 页面中所记录。

在更新的情况下,建议根据您的需要设置这些值。

15.1.4 日志文件:软件包 logrotate 编辑源文件

有几个系统服务(守护程序)以及内核本身,会定期将系统状态和特定事件记录到日志文件中。这样,管理员可以定期检查系统在某个时间点的状态,识别错误或功能故障,并精确地进行故障排除。这些日志文件通常存储在 /var/log 中,如 FHS 规范所规定,并且每天都在增长。 logrotate 软件包有助于控制这些文件的大小。有关更多详细信息,请参阅 “系统分析和调优指南”书籍,第 3 章“系统日志文件”,第 3.3 节“使用 logrotate 管理日志文件”

15.1.5 命令 locate 编辑源文件

locate 是一种快速查找文件的命令,未包含在已安装软件的标准范围内。如果需要,请安装软件包 mlocate,它是软件包 findutils-locate 的后继者。 updatedb 进程每天自动启动,或在启动系统后大约 15 分钟启动。

15.1.6 命令 ulimit 编辑源文件

使用命令 ulimit用户限制)可以设置系统资源的使用限制并显示这些限制。ulimit 对于限制应用程序可用的内存特别有用。通过此操作,可以防止应用程序占用过多的系统资源并减慢甚至挂起操作系统。

ulimit 可以与各种选项一起使用。要限制内存使用量,请使用 ulimit:设置用户的资源">表 15.1,“ulimit:设置用户的资源” 中列出的选项。

表 15.1:ulimit:设置用户的资源

-m

最大常驻集大小

-v

shell 可用的最大虚拟内存量

-s

堆栈的最大大小

-c

创建的核心文件的大小

-a

报告所有当前限制

系统范围内的默认条目设置在 /etc/profile 中。直接编辑此文件不建议,因为更改会在系统升级期间被覆盖。要自定义系统范围内的配置文件设置,请使用 /etc/profile.local。应在 ~USER/.profile 中进行每个用户的设置。

示例 15.3:ulimit~/.bashrc 中的设置
# Limits maximum resident set size (physical memory):
ulimit -m 98304

# Limits of virtual memory:
ulimit -v 98304

内存分配必须以 KB 为单位指定。有关更多详细信息,请参阅 man bash

Important
重要提示:ulimit 支持

并非所有 shell 都支持 ulimit 指令。PAM(例如,pam_limits)提供了一种全面的调整可能性,作为 ulimit 的替代方案。

15.1.7 命令 free 编辑源文件

命令 free 显示系统中的总可用和已用物理内存和交换空间,以及内核消耗的缓冲区和缓存。 可用 RAM 的概念可以追溯到统一内存管理时代之前。 “空闲内存是坏内存”的口号非常适用于 Linux。因此,Linux 一直致力于平衡缓存,而不会允许空闲或未使用的内存。

内核不直接了解任何应用程序或用户数据。相反,它在 页面缓存 中管理应用程序和用户数据。如果内存不足,则将其写入交换分区或文件,最初可以使用 mmap 命令从其中读取(请参阅 man mmap)。

内核还包含其他缓存,例如 slab 缓存,其中存储用于网络访问的缓存。这可能解释了 /proc/meminfo 中计数器的差异。大多数,但不是全部,可以通过 /proc/slabinfo 访问。

但是,如果您的目标是确定当前正在使用的 RAM 量,请在 /proc/meminfo 中找到此信息。

15.1.8 man 页面和 info 页面 编辑源文件

对于某些 GNU 应用程序(例如 tar),man 页面不再维护。对于这些命令,请使用 --help 选项以获取有关 info 页面的快速概述,这些页面提供更深入的说明。Info 是 GNU 的超文本系统。通过输入 info info 来阅读有关此系统的介绍。可以使用 Emacs 通过输入 emacs -f info 或直接在控制台中通过输入 info 来查看 info 页面。您还可以使用 tkinfo、xinfo 或帮助系统来查看 info 页面。

15.1.9 使用命令 man 选择 man 页面 编辑源文件

要读取 man 页面,请输入 man MAN_PAGE。如果存在具有相同名称的 man 页面在不同的部分中,将列出所有这些页面及其相应的节号。选择要显示的页面。如果您在几秒钟内未输入节号,将显示第一个 man 页面。

要更改为默认系统行为,请在 shell 初始化文件(例如 ~/.bashrc)中设置 MAN_POSIXLY_CORRECT=1

15.1.10 GNU Emacs 的设置 编辑源文件

GNU Emacs 是一个复杂的开发环境。以下章节涵盖了启动 GNU Emacs 时处理的配置文件。更多信息请访问 https://gnu.ac.cn/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

openSUSE Leap 中,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 文件下的 Init File 中找到: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(客户端和服务器操作)等。

15.2 虚拟控制台 Edit source

Linux 是一个多用户和多任务系统。即使在独立 PC 系统上,这些功能的优势也显而易见。在文本模式下,有六个虚拟控制台可用。使用 AltF1AltF6 在它们之间切换。第七个控制台保留给 X,第十个控制台显示内核消息。

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

15.3 键盘映射 Edit source

为了标准化程序的键盘映射,对以下文件进行了更改

/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) 进行进一步设置。

Tip
提示:更多信息

有关 XKB 的信息可在 /usr/share/doc/packages/xkeyboard-configxkeyboard-config 包的一部分)中列出的文档中找到。

15.4 语言和国家/地区特定设置 Edit source

该系统在很大程度上已经国际化,可以针对本地需求进行修改。国际化 (I18N) 允许特定的本地化 (L10N)。缩写 I18N 和 L10N 源自单词的首字母和尾字母,中间省略的字母数。

使用在文件 /etc/sysconfig/language 中定义的 LC_ 变量进行设置。这不仅指 本机语言支持,还指类别 消息(语言)、字符集排序顺序时间和日期数字货币。每个类别可以直接使用自己的变量或间接使用文件 language 中的主变量来定义(请参阅 locale man 页)。

变量列表
RC_LC_MESSAGESRC_LC_CTYPERC_LC_COLLATERC_LC_TIMERC_LC_NUMERICRC_LC_MONETARY

这些变量传递给 shell,不带 RC_ 前缀,代表所列类别。相关的 shell 配置文件如下。可以使用命令 locale 显示当前设置。

RC_LC_ALL

如果设置了此变量,它将覆盖已提及变量的值。

RC_LANG

如果未设置上述任何变量,则这是回退选项。默认情况下,仅设置 RC_LANG。这使得用户更容易输入自己的值。

ROOT_USES_LANG

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

可以使用 YaST sysconfig 编辑器设置变量。该变量的值包含语言代码、国家/地区代码、编码和修饰符。各个组件由特殊字符连接起来

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

15.4.1 系统范围的区域设置 Edit source

systemd 在早期启动时读取 /etc/locale.conf。在此文件中配置的区域设置由每个服务或用户继承,除非有单独的设置。

Note
注意:openSUSE Leap openSUSE Leap 中较旧配置文件的行为

早期版本的 openSUSE Leap/etc/sysconfig/language/etc/sysconfig/keyboard/etc/sysconfig/console 读取区域设置。从 openSUSE Leap 15.0 开始,这些文件被认为已过时。systemd 不再从这些文件读取设置。而是,systemd 读取 /etc/locale.conf

但是,/etc/sysconfig/language 中定义的变量仍然会使用:它们会覆盖系统范围的区域设置,并可用于为用户 shell 定义不同的区域设置(请参阅 第 15.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 迁移到其最终目的地。

15.4.2 一些示例 Edit source

您应该始终一起设置语言和国家/地区代码。语言设置遵循标准 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 的程序很有用。定义字符集的字符串(在本例中为 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 的任何更改在登录到各自的 shell 时都可用,而无需手动激活它们。

用户可以通过编辑他们的 ~/.bashrc 来覆盖系统默认值。例如,如果您不想为程序消息使用系统范围的 en_US,请包含 LC_MESSAGES=es_ES,以便消息以西班牙语显示。

15.4.3 ~/.i18n 中的区域设置 Edit source

如果您对区域设置系统默认值不满意,请根据 Bash 脚本语法在 ~/.i18n 中更改设置。 ~/.i18n 中的条目会覆盖来自 /etc/sysconfig/language 的系统默认值。使用相同的变量名,但不要使用 RC_ 命名空间前缀。例如,使用 LANG 而不是 RC_LANG

LANG=cs_CZ.UTF-8
LC_COLLATE=C

15.4.4 语言支持设置 Edit source

作为规则,消息 类别中的文件仅存储在相应的语言目录中(例如 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 和 Bokmål(以及回退到 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,才能使分隔符定义对系统可见。

15.4.5 更多信息 Edit source

打印此页面