《Linux From Scratch》第三部分:构建LFS系统 第七章:基本系统配置- 7.7. 系统区域设置

简介:

  本地语言的支持依赖于 /etc/locale.conf/etc/locale.conf 包含不少于此相关的环境变量。更改此文件后,可能会出现以下的变化:

  • 大量的程序界面语言的本地化

  • 修正字符在字母、数字和其它类的分类。对于非英语区域设置来说,只有这样,bash 才能正常显示非 ASCII 字符

  • 国家顺序可以按照字母顺序正常排序(译者注:这里所谓的正常排序,应该是首先将国家名称转换成本地语言的国家名称,比如中国的开头字母是 Z,那么显示就很靠后了。但是假如显示为英文,就是 C 开头,那么将会靠前显示。)

  • 默认纸张尺寸

  • 货币、时间和日期值的格式

/etc/locale.conf<ll> 使用语言代码代替(比如中文是 zh,英文是 en),<CC> 使用国家代码代替(比如中国是 CN,中国香港是 HK,中国台湾是 TW,美国是 US),<charmap> 使用选定字符集指定的标准字符映射表替换。诸如 “@euro” 这样的可选修饰符也可使用。

运行以下命令可以获得当前 Glibc 支持的本地字符集。

locale -a

字符映射表可能存在很多的别名,比如 “ISO-8859-1” 可以写作 “iso8859-1” 或 “iso88591”。但是有一些程序不支持这些乱七八糟的写法(比如 UTF-8 只能写作 UTF-8,utf8 它就不认识了)。所以,为了安全起见,在设置的时候还是尽量的使用特定区域设置的规范名称。可以通过以下命令,查询在特定区域下的 字符映射表标准名称,<locale name> 为运行 locale -a 输 出的首选区域设置(这里以 zh_CN.utf8 为例)。

LC_ALL=<locale name> locale charmap	

对于 “zh_CN.utf8” 以上命令将会如下输出:

UTF-8

根据以上输出,我们再次修改 /etc/locale.conf, 将字符映射表设置为标准形式(zh_CN.utf8 变为 zh_CN.UTF-8)。同理,也可一并查询以下设置的标准命令,然后将其添加到 bash 的启动文件中(译者注:对于 bash 来说,启动文件为 .bashrc)。

LC_ALL=<locale name> locale language
LC_ALL=<locale name> locale charmap
LC_ALL=<locale name> locale int_curr_symbol
LC_ALL=<locale name> locale int_prefix

以上的命令将会打印当前区域设置的语言、字符编码、本地货币单位以及电话国际编码。如果出现类似下文的错误输出,可能是你没有严格按照第六章指导的方法操作或者是你当前所用的 Glibc 不支持。

locale: Cannot set LC_* to default locale: No such file or directory

如果这种情况真的发生,你应该使用 localedef 命令安装对应的系统区域,或者是考虑更改为其它的区域。假如没有出现错误提示,我们就可以继续进行下一步操作了!

有一些 LFS 之外的包可能出现对你设置的区域支持很差劲的情况。比如 X 的库(X Windows System 的一部份),就可能在内部文件中输出以下消息:

Warning: locale not supported by Xlib, locale set to C

在若干情况下,Xlib 希望以带规范破折号的大写形式列出字符映射表。比如 "ISO-8859-1" 而不应该写作 "iso88591"。不过,也可以通过去除区域规范中的字符映射部分找到合适的规范。这可以通过运行 locale charmap 命令来检查。例如,需要更改 "de_DE.ISO-8859-15@euro" 为 "de_DE@euro" 以便 Xlib 能识别区域。

即便如此,也可能遇到某些程序因为区域设置和它们预置的不同而导致功能异常(可能不会显示任何的错误消息)。如果出现这样的情况,可以通过查看其它的发行版是如何进行设置区域,从而得到启发。

一旦确定了到底该使用哪个区域设置,就可以创建 /etc/locale.conf 文件了:

cat > /etc/locale.conf << "EOF"
LANG=<ll>_<CC>.<charmap><@modifiers>
EOF

也可以通过 systemd 提供的实用程序 localectl 修改 /etc/locale.conf

localectl set-locale LANG="<ll>_<CC>.<charmap><@modifiers>"

此处,也可以指定其它和语言相关的环境变量,例如 LANGLC_CTYPELC_NUMERIC 或任何其它 locale 输出的环境变量,只需要用一个空格分开它们就可以了。以下示例中,LANG 设置为 en_US.UTF-8,但 LC_CTYPE 设置为 en_US:

localectl set-locale LANG="en_US.UTF-8" LC_CTYPE="en_US"
[Note]

注意

localectl 仅可用于 systemd 环境(译者注:你要是用 SysVinit 什么的就别用这个命令瞎捣乱了)。

“C” (默认)和 “en_US” (推荐美国英语用户使用)这两种区域设置有所不同。“C” 使用 US-ASCII 7 位字符集,并把设置了最高位的字节作为无效字符。这就是为什么类似 ls 的命令本地化时会用疑问号代替。 同样,如果你想要使用 Mutt 或 Pine 发送包含有类似字符的邮件,将会得到如下消息:非 RFC 兼容字符(发送邮件中的字符集为 “unknown 8-bit”)。 所以,如果你一定以及肯定一定不会用到 8 位的字符,那你可以仅使用“C”。

不少程序还不支持 UTF-8 区域设置。我们正在完善文档并修复类似问题,可以查看 http://www.linuxfromscratch.org/blfs/view/systemd/introduction/locale-issues.html

相关文章
|
3月前
|
Ubuntu Linux Anolis
Linux系统禁用swap
本文介绍了在新版本Linux系统(如Ubuntu 20.04+、CentOS Stream、openEuler等)中禁用swap的两种方法。传统通过注释/etc/fstab中swap行的方式已失效,现需使用systemd管理swap.target服务或在/etc/fstab中添加noauto参数实现禁用。方法1通过屏蔽swap.target适用于新版系统,方法2通过修改fstab挂载选项更通用,兼容所有系统。
230 3
Linux系统禁用swap
|
3月前
|
Linux
Linux系统修改网卡名为eth0、eth1
在Linux系统中,可通过修改GRUB配置和创建Udev规则或使用systemd链接文件,将网卡名改为`eth0`、`eth1`等传统命名方式,适用于多种发行版并支持多网卡配置。
344 3
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
305 0
Linux系统初始化脚本
|
4月前
|
运维 Linux 开发者
Linux系统中使用Python的ping3库进行网络连通性测试
以上步骤展示了如何利用 Python 的 `ping3` 库来检测网络连通性,并且提供了基本错误处理方法以确保程序能够优雅地处理各种意外情形。通过简洁明快、易读易懂、实操性强等特点使得该方法非常适合开发者或系统管理员快速集成至自动化工具链之内进行日常运维任务之需求满足。
240 18
|
3月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
286 1
|
3月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1014 1
|
4月前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
1586 10
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
6002 0
|
关系型数据库 MySQL Linux
卸载、下载、安装mysql(Linux系统centos7)
卸载、下载、安装mysql(Linux系统centos7)
449 0
|
Linux
手把手教会你安装Linux系统
手把手教会你安装Linux系统
241 0