शेल कमांड एक फाइल में बदलाव की निगरानी करने के लिए - इसे फिर से क्या कहा जाता है?


159

मुझे पता है कि यूनिक्स पर एक आदेश था जिसका उपयोग मैं किसी फ़ाइल की निगरानी करने और उसमें लिखे बदलावों को देखने के लिए कर सकता था। यह विशेष रूप से लॉग फ़ाइलों की जाँच के लिए काफी उपयोगी था।

क्या आप जानते हैं कि इसे क्या कहा जाता है?

जवाबों:


213

क्या मतलब है आपका

tail -f logfile.log

?

( पूंछ के लिए मैन पेज )


6
हाँ, यह वास्तविक समय है।
एडम गिब्बिन्स 21

18
सिडेनोट: यदि आपका वितरण टेलफ कमांड प्रदान करता है, तो टेल-एफ को प्राथमिकता में उपयोग करें। टेलफ अधिक कुशल है क्योंकि इसे देखे जाने वाली फ़ाइल तक पहुंचने की आवश्यकता नहीं है यदि यह लिखा नहीं जा रहा है (पोल एक्सेस्स नाराज हैं यदि आपने फ़ाइल सिस्टम को अपडेट करने के साथ माउंट किया है।)
Mihai Limbăşan

10
पर सुपर उपयोगकर्ता मैं एक जवाब मिला की सिफारिश पूंछ-एफ के बजाय -f , भी
राफा

17
tail -Fफ़ाइल ऑब्जेक्ट के बजाय फ़ाइल नाम का पालन करेगा, जो लॉग फ़ाइल रोटेशन के मामले में विशेष रूप से उपयोगी है।
अमीर अली अकबरी

2
अपडेट, कुछ साल बाद: tailfअब पदावनत है और tail -fसुरक्षित है। (इसके साथ अपने सिस्टम पर इसकी पुष्टि करें man tailf।) प्रलेखन देखें: man7.org/linux/man-pages/man1/atelf.1.html
exp1orer

124

जॉन स्कीट के जवाब के अनुसार, आपको शायद पूंछ का मतलब था।

एक और उपयोगी एक घड़ी है ; यह आपको समय-समय पर कमांड चलाने और आउटपुट पूर्ण स्क्रीन को देखने की अनुमति देता है। उदाहरण के लिए:

घड़ी -n 10-डी ls -l / var / प्रशंसा / संदेश

ls -l /var/adm/messagesप्रत्येक 10 सेकंड में कमांड चलाएगा , और बाद के रन के बीच आउटपुट में अंतर को उजागर करेगा। (उदाहरण के लिए, लॉगफ़ाइल कितनी तेज़ी से बढ़ रहा है, यह देखने के लिए उपयोगी है)।


38

inotifywaitसे inotify उपकरण यदि आप एक आदेश हर बार एक फ़ाइल (या एक निर्देशिका में किसी भी फाइल) परिवर्तन चलाना चाहते हैं उपयोगी है। उदाहरण के लिए:

inotifywait -r -m -e modify /var/log | 
   while read path _ file; do 
       echo $path$file modified
   done

बस एक नोट जो pathएक चर नाम के लिए सबसे बड़ी पसंद नहीं है। पर zsh, ऐसा लगता है कि पर्यावरण संस्करण केस-संवेदी नहीं हैं। मेरे लिए, सेटिंग के pathकारण PATHभी सेट हो जाते हैं, और मूल रूप से इसका मतलब यह है कि जब तक आप इसे ठीक नहीं करते तब तक कुछ भी निष्पादित नहीं होगा। पर bash, सेटिंग pathका कोई प्रभाव नहीं पड़ता है PATH
थानाटोस

36

