Lo que quiero lograr:
Me gustaría filtrar un archivo de registro del sistema por fecha, es decir, cuando lo haga:
$ cat /var/log/syslog | grep -i "error\|warn\|kernel"
imprime líneas como estas durante los últimos tres días, digamos:
(...)
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
Cómo grep (seleccionar o filtrar):
- ¿por fecha?
- por fecha + hora?
Lo que probé:
$ cat /var/log/syslog | grep -i "Apr 5" | grep -i "error\|warn\|kernel"
Funciona como se esperaba en el syslog
archivo, pero no en el kern.log
archivo, por ejemplo, que sólo regresa: Binary file (standard input) matches
. Y cuando veo tail
este archivo en particular, puedo ver el mismo formato de fecha de inicio que en el syslog
archivo.
Pregunta:
¿Cómo lograr lo mismo en otros registros como el kern.log
archivo?
Además, ¿es posible filtrar:
- por rango de fechas?
- por fecha + rango de hora?
Sugerencia: si es posible, con "comandos fáciles de recordar".
sudo
se requiere (en particular si el usuario es miembro deladm
grupo, que generalmente es el usuario "principal").En general, el
kern.log
es un archivo de texto. Pero a veces sucede que contiene algunos datos binarios , especialmente cuando el sistema se ha bloqueado antes y el sistema no pudo cerrar el archivo correctamente. Luego puede observar líneas que contienen texto como^@^@^@^@^@^@^@^@^@
y tal.Si se
grep
da cuenta de que su entrada es binaria , generalmente detiene el procesamiento e imprime en su... binary file ...
lugar. Pero hay un cambio para cambiar este comportamiento. Desde la página del manual :Puedes probar lo siguiente:
(Pero en realidad preferiría la
journalctl
solución dada en otra respuesta).fuente