linux基本系统配置 - 系统语言、区域和字符集设置详细(rhel8)

        最近学到linux语言、字符集等环境配置,感觉这个地方不好理解,所以花了2天之间查了各种网上查了资料,再在自己的系统(rhel8)上验证了以后,写下了这个文章。希望对大家有用。有不足支持还望批评指正。谢谢。

一、关于locale,以下列举几种介绍

locale描述1:

        程序运行使用一套语言需要有字符集(数据)和字体(显示),locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。

locale描述2:

        locale是 Linux 系统中多语言环境的接口,每个locale都定义了地区、语言和字符集。locale的语法规则是:<语言>_<地区>.<字符集编码><@修正值>,如 zh_CN.UTF-8中,zh表示中文,CN表示中国大陆,UTF-8 表示字符集。

locale描述3:

        locale 是 Linux 系统中多语言环境的接口,每个 locale 都定义了地区、语言和字符集。locale 的语法规则是:<语言>_<地区>.<字符集编码><@修正值>,如 zh_CN.UTF-8 中,zh 表示中文,CN 表示中国大陆,UTF-8 表示字符集。

locale描述4:

        locale的值会影响以下方面:(1)大量的程序界面语言的本地化.(2)修正字符在字母、数字和其它类的分类。对于非英语区域设置来说,只有这样,bash才能正常显示非ASCII字符。(3)国家顺序可以按照字母顺序正常排序(译者注:这里所谓的正常排序,应该是首先将国家名称转换成本地语言的国家名称,比如中国的开头字母是Z,那么显示就很靠后了。但是假如显示为英文,就是C开头,那么将会靠前显示。)(4)默认纸张尺寸(5)货币、时间和日期值的格式。

locale描述5:

        locale 是 Linux 系统中多语言环境的设置接口,在 Linux 中,使用 locale 命令来设置和显示程序运行的语言环境,locale 会根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统定义一个软件运行时的语言环境。locale 由ANSI C提供支持。

二、查看当前 locale(语言环境/字符集)

        操作系统根据区域不同以及人们对于计算机的输入习惯,将 locale(语言环境/字符集)归纳为12大类,并且分别赋予了12个环境变量,即12个LC_*。

变量          含义

LC_CTYPE:       语言符号及其分类

LC_NUMERIC: 数字

LC_TIME:      时间显示格式

LC_COLLATE:     比较和排序习惯

LC_MONETARY: 货币单位

LC_MESSAGES: 信息,如提示信息、错误信息、状态信息、标题、标签、按钮和菜单等

LC_PAPER:      默认纸张大小

LC_NAME:      姓名书写方式

LC_ADDRESS: 地址书写方式

LC_TELEPHONE: 电话号码书写方式

LC_MEASUREMENT: 度量衡表达方式

LC_IDENTIFICATION: locale 对自身包含信息的概述

我们通过locale命令可以查看当前的语言环境(字符集)的环境变量:

$ locale
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
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=

        从输出结果发现,除了上面提到的12个LC_*以外,还有3个变量,分别是LC_ALL、LANG和LANGUAGE。

        这里需要分别说明,其中的2个变量:LC_ALL、LANG与当前locale有关。而且,它们之间有一个优先级的关系:LC_ALL > LC_* > LANG。

    当设置了 LC_ALL 的值,则 LC_* 和 LANG 的值将会强制转换为 LC_ALL 的值

    当设置了 LANG 的值,如果 LC_* 有值,则 locale 采用该值(LC_* > LANG);而没有赋值的 LC_* ,则locale会采用LANG 的值。

    如果 LC_ALL、LANG和LC_*都不设置的话,系统将采用POSIX作为lcoale,也就是”C” locale。

注:

(1)“POSIX”是“C”的别名,如果LC_*或者LC_ALL的值设置为“C”或者“POSIX”表明使用(POSIX的)默认值。

(2)当我们新安装完一个系统时,默认的locale就是C或POSIX。

三、locale常用操作

1、查看现有语言环境:

(1)执行locale命令

(2)通过配置文件查看当前配置cat /etc/locale.conf。

2、可用语言环境(打印所有可用的语言环境):

locale -a

3、临时修改语言环境(只在当前shell下有用):

export LANG=en_US.UTF-8

export LANG=zh_CN.UTF-8

4、查看locale设置过程中的字符集标注名称

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

执行:LC_ALL=zh_CN.utf8 locale charmap,然后会输出UTF-8

例1:

对于 “zh_CN.utf8” 以上命令将会如下输出:
[root@localhost locales]# LC_ALL=en_US.iso88591 locale charmap

ISO-8859-1

例2:
[root@localhost locales]# LC_ALL=zh_CN.utf8 locale charmap

UTF-8