मैं less +FG1 ओवर का उपयोग करना पसंद करता हूं tail -fक्योंकि मैं खुद को एक विशिष्ट त्रुटि या आईडी के लिए लॉग फ़ाइल खोजने की आवश्यकता करता हूं। अगर मुझे किसी चीज़ की तलाश करने की ज़रूरत है, तो मैं ^Cफ़ाइल का अनुसरण करना बंद कर देता हूं और ?पीछे की ओर खोजना शुरू कर देता हूं ।

कुंजी बाइंडिंग में बहुत समान हैं vi+विकल्प का उपयोग करके स्टार्टअप पर किसी भी कमांड को आरंभ किया जा सकता है :

+cmd   Causes  the  specified  cmd  to be executed each time a new file is
       examined.  For example, +G causes less to  initially  display  each
       file starting at the end rather than the beginning.

वास्तव में लंबे लॉग के लिए, मुझे उस विकल्प का उपयोग करना सुविधाजनक लगता है -nजो लाइन नंबरिंग को बंद कर देता है। मैनपेज से:

-n or --line-numbers
          Suppresses line numbers.  The default (to use line numbers)  may
          cause  less  to run more slowly in some cases, especially with a
          very large input file.  Suppressing line  numbers  with  the  -n
          option  will  avoid this problem.  Using line numbers means: the
          line number will be displayed in the verbose prompt and in the =
          command,  and the v command will pass the current line number to
          the editor (see also  the  discussion  of  LESSEDIT  in  PROMPTS
          below).

1. टिप्पणी में यह इंगित करने के लिए rgmarcha को हैट-टिप ।


aliasअपने इच्छित विकल्पों के साथ सेट करना याद रखें , ताकि आपको हर बार उन्हें टाइप न करना पड़े।
माइकल हैम्पटन

वास्तव में, आपको आम तौर पर ज्यादातर मामलों में उपनामों पर शेल फ़ंक्शन पसंद करना चाहिए।
ट्रिपलए

21

पूंछ महान है ... फ़ाइल पर कम प्रारंभ का भी कम उपयोग किया जा सकता है अर्थात कम myfile तो Shift+ दबाएं F। यह पूंछ के रूप में कम कार्य करता है।


5
कम + एफ
मायफाइल

16

मैं एक लाटेकस फ़ाइल का संपादन कर रहा हूं और बीच में कहीं बदलाव के लिए भी इसकी निगरानी करना चाहता था। मैंने निम्नलिखित लिटिल शेल स्क्रिप्ट को कोड़ा, जो मेरे लिए उपयोगी साबित हुआ। मुझे उम्मीद है कि यह किसी और के लिए भी काम आएगा।

#!/bin/bash
FILE="$1"
CMD="$2"
LAST=`ls -l "$FILE"`
while true; do
  sleep 1
  NEW=`ls -l "$FILE"`
  if [ "$NEW" != "$LAST" ]; then
    "$CMD" "$FILE"
    LAST="$NEW"
  fi
done

इसे सहेजें watch.shऔर करें chmod u+x watch.sh। फिर मैं इसे निम्नानुसार निष्पादित करता हूं:

./watch.sh file.tex pdflatex

यदि आप चाहते हैं कि केवल वास्तविक संशोधन होने पर ही कमांड चलाया जा सके, तो आप `md5sum "$FILE"`इसके बजाय उपयोग कर सकते हैं `ls -l "$FILE"`


1
एक फ़ाइल के बजाय निर्देशिका और उनकी सामग्री देखने के लिए:NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
एंडी


6

तुम भी inotifywatch / inotifywait का उपयोग कर सकते हैं जो गुठली में हुक उप-प्रणाली को सम्मिलित करते हैं। इस तरह आप "ओपन", "क्लोज़" या "एक्सेस" जैसी चीजों के लिए भी देख सकते हैं।

लेकिन अगर आप बस मैं पूंछ पर सहमत करने के लिए जोड़ा लाइनों प्राप्त करना चाहते हैं।


3

