Я хотел бы отфильтровать системный файл журнала по дате, т.е. когда я делаю:
$ cat /var/log/syslog | grep -i "error\|warn\|kernel"
это печатает строки как они в течение трех прошлых дней, которым позволяют, скажите:
(...)
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
Как к grep (выбор или фильтр):
$ cat /var/log/syslog | grep -i "Apr 5" | grep -i "error\|warn\|kernel"
Это работает как ожидалось над syslog
файл, но не на kern.log
файл, например, который только возвращается: Binary file (standard input) matches
. И когда я tail
этот конкретный файл I видит тот же формат срока начала работы, чем в syslog
файл.
Как достигнуть того же на других журналах как kern.log
файл?
Кроме того, это возможный отфильтровать:
Подсказка: если это возможно, с "легкими, чтобы помнить командами".
С systemd мы получили journalctl, который легко позволяет мелкомодульную фильтрацию как это:
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
Примеры могут быть объединены!
В целом, kern.log
текстовый файл. Но иногда это происходит, что это содержит некоторые двоичные данные, особенно когда система отказала, прежде и система не мог закрыть файл правильно. Можно затем заметить строки, содержащие текст как ^@^@^@^@^@^@^@^@^@
и такой.
Если grep
замечает, что его вход является двоичным, он обычно останавливает последующую обработку и печать ... binary file ...
вместо этого. Но существует переключатель для изменения этого поведения. Из страницы справочника:
[...] File and Directory Selection -a, --text Process a binary file as if it were text; this is equivalent to the --binary-files=text option. [...]
Можно попробовать следующее:
$ grep -a -i "Apr 5" /var/log/kern.log | grep -i "error\|warn\|kernel"
(Но я на самом деле предпочел бы journalctl
решение дано в другом ответе.)