当我尝试使用 读取文件时/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
是^@
不可打印字符的各种表示形式。默认情况下,它显示这样的控制字符,而不是将它们发送到终端,这可能会产生不良后果。
这里奇怪的是,它less
实际上支持 ANSI 颜色转义序列,因为它带有-R
将这些序列发送到终端的标志,但抑制其他控制字符。如果您的日志文件仅包含颜色转义代码,则它可能不应该将其视为二进制文件。
另一方面,cat
只是将原始数据转储到终端,根本不关心发生什么。根据文件的内容,它可能会将您的终端字体更改为线条画字符。
答案2
cat 基本上将任何输入(包括标准输入)转储到屏幕上,而不以任何方式处理它。
less 是一个分页器,即它旨在处理文本文件。