Co chcę osiągnąć:
Chciałbym filtrować systemowy plik dziennika według daty, tj. Kiedy:
$ cat /var/log/syslog | grep -i "error\|warn\|kernel"
wypisuje takie linie z ostatnich trzech dni, powiedzmy:
(...)
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
Jak grep (wybierz lub przefiltruj):
- według daty?
- według daty + godziny?
Co próbowałem:
$ cat /var/log/syslog | grep -i "Apr 5" | grep -i "error\|warn\|kernel"
To działa zgodnie z oczekiwaniami na syslog
pliku, ale nie w kern.log
pliku na przykład, który zwraca tylko: Binary file (standard input) matches
. A kiedy mam tail
ten konkretny plik, widzę ten sam format daty początkowej, co w syslog
pliku.
Pytanie:
Jak osiągnąć to samo w innych dziennikach, takich jak kern.log
plik?
Ponadto, czy można filtrować:
- według zakresu dat?
- według daty + zakresu godzin?
Wskazówka: jeśli to możliwe, za pomocą „łatwych do zapamiętania poleceń”.
sudo
jest to wymagane (w szczególności jeśli użytkownik jest członkiemadm
grupy, którym zwykle jest „główny” użytkownik).Ogólnie
kern.log
jest to plik tekstowy. Ale czasami zdarza się, że zawiera on pewne dane binarne , szczególnie gdy system się zawiesił i system nie mógł poprawnie zamknąć pliku. Następnie możesz zauważyć wiersze zawierające tekst podobny^@^@^@^@^@^@^@^@^@
i taki.Jeśli
grep
zauważy, że jego dane wejściowe są binarne , zwykle zatrzymuje dalsze przetwarzanie i... binary file ...
zamiast tego drukuje . Ale jest przełącznik, aby zmienić to zachowanie. Z strony podręcznika :Możesz spróbować:
(Ale wolałbym
journalctl
rozwiązanie podane w innej odpowiedzi).źródło