根据以上输出,我们再次修改 /etc/locale.conf, 将字符映射表设置为标准形式(zh_CN.utf8 变为 zh_CN.UTF-8)。

5.如何修改locale

        关于这个问题,我今天在网上查找了一天资料,把每个方法都亲身实践以后,发现能在我自己系统(rhel8)上生效的方法并不多,我自己只掌握了2个方法,如下:

(1)图形环境下改变”区域和语言”中的区域或者语言,会改变系统的区域、语言和字符集环境。本文后面有详细实验结论。

(2)在配置文件(比如/etc/profile或者~/.bashrc文件中)中改变LANG、LC_ALL、LC_*的值。

注意:网上搜索到的下面几个方法对rhel8全部无效:

方法1.可以修改/etc/profile文件

修改/etc/profile文件,在最下面增加

export LC_ALL=zh_CN.utf8

export LANG=zh_CN.utf8

命令行中使用命令 source 下配置文件,使其生效

方法2:修改/etc/locale.gen文件

将注释打开即可,修改完成后,执行下 locale-gen 命令使其生效

#en_SG ISO-8859-1

en_US.UTF-8 UTF-8

#en_US ISO-8859-1

方法3.localectl 命令行模式

localectl set-locale LANG=en_US.UTF-8

方法3:修改/etc/default/locale

注销一下,使其生效

LANG=“en_US.UTF-8”

LANGUAGE=“en_US:en”

方法4:创建/etc/locale.conf文件

LANG=en_AU.UTF-8

LC_COLLATE=C

LC_TIME=en_DK.UTF-8

source 使其生效

这4个方法对于我的rhel8完全无效。

四、问题

1.网上有帖子通过vim直接修改文件/etc/locale.conf或者用命令localectl set-locale命令修改/etc/locale.conf文件中的LANG和LC_CTYPE环境变量,我试了下,重启系统后会打不开终端。紧急修改LANG环境变量是没问题的(不能同时修改LC_CTYPE)。

2.自己通过修改/etc/locale.conf(命令修改或者直接vim修改),重启后系统不会影响系统以及LANG的值。

五、实验

1.实验1:

目的:(1)为了用/etc/profile设置locale(2)为了验证环境变量的特点——设置了环境变量的之后,仅仅在当前shell和子shell中有用。

步骤1:在/etc/profile中添加以下语句:

export LC_ALL=”zh_CN.UTF-8”

步骤2:source /etc/profile

步骤3:

[r@localhost ~]$ echo $LANG

en_US.UTF-8

[r@localhost ~]$ locale

LANG=en_US.UTF-8

LC_CTYPE="en_US.UTF-8"

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_PAPER="en_US.UTF-8"

LC_NAME="en_US.UTF-8"

LC_ADDRESS="en_US.UTF-8"

LC_TELEPHONE="en_US.UTF-8"

LC_MEASUREMENT="en_US.UTF-8"

LC_IDENTIFICATION="en_US.UTF-8"

LC_ALL=

[r@localhost ~]$

说明:因为自己没有获得/etc/profile,所以即使自己修改了/etc/profile,也不会对系统有什么实时影响。

步骤4:用户r执行source /etc/profile之后,再查询locale和环境变量LANG

[r@localhost ~]$ source /etc/profile
[r@localhost ~]$ echo  $LANG
en_US.UTF-8
[r@localhost ~]$ locale
LANG=en_US.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=zh_CN.UTF-8

        说明:因为自己没有改变环境变量LANG的值,所以LANG的值不变。但是因为自己改变了LC_ALL的值(而且重新激活了/etc/profile),所有locale被改变了,即所有的LC_*都改成了LC_ALL的值(LANG没变)。

        如果想要改变LANG的值,可以单独在/etc/profile末尾加上一句export LANG=”zh_CN.UTF-8”。说明改变LC_ALL不能改变过LANG的值,LANG的值需要其他方法去改变。在文本后面中介绍如何改变LANG。

实验2:

step1:执行locale,发现LC_*的值都是”en_US.UTF-8”。执行echo $LANG,结果是en_US.UTF-8.

step2:在图形环境中依次点击”设置”->“detail”->”time zone”中把时区设置成”Central African republic”,然后reboot。然后发现根本不会改变locale和LANG的值。

step3:在图形环境中依次点击“设置”->“region & language”,然后把语言下面的格式改成(语言不变,只改格式format)中国,结果重启发现,locale改变了一部分(部分LC_*改成了“zh_CN.UTF-8”,还有部分LC_*依旧是en_US.UTF-8), LANG值不变。

step4:该那边在图形环境中依次点击“设置”->“region & language”,然后把语言改成“汉语”,然后重启后发现,LANG的值改成了”zh_CN.UTF-8”,locale的值step3没改变的那部分全部改成了“zh_CN.UTF-8”。

