Je voudrais filtrer un fichier journal système par date, c'est-à-dire quand je le fais:
$ cat /var/log/syslog | grep -i "error\|warn\|kernel"
il imprime des lignes comme celles-ci pour les trois derniers jours disons:
(...)
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
Comment grep (sélectionner ou filtrer):
$ cat /var/log/syslog | grep -i "Apr 5" | grep -i "error\|warn\|kernel"
Il fonctionne comme prévu sur le fichier syslog
, mais pas sur le fichier kern.log
Par exemple, qui ne renvoie que: Binary file (standard input) matches
. Et quand je tail
ce fichier particulier, je peux voir le même format de date de début que dans le fichier syslog
.
Comment obtenir la même chose sur d'autres journaux comme le fichier kern.log
?
De plus, est-il possible de filtrer:
Indice: si possible, avec des "commandes faciles à retenir".
Avec systemd, nous avons obtenu journalctl qui permet facilement un filtrage à grain fin comme celui-ci:
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
Les exemples peuvent être combinés!
En général, le kern.log
est un fichier texte. Mais il arrive parfois qu'il contienne certaines données binaires , en particulier lorsque le système est tombé en panne auparavant et que le système n'a pas pu fermer le fichier correctement. Vous pouvez alors remarquer des lignes contenant du texte comme ^@^@^@^@^@^@^@^@^@
et autres choses de ce genre.
Si grep
remarque que son entrée est binaire , il arrête généralement le traitement et affiche ... binary file ...
au lieu. Mais il y a un interrupteur pour changer ce comportement. Depuis la page de manuel :
[...] File and Directory Selection -a, --text Process a binary file as if it were text; this is equivalent to the --binary-files=text option. [...]
Vous pouvez essayer ce qui suit:
$ grep -a -i "Apr 5" /var/log/kern.log | grep -i "error\|warn\|kernel"
(Mais je préférerais en fait la solution journalctl
donnée dans une autre réponse.)