我需要减小locale-archive
某些 RHEL6 系统上的文件大小。
这是我系统上的该文件:
[root@-dev-007 locale]# ls -l
total 96800
-rw-r--r--. 1 root root 99158704 Sep 9 15:22 locale-archive
-rw-r--r--. 1 root root 0 Jun 20 2012 locale-archive.tmpl
所以我做了这个...
[root@-dev-007 locale]# localedef --list | grep zh_CN
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
zh_CN
...所以我想我可以像这样摆脱...
[root@-dev-007 locale]# localedef --delete-from-archive zh_CN
...我可以看到zh_CN
不再像这样列出...
[root@-dev-007 locale]# localedef --list | grep zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
...但是尺寸locale-archive
并没有变小...
[root@-dev-007 locale]# ls -l
total 96800
-rw-r--r--. 1 root root 99158704 Sep 9 17:16 locale-archive
-rw-r--r--. 1 root root 0 Jun 20 2012 locale-archive.tmpl
......还有什么我需要做的吗?
答案1
您可以首先通过执行以下操作删除所有不需要的区域设置:
$localedef --list-archive | grep -v -i ^en | xargs localedef --delete-from-archive
哪里^en
可以替换为您希望保留的区域设置
然后
$build-locale-archive
如果这给你一个类似的错误
$build-locale-archive
/usr/sbin/build-locale-archive: cannot read archive header
然后试试这个
$mv /usr/lib/locale/locale-archive /usr/lib/locale/locale-archive.tmpl
$build-locale-archive
如果仍然失败,请检查您的版本。根据这一页较新的版本没有重建存档所需的文件以节省空间。你需要运行
yum reinstall glibc-common
在 Red Hat Enterprise Linux 的更高版本中,您可以使用dnf
类似的应用程序。
答案2
在亚马逊 Linux 上
从区域设置存档中删除未使用的存档。此命令删除除以 en 开头的所有内容。
localedef --delete-from-archive $(localedef --list-archive | grep -v -i ^en | xargs)
将 locale-archive(已删除区域设置)文件复制为新的 locale-archive.tmpl 文件
cp /usr/lib/locale/locale-archive /usr/lib/locale/locale-archive.tmpl
运行 build-locale-archive
build-locale-archive
笔记:如果您运行 build-locale-archive ,它会在每次运行后将 .tmpl 文件清零,当您再次运行它时,您将看到错误:
build-locale-archive: cannot read archive header
您可以通过将当前 locale-archive 复制到 locale-archive.tmpl 或下载并解压 glibc-common 来获取 locale-archive.tmpl 文件的副本。如果您使用 glibc-common RPM 中的默认 locale-archive.tmpl 文件并build-locale-archive
对其运行,它将创建一个完整的 (~102MB) 区域设置存档。您需要重复上述步骤才能获得较小尺寸的存档。
在上述情况下,删除除 en_* 之外的所有语言环境,我的语言环境存档从 102MB 减少到 3.4MB
答案3
稍微简单一点的方法,
cp /usr/lib/locale/locale-archive /usr/lib/locale/locale-archive.tmpl
build-locale-archive --install="en"
其中“en”是冒号分隔的列表,例如“de:en:ja”
我一直在尝试找到一种方法来对不在 /usr/lib/locale 中的文件执行此操作,但到目前为止所有尝试都失败了。不过,可能需要另一个线程来解决这个问题。