## 1、语言环境概览 Linux 中的“语言管理”通常指的是 **Locale(本地化设置)**,它会影响系统的: - 显示语言 - 日期和时间格式 - 数字和货币格式 - 排序规则 - 字符编码 如果系统出现中文乱码、命令输出语言不对、程序处理字符异常,很多时候都和 Locale 配置有关。 ## 2、查看当前语言环境 ### 2.1 使用 `echo $LANG` ```shell echo $LANG ``` 这个环境变量通常表示当前会话默认使用的语言环境,例如: ```shell zh_CN.UTF-8 ``` 或: ```shell en_US.UTF-8 ``` ### 2.2 使用 `locale` ```shell locale ``` 这个命令可以查看当前所有 Locale 相关环境变量,比如: - `LANG` - `LC_CTYPE` - `LC_TIME` - `LC_MESSAGES` - `LC_ALL` 通常比单独看 `LANG` 更全面。 ## 3、`localectl` 命令 在使用 systemd 的 Linux 发行版中,`localectl` 是常用的语言环境管理工具。 ### 3.1 常见子命令 ```shell localectl status ``` 查看当前语言环境设置。 ```shell localectl set-locale LANG=zh_CN.UTF-8 ``` 设置系统语言环境。 ```shell localectl list-locales ``` 列出系统支持的 Locale。 ```shell localectl set-keymap us ``` 设置控制台键盘布局。 ### 3.2 命令列表示意 ```shell Commands: status Show current locale settings set-locale LOCALE... Set system locale list-locales Show known locales set-keymap MAP [MAP] Set console and X11 keyboard mappings ``` ## 4、常见 Locale 格式 Locale 一般长这样: ```shell 语言_国家.编码 ``` 例如: - `zh_CN.UTF-8`:中文(中国),UTF-8 编码 - `en_US.UTF-8`:英文(美国),UTF-8 编码 - `ja_JP.UTF-8`:日文(日本),UTF-8 编码 其中: - 前半部分表示语言 - 中间部分表示国家或地区 - 后半部分表示字符编码 ## 5、常见配置项说明 ### 5.1 `LANG` 默认语言环境,通常作为系统的基础 Locale 设置。 ### 5.2 `LC_*` 可以对某个类别单独指定,例如: - `LC_TIME`:时间格式 - `LC_MESSAGES`:提示信息语言 - `LC_NUMERIC`:数字格式 ### 5.3 `LC_ALL` 优先级通常最高,用于临时强制覆盖其他 Locale 设置。 例如: ```shell LC_ALL=C ls ``` 这个命令会临时使用最基础的 `C` 语言环境执行 `ls`。 ## 6、常见使用场景 ### 6.1 系统输出改成中文或英文 例如把系统语言设置为中文: ```shell localectl set-locale LANG=zh_CN.UTF-8 ``` 设置为英文: ```shell localectl set-locale LANG=en_US.UTF-8 ``` ### 6.2 排查乱码问题 常见检查点: - 当前终端编码是否为 UTF-8 - `LANG` 和 `LC_*` 是否配置正确 - 文件本身编码是否匹配 - SSH 客户端和服务端编码是否一致 ### 6.3 临时切换语言环境 ```shell LANG=en_US.UTF-8 date ``` 这样只对当前这条命令生效,不会永久修改系统配置。 ## 7、排障建议 ### 7.1 输出乱码 优先检查: ```shell locale echo $LANG ``` ### 7.2 程序日志时间格式不一致 重点检查: - `LC_TIME` - 时区配置 - 应用程序自身语言设置 ### 7.3 命令输出语言和预期不一致 重点检查: - `LANG` - `LC_MESSAGES` - 是否设置了 `LC_ALL` ## 8、小结 - Linux 语言管理本质上是 Locale 管理 - `echo $LANG` 可以快速查看当前默认语言环境 - `locale` 比单看 `LANG` 更完整 - `localectl` 是 systemd 系统中常用的语言环境管理工具 - 乱码、日期格式异常、提示信息语言不对,很多时候都和 Locale 有关