有以上实验操作,可以得出如下结论:

1.图形环境下改变linux的time zone(时区),不会对系统环境造成任何影响。

2.图形环境下改变”region & language”即”区域和语言”,会造成locale或者LANG的改变,具体如下:

(1)如果改变”region & language”中的 language,那么重启后会改变LANG的值,即LANG的值发生了相应的改变,locale中的部分LC_*的值也发生了变化。

(2)如果改变”region&lang”中的region,那么重启后发现locale中的部分LC_*发生了部分改变。

继续总结结论:

        图形环境下改变”region & language”中的language会改变LANG的值,和locale中的部分LC_*的值。

        图形化境下改变”region &language”中的region会改变locale中的部分LC_*的值。

五、补充

1.关于LANG环境变量,LANG不是依靠LC_ALL以及/etc/locale.conf改变而改变的。LANG的改变我自己发现有2个方法:

方法1:在GUI环境下,点击“系统的设置”,然后在“区域-语言”中改变“语言”,重启电脑就可以改变本用户的LANG.

方法2:直接在配置文件中改变LANG的值。例如:/etc/profile或者~/.bashrc中改变LANG的值。重启机器后都会对该用户生效。/etc/profile(全局环境变量配置文件)改变后,对每个用户都生效,~/.bashrc中改变后,只对当前用户生效。注意,如果不重启电脑,而用source或者.去获得文件,仅仅只对当前shell或者子shell中生效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/593515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web开发:接口的定义和接口实现设计

一、设计程序 using System;public interface IPrintable //接口定义1 {void Print();void Print2(); }public interface IPrintable2 : IPrintable //接口定义2 {void Print3(); }public class MethodAchieve : IPrintable, IPrintable2 //接口实现1 {public void Print(){Co…

第十四章 :案例课:部暑KVM虚拟化平台

[rootLinux01 ~]# mount /dev/cdrom /mnt //挂载安装KVM需要的软件 [rootLinux01 ~]# yum -y install qemu-kvm-tools [rootLinux01 ~]# yum -y install qemu-kvm [rootLinux01 ~]# yum -y install virt-install [rootLinux01 ~]# yum -y install qemu-img [rootLinux01 ~]#…

Oracle 日志路径查询介绍

数据库日志分析详解&#xff1a;  ORACEL RAC 体系架构分析  Oracle RAC 包含GI(Grid Infrastructure) 集群软件与Oracle数据库组成。  GI包含两个最主要的组件&#xff1a;Clusterware集群软件和ASM存储软件&#xff0c;这两个软件提供数据库高可用能力。  …

k8s之Pod的基础(上)

什么是pod&#xff1f; pod是k8s中最小的资源管理组件 pod也是最小运行容器化的应用的资源管理对象 pod是一个抽象的概念&#xff0c;可以理解为一个或者多个容器化应用的集合 在一个pod当中运行一个容器时最常用的方式 在一个pod当中同时运行多个容器&#xff0c;在一个po…

Excel·VBA二维数组组合函数的应用实例之概率计算

看到一个视频《李永乐老师的抖音 - 骰子概率问题》&#xff0c;计算投出6个骰子恰好出现1、2、3、4、5、6这6个点数的概率 李永乐老师的计算方法是&#xff0c;第1个概率为1即6/6&#xff0c;第2个不与之前相同的概率为5/6&#xff0c;第3个同理概率为4/6&#xff0c;因此该问…

快速实现前后端表单交互(minui)

&#xff08;1&#xff09;使用minui快速生成表单 &#xff08;2&#xff09;修改样式&#xff0c;将生成的html文件发送给后端 &#xff08;3&#xff09;前后端交互&#xff08;后端如何处理不太清楚&#xff09; 表单初始化&#xff1a;新增修改&#xff08;包括查看&…

【Win】没设置Windows账户密码,如何远程登录

1、按下Win&#xff0c;输入本地&#xff0c;打开本地安全策略 2、找到这个 3、双击打开&#xff0c;改成已禁用 4、正常重新启动一次或者开关机一次永久生效。 - 我第一次弄完死机了&#xff0c;再开机发现没生效

安科瑞余压监控系统在住宅小区的应用方案——安科瑞 顾烊宇

【摘要】&#xff1a;本文分析了火灾发生时人员伤亡的主要原因——烟雾&#xff0c;并针对该原因提供切实可靠的系统应用解决方案&#xff0c;并通过具体案例&#xff0c;从设计依据、产品选型、系统组网、现场安装等方式介绍余压监控系统&#xff0c;希望可以在火灾发生时较大…

Blender:从新手到专家的全方位指南

