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 syslogarchivo, pero no en el kern.logarchivo, por ejemplo, que sólo regresa: Binary file (standard input) matches. Y cuando veo taileste archivo en particular, puedo ver el mismo formato de fecha de inicio que en el syslogarchivo.
Pregunta:
¿Cómo lograr lo mismo en otros registros como el kern.logarchivo?
Además, ¿es posible filtrar:
- por rango de fechas?
- por fecha + rango de hora?
Sugerencia: si es posible, con "comandos fáciles de recordar".

sudose requiere (en particular si el usuario es miembro deladmgrupo, que generalmente es el usuario "principal").En general, el
kern.loges 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
grepda 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
journalctlsolución dada en otra respuesta).fuente