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
이 목록에 없는 항목이 포함된 경우 이 오류가 표시됩니다.
추가 로캘을 사용 가능하게 만드는 방법은 시스템에 따라 다릅니다.
데비안에서는 일반적으로 로케일을 사용하여 수행됩니다 dpkg-reconfigure locales
. 일반적으로 로케일은 localedef
표준 명령을 사용하여 소스에서 컴파일됩니다.