Назад | Перейти на главную страницу

изменить формат вывода времени iostat -t

Я пытался построить результаты различных результатов iostat. Для этого я хочу использовать https://clusterbuffer.wordpress.com/file-system-tools/iostat_plot/iostat-plotter-v3/.

Во всяком случае - по какой-то необъяснимой причине этот скрипт имеет формат времени, который он ожидает жестко запрограммировать, и ожидает 12-часовой формат времени AM / PM, который я не думаю, что является частью ЛЮБОЙ настройки локали Linux. Я ищу способ указать iostat -t для вывода в формате AM / PM, и у меня это не получается. Предположительно, он использует env var S_TIME_FORMAT, который мне неизвестен и, кажется, специфичен для iostat И недокументирован. Системный / пользовательский LC_TIME установлен на 'C' как обычно. Есть идеи, как уговорить iostat использовать формат am / pm? Поскольку iostat - это двоичный файл, я не могу изменить способ вызова strftime / localtime. Заранее спасибо!

# locale
LANG=en_US.UTF-8
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C 

не может использовать форматирование в комментариях, поэтому вставьте блок кода сюда:

система уже имеет этот языковой стандарт, даже определенный в /etc/locale.conf. К сожалению, это не так:

[root@xxx]# echo $LANG
en_US.UTF-8
[root@xxx]# iostat -t
Linux 3.10.0-514.6.1.el7.x86_64 (xxx)  01/11/18        _x86_64_            (48 CPU)

01/11/18 08:43:46
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
[...]

Требуемый языковой стандарт - en_US:

[xxx]# export LANG=C
[xxx]# iostat -t
Linux 4.14.8-300.fc27.x86_64 (osvetlik.unicorn)     01/10/18    _x86_64_    (4 CPU)

01/10/18 18:36:47
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          26.26    0.09    5.56    0.09    0.00   68.00

[xxx]# export LANG="en_US.UTF-8"
[xxx]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
[xxx]# iostat -t
Linux 4.14.8-300.fc27.x86_64 (osvetlik.unicorn)     01/10/2018  _x86_64_    (4 CPU)

01/10/2018 06:37:41 PM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          26.25    0.09    5.56    0.09    0.00   68.01

Важная переменная локали здесь LC_TIME (но вы должны изменить LC_ALL если он у вас установлен, так как он предотвращает различные настройки других LC_ переменные). Вы должны установить эту переменную на en_US чтобы время в правильном формате. Имея только LANG установлен в en_US не помогает. Просто используйте locale команда, чтобы убедиться, что LC_TIME установлен правильно.

Выход без LC_ALL устанавливать:

[xxx]# export LC_ALL= 
[xxx]# export LC_TIME="en_US.UTF-8"
[xxx]# locale
LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME=en_US.UTF-8
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
[xxx]# iostat -t
Linux 4.14.8-300.fc27.x86_64 (osvetlik.unicorn)     01/12/2018  _x86_64_    (4 CPU)

01/12/2018 09:48:05 AM

И с LC_ALL:

[xxx]# export LC_ALL="en_US.UTF-8"
[xxx]# locale
LANG=C
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
[xxx]# iostat -t
Linux 4.14.8-300.fc27.x86_64 (osvetlik.unicorn)     01/12/2018  _x86_64_    (4 CPU)

01/12/2018 09:49:38 AM

Краткое решение:

LC_ALL="en_US.UTF-8" iostat -t

Я разобрался с помощью Ондржея.

LC_ALL=en_US.UTF-8 iostat -t    

работает.