我正在登录 dev oracle linux 7 系统并在登录时注意到这些警告:
Last login: Thu Mar 24 15:23:29 2022 from x.x.x.x
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf-8)
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf-8)
/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.utf-8)
所以我检查了系统上的所有语言环境并看到了这个;我只有最基本的系统语言环境。
$localectl list-locales
C.utf8
$ locale -a
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_COLLATE to default locale: No such file or directory
C
C.utf8
POSIX
问题是,所有可用的语言环境在哪里?以及如何让他们回来?
我在下面回答了我自己的问题,在这里为其他人发帖。
事实证明,一位热衷于制作精益系统的开发人员将它们从 /usr/lib/locales/locale-archive 中删除
一旦 locale-archive 删除了它的语言环境,恢复它们的一个好方法是从源包中检索和重建存档(我使用 yum 提供 /usr/lib/locales/C.utf8 来确定我需要哪个包, glibc-common),然后我像这样重建了存档:
从模板文件的源包版本重建存档后,我可以再次看到所有语言环境,并且警告现在消失了,因为可以再次引用语言环境。这可能有点像大锤的方法,我从 build-locale-archive 的 --help 标志中注意到有一个安装选项可能允许更直接地安装或修复丢失的语言环境,但到目前为止我已经重建了一切。
希望这对将来的其他人有所帮助。