Localization

修改iostat -t時間輸出格式

  • January 12, 2018

我試圖繪製各種 iostat 結果的結果。為此,我想使用https://clusterbuffer.wordpress.com/file-system-tools/iostat_plot/iostat-plotter-v3/

無論如何 - 由於某些莫名其妙的原因,該腳本具有它期望硬編碼的時間格式,並且它期望 12 小時 AM/PM 時間格式,我認為這不是任何 linux 語言環境設置的一部分。我正在尋找一種方法來告訴 iostat -t 以 AM/PM 格式輸出,但我失敗了。據說它使用了我不知道的環境變數 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 

您要查找的語言環境是 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

引用自:https://serverfault.com/questions/891608