tailが端末の文字セットを変更できないようにする

tailが端末の文字セットを変更できないようにする

Linuxターミナル(CentOS)では、このコマンドを使用してtail --follow=name my-rolling-file.logアプリケーションのログを表示します。

時にはログからいくつかのバイナリデータがダンプされます(私は通常文字列を含みますが、時にはUTF-8の中国語などのバイナリおよび/または特殊文字を含むCamelメッセージの本文をダンプします)。これが発生した場合は、端末を今の|ようにパイプ文字に変更してくださいö

tail問題を引き起こすことがバイナリデータロギングであると推測しており、特殊文字を無視するようにコマンドを要求することが可能かどうか疑問に思います。マニュアルページを確認しましたが、何も見つかりませんでした。

現在、この問題を解決するには、端末でCtrl-Cコマンドを実行して再起動する必要があります。可能であれば、これらの作業を避けたいと思います。resettail

このコマンドに加えて、機能は同じですが(スクロールファイルに従う)他のコマンドを知っている場合は、tailCentOS 6.5でインストールして実行できる限り、そのコマンドも許可されます。

答え1

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-その後にバイトの下位7ビットが表示されます。

または、これらの文字を削除するには、次のようにします。

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

tr文字を「翻訳」します。つまり、文字をマップします。たとえば、小文字を大文字に変更するために使用できます。この-dオプションは文字を削除するように指示します。たとえば、tr -d aeiouすべての(小文字)コレクションを削除します。オプションは-c補完を意味します。つまり、私が指定した文字以外のすべての文字を実行します。  "\t\n -~"タブ文字、改行、すべての一般的な印刷可能文字です。

答え2

これはどうですか?

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

デフォルトでは、strings長さ4(またはそれ以上)の印刷可能文字のみが出力されますが、を使用してそれを変更できます-n {number}

答え3

(一部の迷惑な)文字を次のように変換して.くださいtr

tail -f data | tr "\000-\011\013-\037\177-\377" "."

答え4

lessこの問題は上手だから解いてみよう。

ページャは、less出力用のバイナリファイル形式を非常によく指定します。また、スクロールバックや検索などのポケットベル機能が役に立つことがよくあります。
増加するファイルを追跡するための直接的なオプションはありませんが、起動後に「入力」するキーストロークを提供できます。

キーは、Fファイルが大きくなるにつれて開始され、ファイルが大きくなるにつれて画面を更新します。
キーの前に+not ofを付けて、-オプションのように使用してください。

変更tail -f:

less +F growing-file.log

ファイルが移動または削除され、同じ名前で再生成されても、ファイルを名前で追跡し続けるには、オプションを追加します。このオプションは--follow-nameキーの内容F+F実行する操作を変更し、それ自体では開始されません。

変更するtail -F( --follow=name):

less --follow-name +F rolling-file.log

ファイルが「バイナリファイル」として認識されると、less実際にファイルを表示するかどうかを尋ねられます。この問題を回避するには、オプション-f--force)を使用することもできます。

less --follow-name +F -f rolling-binary-file.log

-fless(同じオプションでもforの意味は異なりますtail。)

Ctrl+ を使用するcと、フォローを中断し、後方にスクロールまたは検索できます。

  • もう一度フォローしてくださいF
  • ジャンプ開始: g
  • ジャンプ開始: G
  • 捜す: /
  • 辞職する: q

バイナリ出力の例

$ less +F /usr/bin/vim 
"/usr/bin/vim" may be a binary file.  See it anyway?

