以下章节提供有关以下工具的基本信息:bash、cron、logrotate、locate、ulimit 和 free。
Bash 是默认的系统 shell。当用作登录 shell 时,它会读取几个初始化文件。Bash 会按照此列表中出现的顺序处理它们
/etc/profile
~/.profile
/etc/bash.bashrc
~/.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 时表位于 /var/spool/cron/tabs。 /etc/crontab 作为系统范围的 cron 时表。在时间表之后但在命令之前,直接输入运行命令的用户名。在 示例 15.1,“/etc/crontab 中的条目” 中,输入了 root。位于 /etc/cron.d 中的特定于软件包的时表具有相同的格式。请参阅 cron man 页面 (man cron)。
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) 运行一次。这保证了可能被忽略的进程可以在适当的时间运行。
要以自定义时间运行 hourly、daily 或其他定期维护脚本,请使用 /etc/crontab 条目定期删除时间戳文件(参见 示例 15.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 天。
为了避免由 cron 状态消息引起的邮件泛滥,新安装的 /etc/sysconfig/cron 中 SEND_MAIL_ON_NO_ERROR 的默认值设置为“no”。即使此设置设置为“no”,cron 数据输出仍将发送到 MAILTO 地址,如 cron man 页面中所记录。
在更新的情况下,建议根据您的需要设置这些值。
有几个系统服务(守护程序)以及内核本身,会定期将系统状态和特定事件记录到日志文件中。这样,管理员可以定期检查系统在某个时间点的状态,识别错误或功能故障,并精确地进行故障排除。这些日志文件通常存储在 /var/log 中,如 FHS 规范所规定,并且每天都在增长。 logrotate 软件包有助于控制这些文件的大小。有关更多详细信息,请参阅 “系统分析和调优指南”书籍,第 3 章“系统日志文件”,第 3.3 节“使用 logrotate 管理日志文件”。
locate 是一种快速查找文件的命令,未包含在已安装软件的标准范围内。如果需要,请安装软件包 mlocate,它是软件包 findutils-locate 的后继者。 updatedb 进程每天自动启动,或在启动系统后大约 15 分钟启动。
使用命令 ulimit(用户限制)可以设置系统资源的使用限制并显示这些限制。ulimit 对于限制应用程序可用的内存特别有用。通过此操作,可以防止应用程序占用过多的系统资源并减慢甚至挂起操作系统。
ulimit 可以与各种选项一起使用。要限制内存使用量,请使用 ulimit:设置用户的资源">表 15.1,“ulimit:设置用户的资源” 中列出的选项。
ulimit:设置用户的资源 #|
|
最大常驻集大小 |
|
|
shell 可用的最大虚拟内存量 |
|
|
堆栈的最大大小 |
|
|
创建的核心文件的大小 |
|
|
报告所有当前限制 |
系统范围内的默认条目设置在 /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 支持并非所有 shell 都支持 ulimit 指令。PAM(例如,pam_limits)提供了一种全面的调整可能性,作为 ulimit 的替代方案。
命令 free 显示系统中的总可用和已用物理内存和交换空间,以及内核消耗的缓冲区和缓存。 可用 RAM 的概念可以追溯到统一内存管理时代之前。 “空闲内存是坏内存”的口号非常适用于 Linux。因此,Linux 一直致力于平衡缓存,而不会允许空闲或未使用的内存。
内核不直接了解任何应用程序或用户数据。相反,它在 页面缓存 中管理应用程序和用户数据。如果内存不足,则将其写入交换分区或文件,最初可以使用 mmap 命令从其中读取(请参阅 man mmap)。
内核还包含其他缓存,例如 slab 缓存,其中存储用于网络访问的缓存。这可能解释了 /proc/meminfo 中计数器的差异。大多数,但不是全部,可以通过 /proc/slabinfo 访问。
但是,如果您的目标是确定当前正在使用的 RAM 量,请在 /proc/meminfo 中找到此信息。
对于某些 GNU 应用程序(例如 tar),man 页面不再维护。对于这些命令,请使用 --help 选项以获取有关 info 页面的快速概述,这些页面提供更深入的说明。Info 是 GNU 的超文本系统。通过输入 info info 来阅读有关此系统的介绍。可以使用 Emacs 通过输入 emacs -f info 或直接在控制台中通过输入 info 来查看 info 页面。您还可以使用 tkinfo、xinfo 或帮助系统来查看 info 页面。
要读取 man 页面,请输入 man MAN_PAGE。如果存在具有相同名称的 man 页面在不同的部分中,将列出所有这些页面及其相应的节号。选择要显示的页面。如果您在几秒钟内未输入节号,将显示第一个 man 页面。
要更改为默认系统行为,请在 shell 初始化文件(例如 ~/.bashrc)中设置 MAN_POSIXLY_CORRECT=1。
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(客户端和服务器操作)等。
Linux 是一个多用户和多任务系统。即使在独立 PC 系统上,这些功能的优势也显而易见。在文本模式下,有六个虚拟控制台可用。使用 Alt–F1 到 Alt–F6 在它们之间切换。第七个控制台保留给 X,第十个控制台显示内核消息。
要从 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、emacs 等)的应用程序。不随系统提供的应用程序应适应这些默认设置。
在 X 下,可以按照 /etc/X11/Xmodmap 中解释的那样启用组合键(多键)。
可以使用 X 键盘扩展 (XKB) 进行进一步设置。
有关 XKB 的信息可在 /usr/share/doc/packages/xkeyboard-config(xkeyboard-config 包的一部分)中列出的文档中找到。
该系统在很大程度上已经国际化,可以针对本地需求进行修改。国际化 (I18N) 允许特定的本地化 (L10N)。缩写 I18N 和 L10N 源自单词的首字母和尾字母,中间省略的字母数。
使用在文件 /etc/sysconfig/language 中定义的 LC_ 变量进行设置。这不仅指 本机语言支持,还指类别 消息(语言)、字符集、排序顺序、时间和日期、数字 和 货币。每个类别可以直接使用自己的变量或间接使用文件 language 中的主变量来定义(请参阅 locale man 页)。
RC_LC_MESSAGES、RC_LC_CTYPE、RC_LC_COLLATE、RC_LC_TIME、RC_LC_NUMERIC、RC_LC_MONETARY这些变量传递给 shell,不带 RC_ 前缀,代表所列类别。相关的 shell 配置文件如下。可以使用命令 locale 显示当前设置。
RC_LC_ALL
如果设置了此变量,它将覆盖已提及变量的值。
RC_LANG
如果未设置上述任何变量,则这是回退选项。默认情况下,仅设置 RC_LANG。这使得用户更容易输入自己的值。
ROOT_USES_LANG
此变量可以设置为 yes 或 ctype(默认值)。如果设置为 yes,root 使用语言和国家/地区特定设置,否则系统管理员始终在 POSIX 环境中工作。
可以使用 YaST sysconfig 编辑器设置变量。该变量的值包含语言代码、国家/地区代码、编码和修饰符。各个组件由特殊字符连接起来
LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]
systemd 在早期启动时读取 /etc/locale.conf。在此文件中配置的区域设置由每个服务或用户继承,除非有单独的设置。
早期版本的 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
#localectlset-locale LANG=de_DE.UTF-8
同样,您也可以在 localectl set-locale 命令后指定其他变量。
为了在更新 systemd 包期间与旧系统保持向后兼容性,如果尚未定义,所有提及的变量都将从 sysconfig 迁移到其最终目的地。
您应该始终一起设置语言和国家/地区代码。语言设置遵循标准 ISO 639,可在 https://www.evertype.com/standards/iso639/iso639-en.html 和 https://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,以便消息以西班牙语显示。
如果您对区域设置系统默认值不满意,请根据 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 和 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,才能使分隔符定义对系统可见。
GNU C 库参考手册,第 “区域设置和国际化” 章。它包含在 glibc-info 包中。
Markus Kuhn,《UTF-8 和 Unicode FAQ for Unix/Linux》,目前位于 https://www.cl.cam.ac.uk/~mgk25/unicode.html。