Генерация локали ru

При установке Debian я оставляю настройки локали по-умолчанию, т.к. всё равно потом занимаюсь тонкой настройкой. При таком подходе после установки ОС на VM можно увидеть интересные артефакты отсутствующей локали ru. Вот, например, после подключения через SSH я могу создать файл с кириллицей в имени:

$ touch very_important_file
$ touch очень_важный_файл

Локаль и отображение кириллицы на клиентской машине уже есть, поэтому создать файл никаких проблем нет. Но вот при запросе ls в ответ приходит “мусор”:

$ ls -1

very_important_file
''$'\320\276\321\207\320\265\320\275\321\214''_'$'\320\262\320\260\320\266\320\275\321\213\320\271''_'$'\321\204\320\260\320\271\320\273'

Если Вы видите такое для уже существующих файлов, то пугаться сразу не стоит.

Дело в отсутствующей локали на сервере (на VM). Локаль ru не скомпилирована и сервер просто не знает как ему правильно кодировать имя файла. Проверим список доступных локалей на сервере, чтобы не быть голословными:

$ localectl list-locales

C.UTF-8
en_US.UTF-8

Из доступных есть только C и en_US, это настройки по-умолчанию. Документацию по генерации локалей можно найти в man locale.gen. Проверим, какие локали ru доступны в файле locale.gen, который можно найти в директории /etc/:

$ cat /etc/locale.gen | grep ru_RU

# ru_RU ISO-8859-5
# ru_RU.CP1251 CP1251
# ru_RU.KOI8-R KOI8-R
# ru_RU.UTF-8 UTF-8

Из этих вариантов в современном мире с UTF-8 меня интересует, конечно же, только ru_RU.UTF-8 UTF-8. Раскомментирую эту локаль, чтобы её потом скомпилировать:

$ sudo sed -i 's/# ru_RU\.UTF-8 UTF-8/ru_RU\.UTF-8 UTF-8/g' \
    /etc/locale.gen
$ cat /etc/locale.gen | grep ru_RU

# ru_RU ISO-8859-5
# ru_RU.CP1251 CP1251
# ru_RU.KOI8-R KOI8-R
ru_RU.UTF-8 UTF-8

Пришло время запустить locale-gen, чтобы он перекомпилировал выбранные локали:

$ sudo locale-gen

Generating locales (this might take a while)...
  ru_RU.UTF-8... done
  en_US.UTF-8... done
Generation complete.

Отлично, теперь перепроверяю вывод ls, так убежусь, что сервер узнал о ru:

$ ls -1

very_important_file
очень_важный_файл

Заработало, значит теперь можно увидеть кириллицу на этой VM с SSH-сервером.

Если Вы хотите обсудить содержание заметки, задать вопросы или предложить изменения, то со мной можно связаться в Telegram