নামক পাইপ থেকে অবিচ্ছিন্ন পড়া (বিড়াল বা পুচ্ছ -f)


16

আমি rsyslogনির্দিষ্ট লগ ইভেন্টগুলিতে লগ করতে কনফিগার করেছি /dev/xconsole:

*.*;cron.!=info;mail.!=info      |/dev/xconsole

/dev/xconsoleনামযুক্ত পাইপ ( fifo)। আমি যদি লগ করা হচ্ছে তা দেখতে চাই তবে আমি এটি করতে পারি cat /dev/xconsole। আমি অবাক হয়ে দেখলাম, cat /dev/xconsoleফাইলটি পড়ার পরে কমান্ডটি শেষ হয় না, পরিবর্তে এটি কাজ করে tail -f। অন্য কথায়, দুটি আদেশ একই আচরণ করে:

cat /dev/xconsole
tail -f /dev/xconsole

কেউ দয়া করে ব্যাখ্যা করতে পারেন যে এটি কেন?

দুজনের মধ্যে কি কোনও পার্থক্য আছে?

উত্তর:


18

catএটি ইওএফ না পাওয়া পর্যন্ত পড়া চালিয়ে যায়। কোনও পাইপ কেবল তখনই আউটপুটে EOF উত্পাদন করে যখন এটি ইনপুটটিতে EOF পায়। লগিং ডিমন ফাইলটি খুলছে, এতে লিখন করছে এবং এটিকে খোলা রাখছে - ঠিক যেমনটি এটি একটি নিয়মিত ফাইলের জন্য করে - তাই আউটপুটে কখনও ইওএফ তৈরি হয় না। catপাইপটিতে বর্তমানে যা আছে তা ক্লিষ্ট করে যখনই কেবল পড়া চালিয়ে যায়, অবরুদ্ধ করে।

আপনি নিজে নিজে এটি চেষ্টা করে দেখতে পারেন:

$ mkfifo test
$ cat test

এবং অন্য টার্মিনালে:

$ cat > test
hello

অন্য টার্মিনালে আউটপুট হবে। তারপর:

world

অন্যান্য টার্মিনালে আরও আউটপুট থাকবে । আপনি যদি এখন Ctrl-D ইনপুটটি করেন তবে catঅন্যটিও শেষ হয়ে যাবে।

এই ক্ষেত্রে, মধ্যে শুধুমাত্র পর্যবেক্ষণযোগ্য পার্থক্য catএবং tail -fহতে হবে যদি লগিং ডেমন সমাপ্ত বা পুনরায় আরম্ভ হয়: catযখন পাইপের লেখার শেষ বন্ধ করা হয় স্থায়ীভাবে বন্ধ করে দেব, কিন্তু tail -fযাচ্ছে (ফাইল পুনরায় খোলার) রাখা হবে যখন ডেমন পুনরায় আরম্ভ করা হয়।


দুঃখিত, "উদাহরণস্বরূপ" আপনার উদাহরণ থেকে "বিশ্ব" কোথা থেকে আসবে তা আমি দেখতে পাচ্ছি না :)
আলেকজান্ডার মিলস

আপনার টাইপিং থেকে হবে।
মাইকেল হোমার

1
এবং তারপরে আপনি টাইপ করুন worldএবং, দেখুন, "টার্মিনাল" অন্য টার্মিনালে প্রদর্শিত হবে।
মাইকেল হোমার

2

এছাড়া একটি পার্থক্য আছে বাফার উপলব্ধ মধ্যে catএবং tail -f। আপনি এটি পরীক্ষা করে দেখতে পারেন:

পাইপ তৈরি করুন: mkfifo pipe

catপটভূমিতে পাইপ পড়া শুরু করুন :cat pipe &

পাইপ খুলুন এবং প্রতি সেকেন্ডে এটি লিখুন: perl -MFcntl -we 'sysopen(my $fh, "pipe", O_WRONLY | O_NONBLOCK); while() {warn "written: " . syswrite($fh, "hello\n"); sleep 1}'

tail -f pipe &পরিবর্তে এটি দিয়ে এখন চেষ্টা করুন cat। সুতরাং আপনি দেখতে পাচ্ছেন যে catলাইনগুলি পার্ল স্ক্রিপ্টের মাধ্যমে পাইপে লিখিত হওয়ার সাথে সাথেই প্রিন্ট করা যায়, যখন tail -f স্টাডআউট প্রিন্ট করার আগে 4kb অবধি বাফার করে।


-2

catযখন tail -fকেবল শেষ সারিগুলি দেখায় এবং অনুসরণ করে তখন আপনাকে পুরো ফাইলটি দেখায় । সুতরাং ফাইলটি সংক্ষিপ্ত থাকলে তারা একই রকম আচরণ করে তবে ফাইলটি যদি বড় হয় (100+ সারি) তবে আপনি উভয়ের মধ্যে একটি স্পষ্ট পার্থক্য দেখতে পাবেন।

এই আদেশগুলি সম্পর্কে অতিরিক্ত তথ্য:

tail http://www.computerhope.com/unix/utail.htm

cat http://www.computerhope.com/unix/ucat.htm

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.