Язык вывода netstat

У меня есть программа здесь, которая зависит от вывода netstat . Более конкретный: netstat -apn .

Вот пример нормального вывода.

 Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - 

У моего клиента есть другой результат (в качестве примера):

 Proto Recv-Q Send-Q Endereço Local Endereço Remoto Estado PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* OUÇA - 

Я хочу протестировать свое программное обеспечение с измененным выходом netstat , как и выход клиента.

Поэтому возникает вопрос: что мне делать, чтобы изменить выходной язык netstat , чтобы я мог воспроизвести ошибки, которые клиент получает?

Я уже пытался изменить язык с помощью export LANG=pt_PT , но результат не изменился.

2 Solutions collect form web for “Язык вывода netstat”

Сначала вам нужно убедиться, что у вашей машины установлен необходимый языковой стандарт. Вы можете видеть доступные локали с locale -a . Например, в моей системе:

 $ locale -a C C.UTF-8 el_GR.utf8 en_US.utf8 fr_FR.utf8 POSIX 

Как вы можете видеть выше, у меня нет португальского языка. На моем Debian я могу создать его, запустив sudo dpkg-reconfigure locales и выбрав соответствующий языковой стандарт:

Конфигурация пакета

  ┌──────────────────────────┤ Configuring locales ├──────────────────────────┐ │ Locales are a framework to switch between multiple languages and allow │ │ users to use their language, country, characters, collation order, etc. │ │ │ │ Please choose which locales to generate. UTF-8 locales should be chosen │ │ by default, particularly for new installations. Other character sets may │ │ be useful for backwards compatibility with older systems and software. │ │ │ │ Locales to be generated: │ │ │ │ [ ] pt_BR.UTF-8 UTF-8 ↑ │ │ [ ] pt_PT ISO-8859-1 ▒ │ │ [*] pt_PT.UTF-8 UTF-8 ▮ │ │ [ ] pt_PT@euro ISO-8859-15 ▒ │ │ [ ] quz_PE UTF-8 ↓ │ │ │ │ │ │ <Ok> <Cancel> │ │ │ └───────────────────────────────────────────────────────────────────────────┘ 

После нажатия Enter вы должны получить:

 $ sudo dpkg-reconfigure locales Generating locales (this might take a while)... el_GR.UTF-8... done en_US.UTF-8... done fr_FR.UTF-8... done pt_PT.UTF-8... done Generation complete. 

Если вы не используете дистрибутив на основе Debian, вам нужно будет сделать это вручную:

  1. Добавьте соответствующее имя локали в /etc/locale.gen . Например:

     pt_PT.UTF-8 UTF-8 
  2. Запустить locale-gen

После вышеуказанных шагов (либо ручной подход, либо dpkg-reconfigre locales one), locale -a также перечислит португальский язык:

 $ locale -a C C.UTF-8 el_GR.utf8 en_US.utf8 fr_FR.utf8 POSIX pt_PT.utf8 

Теперь вы можете выбрать, какой язык выводится на экран:

 $ LC_ALL=el_GR.utf8 date Τετ 14 Οκτ 2015 12:34:28 μμ EEST $ LC_ALL=fr_FR.utf8 date mercredi 14 octobre 2015, 12:35:07 (UTC+0300) $ LC_ALL=pt_PT.utf8 date Qua Out 14 12:35:11 EEST 2015 

Однако независимо от того, сможет ли конкретная программа печатать выходные данные в выбранной локали, будет зависеть от того, была ли она переведена; о том, поставляется ли пакет с соответствующим файлом перевода .mo . В случае netstat это /usr/share/locale/${LANG%_*}/LC_MESSAGES/net-tools.mo . На моем Debian, французский язык имеет это, но португальский не делает:

 $ ls /usr/share/locale/{fr,pt}/LC_MESSAGES/net* ls: cannot access /usr/share/locale/pt/LC_MESSAGES/net*: No such file or directory /usr/share/locale/fr/LC_MESSAGES/net-tools.mo 

Вот почему я могу запустить netstat на французском языке:

 $ LC_ALL=fr_FR.utf8 netstat -apn | head -n2 (Tous les processus ne peuvent être identifiés, les infos sur les processus non possédés ne seront pas affichées, vous devez être root pour les voir toutes.) Connexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name 