टेल मानक, पारंपरिक, हर जगह यूनिक्स उपकरण उपलब्ध है। थोड़ा अधिक परिष्कृत उपकरण मल्टीटैल है जो एक साथ कई फाइलों की निगरानी कर सकता है और सिंटैक्स हाइलाइटिंग करता है।


3

अगर मैं फ़ाइल को केवल टेलिंग के अलावा आसपास खोजना चाहता हूं, तो मैं "F" कमांड के साथ कम उपयोग करता हूं।

पूंछ का उपयोग करते समय, ध्यान रखें कि यदि फ़ाइल को रोल किया जा सकता है या एडिट द्वारा प्रतिस्थापित किया जा सकता है तो अतिरिक्त तर्क की आवश्यकता होती है (विम के लिए डिफ़ॉल्ट मोड: w)।

पूंछ -f फ़ाइल डिस्क्रिप्टर को संग्रहीत करने और उसका पालन करने के लिए पूंछ का कारण बनेगी। यदि फ़ाइल को प्रतिस्थापित किया जाता है तो डिस्क्रिप्टर को बदल दिया जाएगा। फ़ाइल डिस्क्रिप्टर का अनुसरण करने का लाभ यह है कि यदि फ़ाइल का नाम बदला गया है, तो आप अभी भी इसका अनुसरण कर रहे हैं।

tail --follow = टेल फाइल को नामांकित फ़ाइल को समय-समय पर फिर से खोलकर ट्रैक करेगा कि क्या इसे बदला गया है।

--retry एक अन्य उपयोगी विकल्प है यदि आप एक लॉग फ़ाइल को पूंछना चाहते हैं लेकिन फ़ाइल अभी तक नहीं बनाई गई है।

tail -F एक शॉर्टकट है --follow = --retry के लिए।


2

टेलफ को भूल जाओ, जो आप चाहते हैं वह आदेश है। यहाँ अंतर को देखने के लिए एक अच्छी चाल है, क्योंकि वे वास्तविक समय में (या करीब) 2 फाइलों के बीच या एक फाइल में लिखे जा रहे हैं।

आप व्यवहार को संशोधित करने के लिए इन तरीकों का उपयोग कर सकते हैं, जो भी आप चाहते हैं, जैसे रिकॉर्ड रखने के लिए फ़ाइल में परिवर्तन लिखना। नीचे दिए गए आदेशों के लिए घड़ी या अन्य विकल्पों के अंतराल के साथ खेलें।

आपके पास 1 फ़ाइल है और आप इसे देखना चाहते हैं क्योंकि इसमें परिवर्तन किए गए हैं:

तो क्या करना है:

  1. फ़ाइल की प्रतिलिपि बनाएँ

cp file file2

  1. मतभेदों को खोजने के लिए एक बैश स्क्रिप्ट लिखें, और file2 को अपडेट करें

touch check-differences.sh

nano check-differences.sh

chmod 755 check-differences.sh

  1. स्क्रिप्ट के लिए एक मूल विचार है। यदि आप चाहें तो इसे एक फाइल पर लिखें

#!/bin/bash

diff file file2

cp file file2

  1. आगे आप या तो घड़ी का उपयोग करके स्क्रीन पर अंतर देख सकते हैं

watch ./check-differences

यह डिफ़ॉल्ट रूप से हर 2 सेकंड में अपडेट होगा। इसलिए यदि आपको वापस जाने और उन्हें पढ़ने की आवश्यकता है, तो स्क्रिप्ट में फ़ाइल में अंतर के आउटपुट को लिखें।

या अपनी स्क्रिप्ट को नियमित रूप से चलाने के लिए क्रोन का उपयोग करें यदि आपको आउटपुट देखने की आवश्यकता नहीं है।


1

जबकि tail -f somefile.txtरहता नए डेटा से स्क्रॉल, मैं कभी कभी पसंद less +G somefile.txtफ़ाइल में नवीनतम डेटा के एक पैच को देखने के लिए और साथ ही।


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