Linuxターミナル(CentOS)では、アプリケーションのログを表示するためにtail --follow=name my-rolling-file.log
コマンドを使用しています。
ときどきログにいくつかのバイナリデータがダンプされ(私は通常文字列を含むキャメルメッセージの本文をダンプしますが、時々バイナリや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
cat
の-v
(詳細)オプション(--show-nonprinting
とも呼ばれます)は、^
およびM-
表記を使用して「非印刷」文字を表示します。
^@
として表示されます^A
として表示されます^B
として表示されます^?
として表示されますM-
として表示され、その後にバイトの下位7ビットが表示されます。または、文字を破棄する場合は、次を使用します。
tail --follow=name my-rolling-file.log | tr -cd "\t\n -~"
tr
文字を「変換」します。つまり、それらをマップします。たとえば、小文字を大文字に変更するために使用できます。 -d
オプションは、文字を削除するように指示します。たとえば、tr -d aeiou
はすべての(小文字の)母音を削除します。 -c
オプションは補完を意味します。つまり、指定した文字以外のすべての文字を実行します。 "\t\n -~"
は、タブ、改行、およびすべての通常の印刷可能な文字です。
(厄介な)文字をtr
で.
に変換します。
tail -f data | tr "\000-\011\013-\037\177-\377" "."
less
が問題を処理できるようにします。ポケットベルless
は、出力用のバイナリファイルのフォーマットに優れています。また、スクロールバックや検索などのページャー機能も役立つことがよくあります。
大きくなるファイルを追跡するための直接的なオプションはありませんが、起動後に「入力」するためのキーストロークを提供する方法があります。
キー F 拡大するファイルの追跡を開始し、ファイルが拡大すると画面を更新します。
キーの前に+
ではなく-
を付け、それをオプションのように使用します。
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
(less
の-f
の意味は、tail
の同じオプションとは異なることに注意してください。)
使用する Ctrl+c フォローを停止して、スクロールして戻るか検索することができます。
$ 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.