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
標準コマンドを使用してソースからコンパイルされます。