locale: Cannot set LC_ALL to default locale: No such file or directory
这种情况是在从 Debian Jessie 升级到 Stretch(在升级到 Buster 的过程中)之后开始发生的。
在这里查询,同样的问题已经发生多年了。
错误消息没有指定未找到哪个文件。
更让我惊讶的是(在阅读了多个线程之后)没有人注意到这一点。就好像输出不完整的错误消息是可以的。
Linux 已经达到了一定程度的复杂性,找出谁拥有此代码并要求更改介于兼职工作和不切实际的任务之间
如果您不告诉我们出了什么问题,我们就无法帮助您。
答案1
No such file or directory
是与错误代码关联的错误消息ENOENT
。
这是缩写错误 没有输入,因此通常与目录没有给定名称的条目相关,但它也经常用来表示不存在,即使这不是专门针对给定文件的。
或者,有时也ESRCH
使用。那是错误海RCH,但是相应的英文错误消息通常是,No such process
如果错误不是专门与进程有关的,那么最终会更令人困惑。
无论如何,在您的情况下,错误告诉您无法找到区域设置。它可能指也可能不指实际文件,但这几乎不相关。
在这里,如果我这样做:
$ LC_ALL=foo 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
$ LC_ALL=foo strace locale 2>&1 | grep ENOENT
openat(AT_FDCWD, "/usr/lib/locale/foo/LC_CTYPE", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/foo/LC_MESSAGES", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/foo/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
我确实看到一些系统调用因ENOENT
错误而失败,但路径不一定与错误相关。
对于确实存在的语言环境,我看到:
$ strace locale 2>&1 | grep /usr/lib/locale
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
它不需要寻找额外的文件,因为所有信息都在该文件中locale-archive
。
locale -a
会告诉您系统上可用区域设置的列表。如果任何LC_*
或LANG
环境变量包含该列表中未包含的内容,您就会看到此类错误。
如何使更多区域设置可用取决于系统。
在 Debian 上,通常使用dpkg-reconfigure locales
.一般来说,最终,语言环境最终会使用localedef
标准命令从源代码进行编译。