y(防止に使用できます-f)を押すと画面が表示されます。

 ^A^@^@^@^@^@<E5>
 ^A^@^@^@^@^@<E6>
 ^A^@^@^@^@^@^@^P^A^@^@^@^@^@^B^P^A^@^@^@^@^@8^P^A^@^@^@^@^@F^P^A^@^@^@^@^@
 <F1>^A^@^@^@^@^@^P<F1>^A^@^@^@^@^@-<F1>^A^@^@^@^@^@0<F1>^A^@^@^@^@^@i<F1>^A
 ^L(^@^@^@^@^@^@^@^@^@^@^@^@^@<A3><A5>&^@^@^@^@^@^@^@^@^@^@^@^@^@b['^@^@^@^@
 @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@@<A7>&^@^@^@^@
 <AB>&^@^@^@^@^@Ȣ&^@^@^@^@^@^L,^@^@^@^@^@^@<FF><FF><FF><FF><FF><FF><FF><FF>
  ^@^@^@^@^@^@s]&^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^_<D3>%^@^@^@^@^@̢
 <AF>&^@^@^@^@^@<CA><(^@^@^@^@^@^B^D^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
 <B1>&^@^@^@^@^@^D^D^H^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^R<B1>&^@^@
 ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@<A9><B3>&^@^@^@^@^@D<B8>&^@^@
 <B5>&^@^@^@^@^@^]T&^@^@^@^@^@^BL^@^@^@^@^@^@H<8A>O^@^@^@^@^@F@^@^@^@^@^@^@
 K'^@^@^@^@^@^C<C4><FF><FF>^@^@^@^@^OK'^@^@^@^@^@^C<C3><FF><FF>^@^@^@^@^TK'
 #^@^@^@^@^@^D^@^@^@^@^@^@^@<E7>v&^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
 #^@^@^@^@^@^D^@^@^@^@^@^@^@<E7>v&^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
 #^@^@^@^@^@p|#^@^@^@^@^@P~#^@^@^@^@^@^@^@^@^@^@^@^@^@^P
 #^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@<90>{#^@^@^@^@^@^@^@^@^@^@^@^@^@
Waiting for data... (interrupt to abort)

制御文字はキャレット表記で表示されます(例:(^A^@ヌルバイト))。
また、Control-A文字が後続の文字と異なるように、端末(上記には示されていない)でも強調表示されます^A^A

バイナリ文字構成を表示する方法

~からman less:

Control  and  binary  characters  are  displayed  in  standout (reverse
video).  Each such character is displayed in caret notation if possible
(e.g.  ^A for control-A).  Caret notation is used only if inverting the
0100 bit results in a normal printable character.  Otherwise, the char‐
acter  is displayed as a hex number in angle brackets.  This format can
be changed by setting the LESSBINFMT environment variable.   LESSBINFMT
may begin with a "*" and one character to select the display attribute:
"*k" is blinking, "*d" is bold, "*u" is underlined, "*s"  is  standout,
and  "*n"  is  normal.  If LESSBINFMT does not begin with a "*", normal
attribute is assumed.  The remainder of LESSBINFMT is  a  string  which
may  include one printf-style escape sequence (a % followed by x, X, o,
d, etc.).  For example, if LESSBINFMT is  "*u[%x]",  binary  characters
are  displayed  in  underlined hexadecimal surrounded by brackets.  The
default if no LESSBINFMT is  specified  is  "*s<%02X>".   Warning:  the
result  of  expanding the character via LESSBINFMT must be less than 31
characters.

When the character set is utf-8, the LESSUTFBINFMT environment variable
acts similarly to LESSBINFMT but it applies to Unicode code points that
were successfully decoded but are unsuitable for display  (e.g.,  unas‐
signed  code  points).   Its  default  value is "<U+%04lX>".  Note that
LESSUTFBINFMT and LESSBINFMT  share  their  display  attribute  setting
("*x")  so specifying one will affect both; LESSUTFBINFMT is read after
LESSBINFMT so its setting, if any,  will  have  priority.   Problematic
octets  in  a  UTF-8  file (octets of a truncated sequence, octets of a
complete but non-shortest form  sequence,  illegal  octets,  and  stray
trailing  octets)  are displayed individually using LESSBINFMT so as to
facilitate diagnostic of how the UTF-8 file is ill-formed.

関連情報