바이너리 파일을 읽을 때 less와 cat의 차이점은 무엇입니까?

바이너리 파일을 읽을 때 less와 cat의 차이점은 무엇입니까?

다음을 사용하여 파일을 읽으려고 할 때 /var/log/boot.log:less

[amirreza@localhost ~]$ sudo less /var/log/boot.log
"/var/log/boot.log" may be a binary file.  See it anyway?

그러나 그것을 사용하려고 하면 cat결과는 다음과 같은 색상의 텍스트 파일입니다.

         Starting Virtualization daemon...
         Starting Notify NFS peers of a restart...
         Starting Permit User Sessions...
[  OK  ] Finished Permit User Sessions.
[  OK  ] Started Deferred execution scheduler.
[  OK  ] Started Command Scheduler.
         Starting GNOME Display Manager...
         Starting Hold until boot process finishes up...
[  OK  ] Started Notify NFS peers of a restart.
[  OK  ] Started GNOME Display Manager.

systemd는 로그를 바이너리 형식으로 저장하고 이를 검사하려면 특별한 도구가 필요하다는 것을 알고 있지만 less차이점은 무엇입니까 cat?

답변1

less파일을 표시하기 전에 파일을 보면 바이너리 파일이라고 생각하는지 묻습니다. 아마도 다음과 같은 쓰레기를 보고 싶지 않다고 가정할 것입니다.

<BB>!^@h^C^@^@^@<E9><B0><FF><FF><FF><FF>%^B<BB>!^@h^D^@^@^@
<E9><A0><FF><FF><FF><FF>%<FA><BA>!^@h^E^@^@^@<E9><90><FF><FF>
<FF><FF>%<F2><BA>!^@h^F^@^@^@<E9><80><FF><FF><FF><FF>%<EA>
<BA>!^@h^G^@^@^@<E9>p^@^@^@<E9>@<FF><FF><FF><FF>%ʺ!^@h^K^@^@

이것이 less /bin/ls내 시스템에 나타나는 것이며 <BB>인쇄 할 수 없는 문자의 다양한 표현 ^F입니다 . ^@기본적으로 이러한 제어 문자를 터미널로 보내는 대신 표시하므로 바람직하지 않은 결과가 발생할 수 있습니다.

여기서 이상한 점은 실제로 ANSI 색상 이스케이프 시퀀스를 지원한다는 것입니다 . 이러한 시퀀스를 터미널로 보내는 플래그 less가 함께 제공되지만 다른 제어 문자는 억제되기 때문입니다. -R로그 파일에 색상 이스케이프 코드만 포함된 경우 이진 파일로 처리하면 안 됩니다.

반면에 cat원시 데이터를 터미널에 덤프하고 무슨 일이 일어나는지 전혀 신경 쓰지 마십시오. 파일 내용에 따라 터미널 글꼴이 선 그리기 문자로 변경될 수 있습니다.

답변2

cat은 기본적으로 어떤 방식으로든 처리하지 않고 모든 입력(표준 입력 포함)을 화면에 덤프합니다.

less는 호출기입니다. 즉, 텍스트 파일을 처리하도록 설계되었습니다.

관련 정보