FastNetMon

Thursday 19 August 2010

Кривая кодировка в Linux консоли, как бороться?

Многие пользователи уж очень любят ставить русскую локаль в SSH, при поддержке же это выливается в постоянные проблемы с кракозяблами :) Так мало того, что машину нужно починить, так еще и кракозяблы победить нужно!

Итак, есть универсальное решение вот такой проблемы:

apt-get install locales-all
?????? ??????? ???????... ??????
?????????? ?????? ????????????
?????? ?????????? ? ?????????... ??????
??? ??????????? ????? ????? ?????? locales-all.
????????? ?????? ??????????????? ????????????? ? ?????? ?? ?????????:
libdns45 libisccc40 liblwres40 libbind9-40 libisccfg40 libisc45
??? ?? ???????? ??????????? 'apt-get autoremove'.
????????? 0, ??????????? 0 ????? ???????, ??? ???????? ???????? 0 ???????, ? 0 ??????? ?? ?????????.
?? ??????????? ?? ????? ??? ??????? 1 ???????.
????? ?????? ????????, ??ߣ? ???????? ????????? ???????????? ??????ԣ? ?? 0B.
????????????? ????? acct (6.4~pre1-6) ...
chown: ???????? ??????: `root:adm'
dpkg: ?? ??????? ?????????? ???????? acct (--configure):
?????????? post-installation script ????????? ??? ?????? 1
??? ????????? ????????? ??????? ????????? ??????:
acct
E: Sub-process /usr/bin/dpkg returned an error code (1)


Мало понятного, не правда ли?

При запросе текущей локали получаем имя виновницы торжества:

locale
LANG=ru_RU.KOI8-R
LC_CTYPE="ru_RU.KOI8-R"
LC_NUMERIC="ru_RU.KOI8-R"
LC_TIME="ru_RU.KOI8-R"
LC_COLLATE="ru_RU.KOI8-R"
LC_MONETARY="ru_RU.KOI8-R"
LC_MESSAGES="ru_RU.KOI8-R"
LC_PAPER="ru_RU.KOI8-R"
LC_NAME="ru_RU.KOI8-R"
LC_ADDRESS="ru_RU.KOI8-R"
LC_TELEPHONE="ru_RU.KOI8-R"
LC_MEASUREMENT="ru_RU.KOI8-R"
LC_IDENTIFICATION="ru_RU.KOI8-R"
LC_ALL=ru_RU.KOI8-R


А теперь узнаем, какие переменные среды за нее отвечают:

env | grep KOI
LC_ALL=ru_RU.KOI8-R
LANG=ru_RU.KOI8-R


И теперь, вуаля:

LANG=C LC_ALL=C apt-get install locales-all
Reading package lists... Done
Building dependency tree
Reading state information... Done
locales-all is already the newest version.
The following packages were automatically installed and are no longer required:
libdns45 libisccc40 liblwres40 libbind9-40 libisccfg40 libisc45
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
After this operation, 0B of additional disk space will be used.
Setting up acct (6.4~pre1-6) ...
chown: invalid group: `root:adm'
dpkg: error processing acct (--configure):
subprocess post-installation script returned error exit status 1
Errors were encountered while processing:
acct
E: Sub-process /usr/bin/dpkg returned an error code (1)


Кстати, еще бывают всевозможные новомодные шелл-оболочки (придуманные, очевидно, чтобы замучать бедных ничего не делающих администраторов), которые лучше отключить вызовом привычного баша командой:
bash

No comments :

Post a Comment

Note: only a member of this blog may post a comment.