Apa yang ingin saya capai:
Saya ingin memfilter file log sistem berdasarkan tanggal, yaitu ketika saya melakukannya:
$ cat /var/log/syslog | grep -i "error\|warn\|kernel"
itu mencetak garis seperti ini selama tiga hari terakhir katakanlah:
(...)
Apr 3 06:17:38 computer_name kernel: [517239.805470] IPv6: ADDRCONF(NETDEV_CHANGE): wlp3s0: link becomes ready
(...)
Apr 4 19:34:21 computer_name kernel: [517242.523165] e1000e: enp0s25 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
(...)
Apr 5 09:00:52 computer_name kernel: [517242.523217] IPv6: ADDRCONF(NETDEV_CHANGE): enp0s25: link becomes ready
Cara grep (pilih, atau filter):
- tanggal?
- menurut tanggal + jam?
Apa yang saya coba:
$ cat /var/log/syslog | grep -i "Apr 5" | grep -i "error\|warn\|kernel"
Ia bekerja seperti yang diharapkan pada syslog
file, namun tidak pada kern.log
berkas misalnya, yang hanya pengembalian: Binary file (standard input) matches
. Dan ketika saya tail
file khusus ini saya bisa melihat format tanggal mulai yang sama daripada di syslog
file.
Pertanyaan:
Bagaimana cara mencapai hal yang sama pada log lain seperti kern.log
file?
Selain itu, apakah mungkin untuk menyaring:
- menurut rentang tanggal?
- menurut tanggal + rentang jam?
Petunjuk: jika memungkinkan, dengan "perintah yang mudah diingat".
sudo
diperlukan (khususnya jika pengguna adalah anggotaadm
grup, yang biasanya pengguna "utama").Secara umum,
kern.log
ini adalah file teks. Tetapi kadang-kadang terjadi bahwa itu berisi beberapa data biner , terutama ketika sistem telah crash sebelumnya dan sistem tidak dapat menutup file dengan benar. Anda kemudian dapat melihat baris yang berisi teks suka^@^@^@^@^@^@^@^@^@
dan semacamnya.Jika
grep
pemberitahuan inputnya biner , biasanya berhenti memproses dan mencetak lebih lanjut... binary file ...
. Tetapi ada perubahan untuk mengubah perilaku ini. Dari halaman manual :Anda dapat mencoba yang berikut ini:
(Tapi saya sebenarnya lebih suka
journalctl
solusi yang diberikan dalam jawaban lain.)sumber