Herhangi bir sistem günlük dosyasını tarihe veya tarih aralığına göre filtreleme


12

Ne elde etmek istiyorum:

Bir sistem günlük dosyasını tarihe göre filtrelemek istiyorum, yani:

$ cat /var/log/syslog | grep -i "error\|warn\|kernel" 

diyelim ki son üç gün boyunca böyle çizgiler yazdı:

(...)
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

Nasıl grep (seçme veya filtreleme):

  • tarihe göre?
  • tarihe + saate göre?

Ne denedim:

$ cat /var/log/syslog | grep -i "Apr  5" | grep -i "error\|warn\|kernel" 

Sanki beklenen çalışmaları syslogancak üzerinde, dosyanın kern.logörneğin dosyası, yalnızca döner: Binary file (standard input) matches. Ve tailbu dosyada dosyadakiyle aynı başlangıç ​​tarihi formatını görebiliyorum syslog.

Soru:

Aynı kern.logdosya gibi diğer günlüklerde nasıl elde edilir ?

Ayrıca, filtrelemek mümkündür:

  • tarih aralığına göre?
  • tarihe göre + saat aralığına göre?

İpucu: mümkünse "hatırlaması kolay komutlar" ile.

Yanıtlar:


14

Systemd ile, böyle ince taneli filtrelemeye kolayca izin veren journalctl var:

sudo journalctl --since "2 days ago"   
sudo journalctl --since "2019-03-10" --until "2019-03-11 03:00"
sudo journalctl -b # last boot 
sudo journalctl -k # kernel messages
sudo journalctl -p er # by priority (emerg|alert|crit|err|warning|info|debug)
sudo journalctl -u sshd # by unit 
sudo journalctl _UID=1000 # by user id

Örnekler birleştirilebilir!


5
Tamam şimdi bu çok havalı!
George Udosen

2
Çoğunlukla sudogerekli değildir (özellikle admkullanıcı genellikle "ana" kullanıcının bulunduğu grubun üyesiyse ).
PerlDuck

4

Genel olarak, kern.logbir metin dosyasıdır. Ancak bazen , özellikle sistem daha önce çöktüğünde ve sistem dosyayı düzgün bir şekilde kapatamadığında bazı ikili veriler içerdiği görülür . Daha sonra, benzeri metinler içeren satırlar fark edebilirsiniz ^@^@^@^@^@^@^@^@^@.

grepGirişinin ikili olduğunu fark ederse , genellikle daha fazla işlemeyi durdurur ve ... binary file ...bunun yerine yazdırır . Ancak bu davranışı değiştirmek için bir anahtar var. Gönderen man :

[...]
File and Directory Selection
   -a, --text
          Process a binary file as if it were text; 
          this is equivalent to the --binary-files=text option.
[...]

Aşağıdakileri deneyebilirsiniz:

$ grep -a -i "Apr  5" /var/log/kern.log  | grep -i "error\|warn\|kernel"

(Ama aslında journalctlbaşka bir cevapta verilen çözümü tercih ederim .)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.