O que eu quero alcançar:
Gostaria de filtrar um arquivo de log do sistema por data, ou seja, quando:
$ cat /var/log/syslog | grep -i "error\|warn\|kernel"
imprime linhas como estas nos últimos três dias, 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
Como grep (selecionar ou filtrar):
- por data?
- por data + hora?
O que eu tentei:
$ cat /var/log/syslog | grep -i "Apr 5" | grep -i "error\|warn\|kernel"
Ele funciona como esperado no syslog
arquivo, mas não no kern.log
arquivo, por exemplo, que só retorna: Binary file (standard input) matches
. E quando eu vejo tail
esse arquivo em particular, vejo o mesmo formato de data de início do que no syslog
arquivo.
Questão:
Como conseguir o mesmo em outros logs como o kern.log
arquivo?
Além disso, é possível filtrar:
- por período?
- por data + intervalo de horas?
Dica: se possível, com "comandos fáceis de lembrar".
sudo
é necessário (em particular se o usuário for membro doadm
grupo, que normalmente é o usuário "principal").Em geral,
kern.log
é um arquivo de texto. Mas às vezes acontece que ele contém alguns dados binários , especialmente quando o sistema travou antes e o sistema não pôde fechar o arquivo corretamente. Você pode notar linhas contendo texto como^@^@^@^@^@^@^@^@^@
esse.Se
grep
perceber que sua entrada é binária , geralmente interrompe o processamento e imprime... binary file ...
. Mas há uma opção para mudar esse comportamento. Na página de manual :Você pode tentar o seguinte:
(Na verdade, eu preferiria a
journalctl
solução dada em outra resposta.)fonte