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.

관련 정보