![缺少 Oracle Linux(红帽系列)区域设置](https://linux22.com/image/203956/%E7%BC%BA%E5%B0%91%20Oracle%20Linux%EF%BC%88%E7%BA%A2%E5%B8%BD%E7%B3%BB%E5%88%97%EF%BC%89%E5%8C%BA%E5%9F%9F%E8%AE%BE%E7%BD%AE.png)
我正在登录 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
问题是,所有可用的区域设置在哪里?我怎样才能把它们找回来?
我在下面回答了我自己的问题,在这里发布给其他人。
答案1
事实证明,一位热衷于打造精益系统的开发人员将它们从 /usr/lib/locales/locale-archive 中删除了
一旦语言环境存档的语言环境被删除,恢复它们的一个好方法是从源包中检索并重建存档(我使用 yum 提供的 /usr/lib/locales/C.utf8 来找出我需要哪个包, glibc-common),我像这样重建了档案:
cd /tmp/tempdir
yumdownloader glibc-common
rpm2cpio glibc-common-2.17-325.0.1.el7_9.x86_64.rpm | cpio -idmv
cp /tmp/tempdir/usr/lib/locale/locale-archive.tmpl usr/lib/locale/locale-archive.tmpl
build-locale-archive
从模板文件的源包版本重建存档后,我可以再次看到所有语言环境,并且警告现在消失了,因为可以再次引用语言环境。这可能有点像大锤方法,我从 build-locale-archive 的 --help 标志中注意到有一个安装选项,可能允许更直接地安装或修复丢失的语言环境,但此时我已经重建了一切。
希望这对将来的其他人有帮助。