根据一条常见的常见的ssh命令的提示信息,简单整理内容如下:

一条错误的确认

现象

本地的virtual box的一个安装了centos7.4虚拟机,通过ssh登陆时候提示了如下错误:

liumiaocn:etc liumiao$ ssh devops
Last login: Fri Jan 19 04:23:38 2018 from 192.168.163.2
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
[root@devops ~]# 

确认

通过确认LC_相关的环境变量可以了解到设定的不足

[root@devops ~]# env |grep LC
LC_CTYPE=UTF-8
[root@devops ~]# 

使用locale命令查询确认当前语言环境信息,则确认到了问题所在:

[root@devops ~]# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=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=
[root@devops ~]# 

对应方法

对应方法有很多,也会根据OS的不同对应方法略有不同,比如centos下可以通过修改/etc/locale.conf来对LC_相关的环境变量进行设定即可。

[root@devops ~]# grep LC_CTYPE /etc/locale.conf
LC_CTYPE="en_US.UTF-8"
[root@devops ~]#

当然也可以添加LC_ALL,效果也是一样,再次登陆则不会提示该错误

liumiaocn:etc liumiao$ ssh devops
Last login: Fri Jan 19 04:38:27 2018 from 192.168.163.2
[root@devops ~]# env |grep LC
LC_CTYPE=en_US.UTF-8
[root@devops ~]# 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=
[root@devops ~]# 

常用命令

locale常用如下两种用法:

locale :确认当前语言环境信息
locale -a:确认可用的语言环境

LC系环境变量

我们是通过修改LC_CTYPE达到了目的,LC_CTYPE是一个非常重要的变量,其用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等。除此之外还有很多其他的变量诸如:

变量说明
LC_NUMERIC非货币的数字显示格式
LC_TIME时间和日期格式
LC_COLLATE排序和比较规则
LC_MONETARY货币格式
LC_MESSAGES提示信息的语言

注意事项:

LANGUAGE的作用和LC_MESSAGES相似都是用于设定语言信息,只不过LANGUAGE范围更广,一旦LANGUAGE设定,LC_MESSAGES已经设定的内容则不再会起作用。
LANGUAGE可以同时设定多个参数,用:隔开
LC_ALL,如果该值设置了,则该值会覆盖所有LC_*的设置值。

LANG环境变量

通过设定LANG可以临时或者永久的设定语言环境,export的作用域在于当前终端,如果写到/etc/profile中,则对所有的用户永久起作用

注意事项:
LANG,LC_*的默认值,是最低级别的设置,如果LC_*没有设置,则使用该值。
LANG的值不受LC_ALL影响

locale

命名格式

locale所支持的命名格式为: 语言类型_区域.字符集, 比如

locale信息语言类型区域字符集
en_US.UTF-8英语美国UTF8
zh_CN.GBK中文中国简体和繁体中文中文字符集
zh_CN.gb2312中文中国简体中文中文字符集

locale的总类很多,比如在centos上就支持很多种语言环境:

[root@devops ~]# locale -a |wc -l
789
[root@devops ~]# 
[root@devops ~]# locale -a |head -n 10
aa_DJ
aa_DJ.iso88591
aa_DJ.utf8
aa_ER
aa_ER@saaho
aa_ER.utf8
aa_ER.utf8@saaho
aa_ET
aa_ET.utf8
af_ZA
[root@devops ~]# 
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