CentOS 7 默认不预装 zh_CN.UTF-8 locale,需先执行 locale -a | grep zh_CN 确认是否存在,若无则须安装 Chinese Support 语言包并运行 sudo localedef -c -i zh_CN -f UTF-8 zh_CN.UTF-8 生成,再用 localectl set-locale LANG=zh_CN.UTF-8 设置,最后重新登录验证。

确认当前 locale 是否支持 zh_CN.UTF-8
很多用户直接运行 localectl set-locale LANG=zh_CN.UTF-8 却失败,报错 No such file or directory 或终端仍显示英文——根本原因是系统压根没生成这个 locale。CentOS 7 默认不预装中文 locale,必须先检查再生成。
执行:locale -a | grep zh_CN
如果输出为空,说明 zh_CN.UTF-8 尚未生成,不能跳过这步直接设置。
- 若输出包含
zh_CN.utf8(注意小写 utf8),它等价于zh_CN.UTF-8,可直接使用 - 若无任何输出,需先安装语言包再生成 locale
- 不要依赖
locale -a显示的大小写混用结果(如zh_CN.UTF-8和zh_CN.utf8可能同时存在,但系统实际只认一种)
安装中文语言包并生成 zh_CN.UTF-8
CentOS 7 的中文支持分散在多个包中,仅装 glibc-common 不够,必须显式安装语言组或关键本地化包。
推荐命令(任选其一):sudo yum groupinstall "Chinese Support" -y
或更精准地:sudo yum install glibc-common kde-l10n-Chinese fonts-chinese -y
-
glibc-common提供基础 locale 生成能力 -
kde-l10n-Chinese包含完整的zh_CN.UTF-8locale 定义文件(位于/usr/share/i18n/locales/) -
fonts-chinese解决图形界面和终端中文字体缺失问题(否则菜单显示方块) - 安装后必须运行
sudo localedef -c -i zh_CN -f UTF-8 zh_CN.UTF-8手动生成 locale,否则localectl无法识别
用 localectl 设置全局 LANG 而非修改 /etc/locale.conf
直接编辑 /etc/locale.conf 文件虽可行,但容易因格式错误(如多空格、换行符、BOM)导致 locale 命令失效或部分服务读取失败。CentOS 7 推荐统一用 localectl 管理。
正确操作:sudo localectl set-locale LANG=zh_CN.UTF-8
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 该命令会自动写入
/etc/locale.conf,且保证语法严格合规 - 设置后立即生效于新启动的 systemd 服务,但当前 shell 会话仍保持旧 locale,需重新登录或执行
source /etc/locale.conf - 切勿设置
LC_ALL=zh_CN.UTF-8—— 它会强制覆盖所有 LC_* 变量,可能干扰某些依赖特定 locale(如LC_TIME)的程序行为 - 验证是否生效:
localectl status查看输出中的System Locale行
图形界面与终端语言不一致的常见原因
桌面环境(GNOME)显示中文,但终端里 ls 报错仍是英文,或 man 页面乱码——这不是配置遗漏,而是环境变量未被继承。
GNOME 启动时会读取 /etc/locale.conf,但传统终端(如 GNOME Terminal)默认不重新加载它;SSH 登录更不会自动应用。
- 对本地图形终端:在 GNOME Terminal 的「首选项」→「配置文件」→「编辑」→「命令」中勾选「以登录 shell 方式运行命令」,确保读取
/etc/profile.d/下的 locale 设置 - 对 SSH 连接:确保服务器端
/etc/ssh/sshd_config中有AcceptEnv LANG LC_*,客户端连接时加-o SendEnv=LANG,LC_ALL - 临时补救:在终端执行
export LANG=zh_CN.UTF-8,但此设置仅限当前会话 - 真正生效需重启 GDM 或重新登录,而非仅重启终端进程
最关键的不是“改完就完事”,而是每一步都要验证:先 locale -a 看有没有,再 localectl status 看设没设上,最后新开终端跑 locale 看变量是否被正确加载——漏掉任意一环,中文都可能只出现在桌面菜单里,而不在你的命令行中。

















