less 和 cat 在读取二进制文件方面有什么区别?

less 和 cat 在读取二进制文件方面有什么区别?

当我尝试使用 读取文件时/var/log/boot.logless我会收到以下消息:

[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^@不可打印字符的各种表示形式。默认情况下,它显示这样的控制字符,而不是将它们发送到终端,这可能会产生不良后果。

这里奇怪的是,它less实际上支持 ANSI 颜色转义序列,因为它带有-R将这些序列发送到终端的标志,但抑制其他控制字符。如果您的日志文件仅包含颜色转义代码,则它可能不应该将其视为二进制文件。

另一方面,cat只是将原始数据转储到终端,根本不关心发生什么。根据文件的内容,它可能会将您的终端字体更改为线条画字符。

答案2

cat 基本上将任何输入(包括标准输入)转储到屏幕上,而不以任何方式处理它。

less 是一个分页器,即它旨在处理文本文件。

相关内容