Logs

在讀取二進製文件方面,less 和 cat 有什麼區別?

  • August 18, 2021

當我嘗試使用 讀取文件/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.

less我知道 systemd 以二進制格式保存它的日誌,我們需要特殊的工具來檢查它們,但是和之間有什麼區別cat

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只是將原始數據轉儲到終端,根本不關心發生了什麼。根據文件的內容,它可能例如將您的終端字型更改為畫線字元。

引用自:https://unix.stackexchange.com/questions/665179