使用ssh遠程登錄 IDC機房服務器,發現總是出現以下告警信息:docker
-bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory -bash: warning: setlocale: LC_COLLATE: cannot change locale (en_US.UTF-8): No such file or directory -bash: warning: setlocale: LC_MESSAGES: cannot change locale (en_US.UTF-8): No such file or directory -bash: warning: setlocale: LC_NUMERIC: cannot change locale (en_US.UTF-8): No such file or directory -bash: warning: setlocale: LC_TIME: cannot change locale (en_US.UTF-8): No such file or directory
緣由分析:vim
根據上面登陸警告提示可知,系統已經設置了默認地區_語言.字符集爲en_US.UTF-8,可是在系統中沒有定義對應的locale文件, 因此只須要手動生成這個locale文件便可!
解決辦法:centos
[root@centos6-vm01 ~]# vim /etc/environment #添加下面兩行內容 LANG="en_US.UTF-8" LC_ALL= [root@centos6-vm01 ~]# source /etc/environment [root@centos6-vm01 ~]# vim /etc/sysconfig/i18n LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16" [root@centos6-vm01 ~]# cat /etc/sysconfig/i18n 而後執行下面命令,生成 en_US.UTF-8這個字符集的locale文件 [root@centos6-vm01 ~]# localedef -v -c -i en_US -f UTF-8 en_US.UTF-8 如上操做後,再次ssh登錄後就不會出現這條告警信息了。
若是出現:-bash: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)bash
解決辦法 [root@localhost ~]# vim /etc/sysconfig/i18n LANG="zh_CN.UTF-8" LC_ALL="zh_CN.UTF-8" SYSFONT="latarcyrheb-sun16" 第一行解決了中文亂碼問題 第二行解決了"LC_ALL: cannot change locale (zh_CN.UTF-8)"的問題。 [root@localhost ~]# source /etc/sysconfig/i18n 接着安裝: [root@localhost ~]# yum install glibc-common kde-l10n-Chinese 安裝以後,重啓服務器,上述問題消失。
注意:不一樣類型的服務器配置方法會有差別,須要根據實際機器狀況,多嘗試一些方法,才能解決問題。服務器
=======================================================================ssh
也有多是系統中的glibc和locale的庫版本不兼容。
解決辦法:刪除locale庫再重建一下,前提是你的文件系統中要有相應的數據文件。centos7
[root@localhost ~]# rm -f /usr/lib/locale/locale-archive [root@localhost ~]# localedef -i en_US -f ISO-8859-1 -A /usr/share/locale/locale.alias en_US [root@localhost ~]# localedef -i zh_CN -f GB2312 -A /usr/share/locale/locale.alias zh_CN [root@localhost ~]# yum -y reinstall glibc-common
======================================================================spa
再看一個在centos7系統上使用/bin/sh或su命令出現的告警:warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8) ,解決辦法以下(注意:這種方法針對的是centos7,centos6系統不同):blog
[root@uatblockchain04 ~]# locale locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory 在物理機上,只要執行: [root@localhost ~]# yum -y install kde-l10n-Chinese telnet [root@localhost ~]# yum -y reinstall glibc-common 還須要修改: [root@localhost ~]# vim /etc/locale.conf LC_ALL="zh_CN.UTF-8" [root@localhost ~]# source /etc/locale.conf ---------------------------------------------------------------------- 注意若是是在在Dockerfile裏面執行的時候,就不太同樣了: 必須執行三個步驟纔不會出錯 yum -y install kde-l10n-Chinese telnet && \ yum -y reinstall glibc-common &&\ yum clean all && \ localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 && \ 或加上 cat /dev/null > /etc/locale.conf && echo "LC_ALL=\"zh_CN.UTF-8\"" > /etc/locale.conf 這樣才能夠保證中文不會有問題。 其中碰到一個狀況:在基礎鏡像的再安裝軟件的時候再次碰到這個異常提示 最後的處理方案是:dockerfile構建過程執行警告的地方後,再執行一次 localedef -c -f UTF-8 -i zh_CN zh_CN.utf8