Blender&#xff0c;这款强大的开源3D建模和渲染软件&#xff0c;已经成为了CG行业的标准工具之一。它不仅拥有丰富的教程资源&#xff0c;而且还在不断发展和完善中。尽管Blender的教程主要集中在国外网站和YouTube上&#xff0c;但其全面的功能和易用性使它成为许多人的首选工…

拉取镜像自动部署:简化部署流程的高效方法知多少?

在现代软件开发中,容器化技术已经成为了一种广泛采用的方法,它提供了可移植性、隔离性和高效资源利用等优势。在容器化环境中,镜像扮演着重要的角色,它们包含了应用程序及其依赖项。本文将介绍如何使用拉取镜像自动部署的技术,以简化部署流程。 拉取镜像自动部署的核心思想…

JNI的C语言实现字节间的转换

JNI中的C语言实现字节间转换_jni 纯c char*-CSDN博客 ASCII转 16进制数 java代码_java 16进制ascii转数字-CSDN博客 十六进制字符串转换成十进制数_16进制字符串转10进制-CSDN博客 C语言16进制与ASCII字符相互转换_C 语言_脚本之家 (jb51.net) C 常见进制转换代码 - 知乎 …

贝莱德等巨头将通过最终考验!ETF获批是涨是跌?交易数据背后的博弈信号已经显现!

还记得摩根大通&#xff08;(J.P.Morgan&#xff09;首席执行长杰米-戴蒙&#xff08;Jamie Dimon&#xff09;说「如果他是政府&#xff0c;他就会关闭比特币」&#xff0c;加密货币的唯一「真正用途是犯罪、贩毒、洗钱和避税」吗&#xff1f; 然而&#xff0c;最新消息显示&a…

Android Framework默认授予第三方APP悬浮窗权限

需求 有第三方应用启动会请求悬浮窗权限,因为代码中没有做规避,会弹出请求窗口,点击确认后还要跳到设置中进行授权确认.有点麻烦,想去掉请求窗口,默认授予悬浮窗权限给APP. 悬浮窗默认实现原理 AppOpsManager 是Google在Android4.3里面引进的应用程序操作(权限)的管…

【2024.01.03】转行小白-刷css面试题01

总结 1.margin 负值问题 margin-top 和 margin-left 负值&#xff0c;元素向上、向左移动&#xff0c;自己动margin-right 负值&#xff0c;右侧元素左移&#xff0c;自身不受影响&#xff0c;别人动margin-bottom 负值&#xff0c;下方元素上移&#xff0c;自身不受影响 &am…

Django评论系统

目录 创建评论模型 将新模型添加到管理站点 创建一个表单来提交评论和验证输入数据 显示评论总数和评论列表 创建评论表单&#xff0c;当表单成功提交时&#xff0c;显示一条成功消息 创建评论模型 blog/models.py class Comment(models.Model):post models.ForeignKe…

apollo自动录bag包脚本(包含清理)

需求 制作一个apollo自动录包脚本&#xff0c;类似行车记录仪方便出问题定位。 该脚本实现以下功能&#xff1a; 自动创建录制文件夹创建以日期为命名的文件夹录制bag包全部录制或去除点云等数据量比较大的话题进行简单录制设置bag包最大占用空间每隔一分钟自动计算该文件夹占…

php之 校验多个时间段是否重复

参考网址 https://www.kancloud.cn/xiaobaoxuetp/mywork/3069416 https://segmentfault.com/a/1190000020487996 PHP判断多个时间段是否存在跨天或重复叠加的场景 /*** PHP计算两个时间段是否有交集&#xff08;边界重叠不算&#xff09;** param string $beginTime1 开始时间…

Certum ev多域名证书的优势

多域名证书作为一种能够为多个域名提供安全保护的证书类型&#xff0c;越来越受到企业的青睐。Certum作为一个成立了二十几年的CA认证机构&#xff0c;旗下的EV多域名SSL证书产品已经保护了多家企业的网站。Certum旗下的EV多域名证书作为一种能够为多个域名提供安全保护的证书类…

Python 使用 pymssql 连接 SQL Server 报错:DB-Lib error message 20002, severity 9

文章目录 版本说明排查过程参考个人简介 版本说明 Python 3.8SQL Server 2008pymssql 2.2.11 排查过程 最近给一个学妹看一个 Python 使用 pymssql 连接 SQL Server 报错问题&#xff0c;具体报错信息如下&#xff1a; Error: (20002, bDB-Lib error message 20002, severi…

【C语言】Linux socket 编程

一、Socket 通信过程 在 Linux 系统中&#xff0c;socket 是一种特殊的文件描述符&#xff0c;用于在网络中的不同主机间或者同一台主机中的不同进程间进行双向通信。它是通信链路的端点&#xff0c;可以看作是网络通信的接口。Socket 通信过程主要分为以下几个步骤&#xff1a…