"লেজ" কমান্ডের "-f" পরামিতি কীভাবে কাজ করে?


59
$ tail -f testfile

কমান্ডটি নির্দিষ্ট ফাইলটিতে সর্বশেষতম এন্ট্রিগুলি রিয়েল-টাইম ডানদিকে দেখানোর কথা? তবে তা হচ্ছে না। দয়া করে আমাকে সংশোধন করুন, আমি যা করতে চাই তা যদি ভুল হয় ...

আমি একটি নতুন ফাইল "আআ" তৈরি করেছি এবং পাঠ্যের একটি লাইন যুক্ত করেছি এবং এটি বন্ধ করে দিয়েছি। তারপরে এই আদেশটি জারি করলেন (প্রথম লাইন):

$ tail -f aaa
xxx
xxa
axx

শেষ তিনটি লাইন আ আ ফাইলের বিষয়বস্তু। এখন যে কমান্ডটি এখনও চলছে (যেহেতু আমি ব্যবহার করেছি -f), আমি জিএআইআই এর মাধ্যমে আআআআআ ফাইলটি খুললাম এবং ম্যানুয়ালি আরও কয়েকটি লাইন যুক্ত করা শুরু করলাম। টার্মিনালটি ফাইলটিতে যুক্ত হওয়া নতুন লাইনগুলি দেখায় না।

এখানে কি সমস্যা? tail -fযদি তারা শুধুমাত্র সিস্টেম দ্বারা লেখা হয় কমান্ড শুধুমাত্র নতুন এন্ট্রি দেখায়? (লগ ফাইল ইত্যাদি)

উত্তর:


62

থেকে tail(1) man পৃষ্ঠা :

   With  --follow  (-f),  tail  defaults to following the file descriptor,
   which means that even if a tail’ed file is renamed, tail will  continue
   to  track  its  end.   This  default behavior is not desirable when you
   really want to track the actual name of the file, not the file descrip-
   tor (e.g., log rotation).  Use --follow=name in that case.  That causes
   tail to track the named file  in  a  way  that  accommodates  renaming,
   removal and creation.

আপনার পাঠ্য সম্পাদকটি মূল ফাইলটির নাম পরিবর্তন বা মুছে ফেলা হচ্ছে এবং নতুন ফাইলটিকে একই ফাইলের নামে সংরক্ষণ করছে। -Fপরিবর্তে ব্যবহার করুন।


কাজ করছে! সুতরাং, আমি ডান $ tail -F filenameপরিবর্তে সব সময় কমান্ড ব্যবহার করতে পারি $ tail -f filename?
এর_ম

17
যদি এটি আপনার উদ্দেশ্যমূলক আচরণ এমন কিছু ক্ষেত্রে থাকতে পারে যেখানে আপনি ফাইলের পরিবর্তে বর্ণনাকারী দ্বারা অনুসরণ করতে চান, তবে ন্যায্যতার সাথে আমি এর অনেকগুলিই পাইনি।
Ignacio Vazquez-Abram

lsofএটি ঘটছে তা দেখাতে পারে - উদাহরণস্বরূপ lsof -Fpcftniদেখানো হবে যে ইনোড অনুসরণ করা tailএখন আর সম্পাদক খোলার মতো আর নেই।
অ্যারন ডি মারাকো

10

আপনার সম্পাদকের ফাইলটির নিজস্ব বাফার রয়েছে। আপনি যখন সম্পাদকের পাঠ্য পরিবর্তন করেন, তখন ফাইলটিতে কিছুই লেখা হয় না।

আপনি যখন আপনার পরিবর্তনগুলি সংরক্ষণ করেন, সম্ভাবনা হ'ল সম্পাদক সহজেই পুরানো ফাইলটি মুছুন এবং একটি নতুন ফাইল তৈরি করুন। tail -fএখনও মুছে ফেলা ফাইলের সাথে সংযুক্ত থাকবে, সুতরাং এটি নতুন কিছু দেখায় না।


1
সম্পাদক ফাইলটি ওভাররাইট করে, লগগুলি পাঠ্য সংযোজন করে। এই সমস্যা হতে পারে।
রুফো এল মাগুফো

@ জুয়ান: আমি আপনার মন্তব্য বুঝতে পারছি না। আমার উত্তরে আমি যে বর্ণনা করেছি সে ব্যতীত "ওভাররাইট" এর কোন ठोस অর্থ নেই।
স্টাফেন গিমেনেজ

হ্যাঁ, আমি আপনাকে একই অর্থ বোঝাতে চেয়েছিলাম :)
রুফো এল মাগুফো

3

tail রিয়েলটাইম নয়, প্রতিটি 1 সেকেন্ড ডিফল্টরূপে "রিফ্রেশ" করুন।

এটি দিয়ে চেষ্টা করুন (আপনার bash4 দরকার):

  • 2 টি টার্মিনাল খুলুন।
  • প্রথম টার্মিনালে এক্সিকিউট করুন touch ~/output.txtএবং tail -f ~/output.txt
  • দ্বিতীয় টার্মিনালে এক্সিকিউট করুন for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
  • প্রথম টার্মিনালে লেজের আউটপুটটি দেখুন।

মানে echo $i >> ~/output.txt? এছাড়াও, এই উত্তরটি প্রশ্নের বিন্দুটিকে মিস করে।
ইগনাসিও ওয়াজকেজ-আব্রামগুলি

1
হ্যাঁ, আপনি মন্তব্যটি লেখার সময় আমি ব্যর্থতা সংশোধন করেছি :)। আমার উত্তরটি সমস্যার জন্য শুধুমাত্র একটি পরীক্ষা The লেজ -f কমান্ডটি কেবল নতুন এন্ট্রিগুলি কেবল সিস্টেম দ্বারা লিখিত থাকলে তা দেখায়?
রুফো এল মাগুফো

4
@ জুয়ান: আজকাল, লিনাক্সে, tailfএকটি অজানা ভিত্তিক বাস্তবায়ন রয়েছে। সুতরাং এটি রিয়েলটাইমে রিফ্রেশ হবে।
স্টাফেন গিমেনেজ

হ্যাঁ tailf, তবে tailinotify ব্যবহার করে ?. আমি জানতাম না tailf। লেজের ম্যানপেজটি 1 সেকেন্ডের জন্য ডিফল্ট দেখায় -s
রুফো এল মাগুফো

3
হ্যাঁ, tailঅনুসরণ করা হয়েছে এবং এখন যখন উপলব্ধ রয়েছে তখন ইনোটিফাইও ব্যবহার করছে। tailfযখন ফাইলটিতে কোনও ক্রিয়াকলাপ নেই তখন মোটেও ভোট দিচ্ছে না sleeping tail -fকিছু ক্রিয়াকলাপ দেখায় ( straceআউটপুট দেখুন)।
স্টাফেন গিমেনেজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.