Но не на португальском:

 $ LC_ALL=pt_PT.utf8 netstat -apn | head -n2 (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 

Вам нужно установить языковой пакет для выбранного вами языка, иначе утилита перевода текста ( gettext в системах GNU) не сможет перевести сообщения на выбранный вами язык:

 $ strace -fe trace=open sh -c 'LANGUAGE=fr_FR.utf8 netstat -tnlp' open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 Process 14847 attached [pid 14847] open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 [pid 14847] open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 [pid 14847] open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 [pid 14847] open("/proc/3690/cmdline", O_RDONLY) = 5 [pid 14847] open("/proc/8579/cmdline", O_RDONLY) = 5 [pid 14847] open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3 [pid 14847] open("/usr/share/locale/fr_FR.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 14847] open("/usr/share/locale/fr_FR/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 14847] open("/usr/share/locale/fr.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 14847] open("/usr/share/locale/fr/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 14847] open("/usr/share/locale-langpack/fr_FR.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 14847] open("/usr/share/locale-langpack/fr_FR/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 14847] open("/usr/share/locale-langpack/fr.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 14847] open("/usr/share/locale-langpack/fr/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name .... [pid 14847] +++ exited with 0 +++ --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=14847, si_status=0, si_utime=0, si_stime=2} --- +++ exited with 0 +++ 

Вы можете увидеть, как этот процесс пытается найти в /usr/share/locale и /usr/share/locale-langpack чтобы получить текст перевода для пакета net-tools (к которому принадлежит netstat ).

Теперь установите языковой пакет, чтобы он работал. В системе Ubuntu:

 sudo apt-get install language-pack-fr 

Другая система, соответствующий языковой пакет для пакета может быть включен самим пакетом, по крайней мере, на Debian и Centos:

 $ apt-file search /usr/share/locale/fr/LC_MESSAGES/net-tools.mo net-tools: /usr/share/locale/fr/LC_MESSAGES/net-tools.mo 

(В Centos вы можете использовать yum whatprovides )

Затем:

 $ strace -fe trace=open sh -c 'LANGUAGE=fr_FR.utf8 netstat -tnlp' open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 Process 15155 attached [pid 15155] open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 [pid 15155] open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 [pid 15155] open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 [pid 15155] open("/proc/3690/cmdline", O_RDONLY) = 5 [pid 15155] open("/proc/8579/cmdline", O_RDONLY) = 5 [pid 15155] open("/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3 [pid 15155] open("/usr/share/locale/fr_FR.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 15155] open("/usr/share/locale/fr_FR/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 15155] open("/usr/share/locale/fr.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 15155] open("/usr/share/locale/fr/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 15155] open("/usr/share/locale-langpack/fr_FR.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 15155] open("/usr/share/locale-langpack/fr_FR/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 15155] open("/usr/share/locale-langpack/fr.utf8/LC_MESSAGES/net-tools.mo", O_RDONLY) = -1 ENOENT (No such file or directory) [pid 15155] open("/usr/share/locale-langpack/fr/LC_MESSAGES/net-tools.mo", O_RDONLY) = 3 [pid 15155] open("/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = 3 (Tous les processus ne peuvent être identifiés, les infos sur les processus non possédés ne seront pas affichées, vous devez être root pour les voir toutes.) Connexions Internet actives (seulement serveurs) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name .... [pid 15155] +++ exited with 0 +++ --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=15155, si_status=0, si_utime=0, si_stime=3} --- +++ exited with 0 +++ 

/usr/share/locale-langpack/fr/LC_MESSAGES/net-tools.mo , gettext() успешно перевести сообщения.

Обратите внимание, что не все слова могут быть переведены, мой родной город vi_VN не работает, даже если я установил language-pack-vi .


Вы должны использовать LC_ALL для переопределения всех других параметров локализации, кроме LANGUAGE в системе GNU, как указано выше.

  • Bash: как распечатать дополнительный столбец, соответствующий IP-адресу для имени
  • Почему у pepperflashplayer открыто почти 50 портов?
  • Что такое «smakynet» в результатах netstat?
  • Какой порт Squid работает в OS X / BSD
  • Почему выход ss по умолчанию такой странный?
  • Мониторинг соединений Nextcloud с помощью netstat
  • Откройте порт в моем CentOS
  • Получить адрес маршрутизатора любого интерфейса
  • TigerVNC работает, но не прослушивает какой-либо порт?
  • ss не показывает, что все порты прослушиваются
  • почему у меня так много открытых обработчиков сокетов и записей в Netgrat DGRAM?
  • Linux и Unix - лучшая ОС в мире.