Linux locale是Linux系统中用于定义用户区域和语言相关配置的核心机制,它决定了系统显示的语言、字符编码、日期时间格式、货币单位、数字格式等内容。很多用户在部署Linux服务或开发应用时,会遇到中文乱码、时间显示格式不符合预期等问题,这些大多和locale配置有关。

locale的核心作用
locale本质上是将用户所在区域的习惯规范映射到系统配置中,让系统输出的内容符合当地用户的使用习惯。它的作用主要体现在以下几个方面:
- 语言与字符编码:决定系统界面、命令行提示、应用输出的语言,以及使用的字符编码,避免出现乱码问题。
- 时间日期格式:定义日期和时间的显示顺序、分隔符,比如中文区域常用yyyy年mm月dd日,英文区域常用mm/dd/yyyy。
- 数字与货币格式:定义数字的千位分隔符、小数点符号,以及货币的显示符号和位置。
locale的命名规则
locale的名称由多个部分组成,格式通常为语言_地区.字符编码@变体,各个部分的含义如下:
- 语言:使用ISO 639定义的双字母语言代码,比如zh代表中文,en代表英文。
- 地区:使用ISO 3166定义的国家或地区代码,比如CN代表中国,US代表美国。
- 字符编码:指定使用的字符集,比如UTF-8、GBK等。
- 变体:可选部分,用于区分同一语言地区的不同变体,比如@euro表示使用欧元。
常见的locale示例如下:
| locale名称 | 含义 |
|---|---|
| zh_CN.UTF-8 | 中国中文,使用UTF-8字符编码 |
| en_US.UTF-8 | 美国英文,使用UTF-8字符编码 |
| zh_TW.Big5 | 中国台湾中文,使用Big5字符编码 |
查看当前系统的locale配置
可以通过命令行直接查看当前系统生效的locale配置,常用的命令如下:
查看所有生效的locale变量
# 查看当前生效的locale配置 locale
执行后会输出类似下面的内容,各个变量对应不同的配置项:
LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL=
各个locale变量的含义
- LANG:默认的locale设置,如果其他LC_*变量没有单独设置,会继承LANG的值。
- LC_ALL:优先级最高的locale变量,设置后会覆盖所有LC_*变量和LANG的值,一般不建议日常使用,仅在临时测试时设置。
- LC_CTYPE:控制字符分类和字符编码相关的处理,比如字符的大小写转换、字符宽度判断等。
- LC_TIME:控制日期和时间的显示格式。
- LC_NUMERIC:控制数字的非货币格式,比如千位分隔符、小数点符号。
- LC_MESSAGES:控制系统的提示信息、错误信息显示的语言。
查看系统支持的locale列表
# 查看系统所有支持的locale locale -a
修改locale配置的方法
根据不同的需求,可以选择临时修改或永久修改locale配置。
临时修改(仅当前会话生效)
直接在终端中导出对应的环境变量即可,关闭终端后配置会失效:
# 临时设置为美国英文UTF-8编码 export LANG=en_US.UTF-8 # 临时设置所有LC变量,优先级最高 export LC_ALL=en_US.UTF-8
永久修改(全局生效)
如果需要让配置永久生效,需要修改系统的环境变量配置文件,不同发行版的配置文件路径略有区别:
- Debian/Ubuntu系统:修改
/etc/default/locale文件 - CentOS/RHEL系统:修改
/etc/locale.conf文件
以CentOS系统为例,修改/etc/locale.conf文件的内容如下:
# 设置全局默认locale为中文UTF-8 LANG="zh_CN.UTF-8" # 可选:单独设置时间格式为英文,其他继承LANG LC_TIME="en_US.UTF-8"
修改完成后执行下面的命令让配置生效,或者重启系统:
source /etc/locale.conf
常见问题与解决
中文显示乱码
如果终端或应用输出中文时出现乱码,首先检查当前locale是否支持UTF-8编码,执行locale命令查看LANG的值,如果是POSIX或者C,需要修改为zh_CN.UTF-8。同时确认系统已经安装了对应的locale包,如果没有可以通过包管理器安装:
# CentOS系统安装中文locale包 yum install -y glibc-langpack-zh # Ubuntu系统安装中文locale包 apt-get install -y language-pack-zh-hans
时间格式不符合预期
如果日期时间显示格式不符合需求,可以单独修改LC_TIME变量,比如需要让时间显示为英文格式,可以设置LC_TIME=en_US.UTF-8,不需要修改整个系统的语言配置。
注意:修改LC_ALL变量会覆盖所有其他LC_*配置,日常配置中建议优先修改LANG和对应的单个LC_*变量,避免不必要的配置冲突。
Linux_locale字符编码区域设置系统环境变量修改时间:2026-06-23 13:15:39