如何删除系统区域设置,与如何删除不必要的区域设置?中要求的包区域设置相反?
最近我收到了以下错误:
locale: Cannot set LC_ALL to default locale: No such file or directory系统中的只有 en区域设置:
$ grep -r en /var/lib/locales/supported.d/*
/var/lib/locales/supported.d/local: en_US ISO-8859-1
/var/lib/locales/supported.d/local: en_US.UTF-8 UTF-8
$ locale -a | grep en
en_US
en_US.iso88591
en_US.utf8但不是en,就像perl抱怨的那样:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "",
LC_ALL = (unset),
LC_MEASUREMENT = "en",
LC_PAPER = "en",
LC_MONETARY = "en",
LC_NAME = "en",
LC_ADDRESS = "en",
LC_NUMERIC = "en",
LC_TELEPHONE = "en",
LC_IDENTIFICATION = "en",
LC_TIME = "en",
LANG = "C"所以我添加区域设置 en:
% locale-gen en
Generating locales (this might take a while)...
en_AG.UTF-8... done
en_AU.UTF-8... done
en_BW.UTF-8... done
en_CA.UTF-8... done
en_DK.UTF-8...^C我不想要上面的任何一个区域(只有en_US),但是现在我无法摆脱它们--我遵循了https://serverfault.com/questions/394610/remove-a-locale-in-ubuntu中的步骤
但说到最后一步,我仍然得到:
% locale-gen
Generating locales (this might take a while)...
en_AG.UTF-8... done
en_AU.UTF-8... done
en_BW.UTF-8... done
en_CA.UTF-8... done
en_DK.UTF-8...^C如何删除所有上述区域设置并只保留en_US?
Conclusion &补编
由于贡纳的回答,这确实是由/etc/locale.gen中的条目引起的,因为这些额外的区域设置。只有FTR,这就是locale-gen en在/etc/locale.gen中所做的改变:
$ sed '/^#/d; /en/p;' /etc/locale.gen
en_AG UTF-8
en_AG UTF-8
en_AU.UTF-8 UTF-8
en_AU.UTF-8 UTF-8
en_BW.UTF-8 UTF-8
en_BW.UTF-8 UTF-8
en_CA.UTF-8 UTF-8
en_CA.UTF-8 UTF-8
en_DK.UTF-8 UTF-8
en_DK.UTF-8 UTF-8
en_GB.UTF-8 UTF-8
en_GB.UTF-8 UTF-8
en_HK.UTF-8 UTF-8
en_HK.UTF-8 UTF-8
en_IE.UTF-8 UTF-8
en_IE.UTF-8 UTF-8
en_IL UTF-8
en_IL UTF-8
en_IN UTF-8
en_IN UTF-8
en_NG UTF-8
en_NG UTF-8
en_NZ.UTF-8 UTF-8
en_NZ.UTF-8 UTF-8
en_PH.UTF-8 UTF-8
en_PH.UTF-8 UTF-8
en_SC.UTF-8 UTF-8
en_SC.UTF-8 UTF-8
en_SG.UTF-8 UTF-8
en_SG.UTF-8 UTF-8
en_US.UTF-8 UTF-8
en_US.UTF-8 UTF-8
en_ZA.UTF-8 UTF-8
en_ZA.UTF-8 UTF-8
en_ZM UTF-8
en_ZM UTF-8
en_ZW.UTF-8 UTF-8
en_ZW.UTF-8 UTF-8作为比较,下面是默认设置(即,没有上述任何额外的区域设置):
$ sed '/^#/d;' /etc/locale.gen; echo ---
---发布于 2020-10-10 11:44:47
注意:下面的一些命令需要根权限,请考虑使用sudo。
根据man locale-gen,区域设置在几个文件中。
/etc/locale.gen是主配置文件,它有一个简单的格式:不为空且不以#开头的每一行都被视为要构建的区域设置定义。/var/lib/locales/supported.d/包含语言包提供的locale.gen片段的目录.不要手动编辑这些文件,它们将在软件包升级时被覆盖。
区域设置被编译(生成)到一个文件中。
/usr/lib/locale/locale-archive通常默认的地区存档位置。
关于Arch Wiki地区的详细信息。
若要列出可用(已知)区域设置,请运行以下任何命令(输出差异较小)。
locale -a
localectl list-locales若要检查(已经)生成的区域设置,请运行以下命令。
localedef --list-archive若要检查当前使用的区域设置,请运行以下任何命令(输出差异较小)。
locale
localectl区域设置通常是通过在/etc/locale.gen中取消注释行来设置的,之后需要运行locale-gen。
nano /etc/locale.gen # uncomment desired lines (locales)
locale-gen这将为/etc/locale.gen中的每个未注释行以及/var/lib/locales/supported.d/下的每个未注释行将(generate)编译(Generate)到D24中,不管它们以前是否已经编译过。
或者,命令
locale-gen 将取消对locale-gen中相应行的注释,同时生成所需的区域设置,并且仅此一行。
注意:locale-gen的实现依赖于发行版。例如,上面的命令在Ubuntu/Debian中是有效的,但在ArchLinux中无效。
在发出locale-gen时,将删除编译后的存档,并重新生成/etc/locale.gen和/usr/lib/locale/locale-archive下的所有区域设置。命令locale-gen --purge 不执行修饰符建议的操作,相反:它移除所有已编译的区域设置,但指示的区域设置除外。为了确保在发出locale-gen或执行更新时只生成特定的区域设置,必须同时考虑/etc/locale.gen和/usr/lib/locale/locale-archive。
要删除/etc/locale.gen中的区域设置,只需注释所需的行并使用locale-gen重新生成区域设置。
在/var/lib/locales/supported.d/下删除区域设置要复杂得多。由于任何文件/var/lib/locales/supported.d/都依赖于包language-pack--base,所以在更新后者时,将恢复对前者的任何更改。要解决这个问题,只需保存/var/lib/locales/supported.d/下更新文件的包即可。在Ubuntu/Debian中实现这一目标的命令如下。
apt-mark language-pack--base若要更新所持有的包,必须对其进行未标记或简单的--ignore-hold。
解决办法。防止在/var/lib/locales/supported.d/下更改的更有侵扰性但更通用的解决方案是使用“不可变(I)”属性在其中设置文件。因此,与其删除文件,不如清空它们。例如:
cd /var/lib/locales/supported.d/
rm && touch # has been emptied
lsattr # regular attributes
chattr +i # adding (+) immutable
lsattr # checking attributes设置区域设置设置和生成区域设置不会设置系统区域设置。以下任何命令都可以实现这一点。
echo LANG= | sudo tee /etc/locale.conf # reboot (might be ignored in Ubuntu)
localectl set-locale LANG=发布于 2019-06-29 17:55:27
您应该编辑/etc/locale.gen并注释您不想要的区域设置。那就跑
sudo locale-gen不存在任何名称为en的区域设置。您可能希望使用的是en_US.UTF-8,而不是en_US。(后者支持latin1编码。)
发布于 2021-11-27 18:43:30
Which语言环境安装在我的计算机上?
可以使用locale命令检查系统上生成和配置的区域设置:
locale .列出当前区域设置配置。locale -a .列出在系统上生成的所有区域设置。locale -a -v .列出所有区域设置并显示有用的附加信息(例如包含区域设置信息数据文件的目录名称)上面的最后一个命令使您看到所有生成的区域设置都位于/usr/lib/locale/中,如果不需要,您可以删除它们中的任何一个。每个区域设置信息包都是一个包含文本文件和其他目录的目录。
Supported语言环境
您希望系统支持的所有区域设置都在/var/lib/locales/supported.d/中的文本文件中列出。这些文件有两列,语言标记和字符映射。
我希望我的系统只知道美式英语,所以我那里只有一个文件,名为en,它只包含一行:
en_US UTF-8Error消息
如果在发出locale命令时显示错误消息,例如
locale: Cannot set LC_ALL to default locale: No such file or directory确保文件/etc/default/locale存在并具有适当的内容,如:
LANG="en_US"
LANGUAGE="en_US:en"Get处理不需要的地区数据--一步一步地
现在,我们知道了开始清理系统的区域信息所需的所有细节:
/var/lib/locales/supported.d/中的地区文件(S),并删除所有不需要的地区(每行一个地区)/etc/default/locale (参见上面的示例)rm -rfv /usr/lib/locale/*locale-gen就这样!重新启动计算机,使更改生效。然后从上面运行一个或多个locale命令示例,以确保结果与预期的相同。
引用:
https://askubuntu.com/questions/1154895
复制相似问题