linux基本系统配置 |
您所在的位置:网站首页 › 设置语言环境en-us › linux基本系统配置 |
最近学到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中生效。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |