バイナリファイルを読むときの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 はポケットベルです。つまり、テキストファイルを処理するように設計されています。

関連情報