Command-Line

防止tail修改終端字元集

  • January 31, 2017

在 Linux 終端 (CentOS) 中,我使用該命令tail --follow=name my-rolling-file.log來查看我的應用程序的日誌。

有時在日誌中,會轉儲一些二進制數據(我轉儲了通常包含字元串的 Camel 消息的主體,但有時會轉儲二進制和/或特殊字元,如 UTF-8 中的中文),當它發生時,我的終端會像|現在ö改為管道字元。

我只是猜想是二進制數據記錄會導致問題,我想知道是否可以要求tail命令忽略特殊字元。我檢查了手冊頁,但在那裡沒有找到任何東西。

目前要解決我必須Ctrl-C拖尾的問題,reset在終端中創建一個並重新啟動tail命令。如果可能,我想阻止這些操作。

如果您知道另一個命令tail,但具有相同的功能(在滾動文件之後),它是可以接受的,只要它可以在 CentOS 6.5 下安裝和執行。

那這個呢,

tail --follow=name my-rolling-file.log | strings

預設情況下strings,它只會輸出長度為 4(或更多)的可列印字元,但您可以使用-n {number}.

您可以將特殊字元(二進制數據)轉換為可以安全顯示的普通字元,方法是將您的tail命令輸入cat -v

tail --follow=name my-rolling-file.log | cat -v

(也稱為)的-v(詳細)選項使用和表示法顯示“非列印”字元:cat``--show-nonprinting``^``M-

  • 0x00 顯示為^@
  • 0x01 顯示為^A
  • 0x02 顯示為^B
  • 等等
  • 0x7F 顯示為^?
  • 0x80-0xFF 顯示M-後跟字節的低七位表示。

或者,如果您更喜歡丟棄字元,請使用:

tail --follow=name my-rolling-file.log | tr -cd "\t\n -~"

tr“翻譯”字元;即,映射它們。例如,它可用於將小寫字母更改為大寫字母。該-d選項告訴它刪除字元;例如,tr -d aeiou刪除所有(小寫)元音。-c選項意味著補充;即,執行除我指定的字元之外的所有字元。  "\t\n -~"是製表符、換行符和所有普通的可列印字元。

引用自:https://unix.stackexchange.com/questions/196118