Lọc bất kỳ tệp nhật ký hệ thống theo ngày hoặc phạm vi ngày


12

Những gì tôi muốn đạt được:

Tôi muốn lọc một tệp nhật ký hệ thống theo ngày, tức là khi tôi làm:

$ cat /var/log/syslog | grep -i "error\|warn\|kernel" 

nó in những dòng như thế này trong ba ngày qua, giả sử:

(...)
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ách grep (chọn hoặc lọc):

  • theo ngày?
  • theo ngày + giờ?

Những gì tôi đã cố gắng:

$ cat /var/log/syslog | grep -i "Apr  5" | grep -i "error\|warn\|kernel" 

Nó hoạt động như mong đợi trên syslogtệp, nhưng không phải trên kern.logtệp, ví dụ, chỉ trả về : Binary file (standard input) matches. Và khi tôi tailtập tin cụ thể này, tôi có thể thấy định dạng ngày bắt đầu giống như trong syslogtập tin.

Câu hỏi:

Làm thế nào để đạt được điều tương tự trên các bản ghi khác như kern.logtập tin?

Ngoài ra, có thể lọc:

  • theo phạm vi ngày?
  • theo ngày + phạm vi giờ?

Gợi ý: nếu có thể, với "các lệnh dễ nhớ".

Câu trả lời:


14

Với systemd, chúng tôi có tạp chí dễ dàng cho phép lọc hạt mịn như thế này:

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

Ví dụ có thể được kết hợp!


5
Ok bây giờ điều này là rất mát mẻ!
George Udosen

2
Thường thì thậm chí không sudobắt buộc (đặc biệt nếu người dùng là thành viên của admnhóm, mà người dùng "chính" thường là).
PerlDuck

4

Nói chung, kern.loglà một tập tin văn bản. Nhưng đôi khi nó xảy ra rằng nó chứa một số dữ liệu nhị phân , đặc biệt là khi hệ thống bị sập trước đó và hệ thống không thể đóng tệp đúng cách. Sau đó, bạn có thể nhận thấy các dòng có chứa văn bản như thế ^@^@^@^@^@^@^@^@^@và như vậy.

Nếu grepthông báo đầu vào của nó là nhị phân , thay vào đó, nó thường dừng xử lý và in thêm ... binary file .... Nhưng có một công tắc để thay đổi hành vi này. Từ trang hướng dẫn :

[...]
File and Directory Selection
   -a, --text
          Process a binary file as if it were text; 
          this is equivalent to the --binary-files=text option.
[...]

Bạn có thể thử như sau:

$ grep -a -i "Apr  5" /var/log/kern.log  | grep -i "error\|warn\|kernel"

(Nhưng tôi thực sự thích journalctlgiải pháp được đưa ra trong một câu trả lời khác.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.