किसी भी सिस्टम लॉग फ़ाइल को दिनांक या तिथि सीमा के अनुसार फ़िल्टर करें


12

मैं क्या हासिल करना चाहता हूं:

मैं तारीख तक एक सिस्टम लॉग फ़ाइल फ़िल्टर करना चाहता हूँ, जब मैं करता हूँ:

$ 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

ग्रीप कैसे करें (चयन करें, या फ़िल्टर करें):

  • तिथि के अनुसार?
  • दिनांक + घंटे द्वारा?

मैंने क्या कोशिश की:

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

यह syslogफ़ाइल पर अपेक्षित के रूप में काम करता है , लेकिन kern.logउदाहरण के लिए फ़ाइल पर नहीं , जो केवल रिटर्न करता है Binary file (standard input) matches:। और जब मैं tailइस विशेष फ़ाइल को देख सकता हूं तो मैं फ़ाइल की तुलना में एक ही प्रारंभिक तिथि प्रारूप देख सकता हूं syslog

सवाल:

kern.logफ़ाइल जैसे अन्य लॉग पर समान कैसे प्राप्त करें ?

इसके अलावा, क्या फ़िल्टर करना संभव है:

  • दिनांक सीमा तक?
  • दिनांक + घंटे की सीमा तक?

संकेत: यदि संभव हो तो, "आसानी से याद रखने वाली कमांड" के साथ।

जवाबों:


14

सिस्टमड के साथ हमें जौक्टल मिला है जो आसानी से इस तरह से ठीक से छानने की अनुमति देता है:

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

उदाहरण संयुक्त हो सकते हैं!


5
ठीक है अब यह बहुत अच्छा है!
जॉर्ज उडेन

2
अक्सर यह भी sudoआवश्यक नहीं है (विशेष रूप से यदि उपयोगकर्ता admसमूह का सदस्य है , जो "मुख्य" उपयोगकर्ता आमतौर पर है)।
पर्लडक

4

सामान्य तौर पर, 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में किसी अन्य उत्तर में दिए गए समाधान को पसंद करूंगा ।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.