"पूंछ-एफ" और "पूंछ-एफ" के बीच अंतर क्या है?


41

मैंने कभी भी tail -Fकमांड का उपयोग नहीं किया बल्कि हमेशा इस्तेमाल किया tail -fलेकिन किसी ने मुझे बताया कि -Fबहुत स्पष्टीकरण के बिना बेहतर है।

मैंने टेल कमांड के लिए मैन पेज देखा।

-f output appended data as the file grows;

-F Same as --follow=name --retry

--retry Keep trying to open a file even when it is or becomes inaccessible

यह समझना आसान है कि निचला क्या -fकरता है लेकिन मैं यह नहीं मानता कि ऊपरी मामला क्या -Fकरने की कोशिश कर रहा है। मैं सराहना करता हूं कि कोई मुझे मतभेद समझा सकता है।

जवाबों:


75

आप GNU tailउपयोगिता का वर्णन करते हैं । इन दो झंडों के बीच का अंतर यह है कि अगर मैं एक फ़ाइल खोलता हूं, उदाहरण के लिए एक लॉग फ़ाइल, जैसे:

$ tail -f /var/log/messages

... और अगर मेरी मशीन पर लॉग रोटेशन की सुविधा उस लॉग फ़ाइल को घुमाने का फैसला करती है, जबकि मैं इसे लिखे जा रहे संदेशों को देख रहा हूं ("रोटेट" का अर्थ है हटाना या किसी अन्य स्थान पर जाना आदि), जो आउटपुट मैं देख रहा हूं वह बस रूक जा।

अगर मैं फ़ाइल को tailइस तरह से खोलता हूं :

$ tail -F /var/log/messages

... और फिर से, फ़ाइल को घुमाया जाता है, आउटपुट मेरे कंसोल में प्रवाहित होता रहेगा क्योंकि tailफ़ाइल जैसे ही दोबारा उपलब्ध होगी, यानी लॉग में प्रोग्राम (एस) लिखने के बाद नया लिखना शुरू कर दिया /var/log/messages

मुक्त बीएसडी सिस्टम पर, कोई -Fविकल्प नहीं है, लेकिन जीएनयू सिस्टम पर ऐसा tail -fव्यवहार करेगा , जैसे tail -Fकि आपको संदेश मिलता है

tail: file has been replaced, reopening.

आउटपुट में जब आप देख रहे हैं फ़ाइल गायब हो जाती है और फिर से दिखाई देती है।


आप इस परीक्षण कर सकते हैं

एक शेल सत्र में, करते हैं

$ cat >myfile

वह अब आपके लिए सामान टाइप करने की प्रतीक्षा करेगा। बस आगे बढ़ें और कुछ गिबरिश, कुछ पंक्तियाँ लिखें। यह सब फ़ाइल में सहेजा जाएगा myfile

में एक और खोल सत्र (शायद एक और टर्मिनल में, बाधित किए बिनाcat ):

$ tail -f myfile

यह myfileकंसोल में (अंत) सामग्री दिखाएगा । यदि आप पहले शेल सत्र में वापस जाते हैं और कुछ और टाइप करते हैं, तो आउटपुट तुरंत tailदूसरे शेल सत्र में दिखाया जाएगा ।

अब छोड़ दिया catदबाकर Ctrl+D, और हटानेmyfile फ़ाइल:

$ rm myfile

फिर बिल्ली को फिर से चलाएँ:

$ cat >myfile

... और कुछ टाइप करें, कुछ पंक्तियाँ।

जीएनयू के साथ tail, ये लाइनें दूसरे शेल सत्र (जहां अभी भी चल रही हैं) में दिखाई नहीं देंगी tail -f

व्यायाम को दोहराएं tail -Fऔर अंतर देखें।


ओह मैं समझा। मेरे पास एक सिस्टम लॉग फ़ाइल है जैसे कि foo.log तो मैं कभी-कभी foo_log के साथ foo_06242016.log देखता हूं। तो मैं पूंछ -f foo.log चलाता हूं, यह foo_06242016.log को इंगित करेगा?
डेयॉन्ग

1
@DaeYoung नहीं, बिल्कुल नहीं। यदि आप चलाते हैं tail -f foo.logऔर आपका सिस्टम foo.logउदाहरण foo.log.0.gzके लिए चलता है तो आपके द्वारा देखा गया उत्पादन बंद हो जाएगा। यदि आप -Fदूसरी ओर उपयोग करते हैं, तो आप बिना किसी विराम के नए की सामग्री को देखेंगे foo.log
Kusalananda

4
+1 ... जीएनयू के कार्यान्वयन के लिए आपके उत्तर को सीमित नहीं करने के लिए धन्यवाद, लेकिन यह भी लोगों को बता रहा है कि किसी अन्य वातावरण में क्या उम्मीद की जा सकती है।
TOOGAM

2
उदाहरण के साथ बहुत अच्छा चित्रण।
बजे एक CVn

1
@ कुसलानंद: अभ्यास के लिए धन्यवाद। मैंने अंतर देखा और इससे मुझे यह समझने में मदद मिली कि पूंछ-एफ और पूंछ-एफ क्या करते हैं। एक धन्य दिन है!
DaeYoung

14

सरलीकृत, जब आप एक फ़ाइल खोलते हैं, तो आपको इनोड मिलेगा जिसमें कुछ मेटाडेटा होता है, जहां फ़ाइल आपके डिस्क पर स्थित होती है। इसके बाद टेल उस फाइल में बदलाव के लिए सुनेगा।

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

यदि आप फ़ाइल का नाम बदलते / स्थानांतरित करते हैं तो वही प्रभाव होगा। यदि आप उदाहरण के लिए अनुसरण करते हैं /var/log/messagesऔर लॉगोटेट लॉग को घुमाता है /var/log/messages.1। पूंछ के साथ -fअभी भी पुराने इनोड को सुनेगा जो इंगित करता है messages.1। इसके साथ पूंछ को -Fइस बात का एहसास होगा और नया इनकोड पढ़ा जाएगा।


आपके व्याख्या के लिये धन्यवाद। यह अब मेरे लिए बहुत मायने रखता है।
डेयॉन्ग

2
ठीक है। मैं समझता हूं कि इस तरह की एक पूंछ बनाने के लिए एक आसान गलती हो सकती है। मैं विशेष रूप से इस तथ्य का आनंद ले रहा हूं कि आपकी पूर्व वर्तनी त्रुटि ठीक हो गई है, और स्वीकार किया गया है ... एक और वर्तनी त्रुटि के साथ। :)
TOOGAM
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.