Filtra qualsiasi file di registro di sistema per data o intervallo di date


12

Cosa voglio ottenere:

Vorrei filtrare un file di registro di sistema per data, ovvero quando lo faccio:

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

stampa linee come queste negli ultimi tre giorni diciamo:

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

Come grep (selezionare o filtrare):

  • per data?
  • per data + ora?

Cosa ho provato:

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

Esso funziona come previsto sul syslogfile, ma non sul kern.logfile di, ad esempio, che solo i rendimenti: Binary file (standard input) matches. E quando ho tailquesto particolare file posso vedere lo stesso formato di data di inizio rispetto al syslogfile.

Domanda:

Come ottenere lo stesso su altri registri come il kern.logfile?

Inoltre, è possibile filtrare:

  • per intervallo di date?
  • per data + intervallo di ore?

Suggerimento: se possibile, con "comandi facili da ricordare".

Risposte:


14

Con systemd abbiamo journalctl che consente facilmente un filtro a grana fine come questo:

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

Gli esempi possono essere combinati!


5
Ok ora è fantastico!
George Udosen,

2
Spesso non sudoè nemmeno richiesto (in particolare se l'utente è membro del admgruppo, di solito l'utente "principale").
PerlDuck,

4

In generale, kern.logè un file di testo. Ma a volte capita che contenga alcuni dati binari , specialmente quando il sistema si è bloccato in precedenza e il sistema non è riuscito a chiudere correttamente il file. È quindi possibile notare righe contenenti testo simile ^@^@^@^@^@^@^@^@^@e tale.

Se grepnota che il suo input è binario , di solito interrompe invece ulteriori elaborazioni e stampa ... binary file .... Ma c'è un interruttore per cambiare questo comportamento. Dalla manpage :

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

Puoi provare quanto segue:

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

(Ma in realtà preferirei la journalctlsoluzione fornita in un'altra risposta.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.