একটি কাজ করতে এটা কি সম্ভব tail -f
(অথবা অনুরূপ) একটি ফাইল-এ, এবং grep
একই সময়ে এটা? আমি অন্য কমান্ডগুলিকে কেবল এই জাতীয় আচরণের সন্ধানে কিছু মনে করব না।
একটি কাজ করতে এটা কি সম্ভব tail -f
(অথবা অনুরূপ) একটি ফাইল-এ, এবং grep
একই সময়ে এটা? আমি অন্য কমান্ডগুলিকে কেবল এই জাতীয় আচরণের সন্ধানে কিছু মনে করব না।
উত্তর:
জিএনইউ tail
এবং জিএনইউ ব্যবহার করে grep
আমি tail -f
স্ট্রেট-ফরোয়ার্ড সিনট্যাক্স ব্যবহার করে গ্রেপ করতে সক্ষম হয়েছি :
tail -f /var/log/file.log | grep search_term
এটা ঠিক কাজ করবে; আরও সাধারণভাবে, grep
অপেক্ষা করা হবে যখন কোনও প্রোগ্রাম আউটপুট না হয় এবং আউটপুট আসার সাথে সাথে পড়া চালিয়ে যায়, আপনি যদি করেন তবে:
$ (echo foo; sleep 5; echo test; sleep 5) | grep test
5 সেকেন্ডের জন্য কিছুই হবে না, তারপরে গ্রেপ ম্যাচযুক্ত "পরীক্ষা" আউটপুট দেবে, এবং তারপরে পাঁচ সেকেন্ড পরে পাইপ প্রক্রিয়াটি শেষ হলে এটি প্রস্থান করবে
যোগ --line-buffered
করুন grep
, এবং এটি আপনার জন্য বিলম্ব হ্রাস করতে পারে। কিছু ক্ষেত্রে খুব দরকারী।
tail -f foo | grep --line-buffered bar
grep
টার্মিনালে যায় না (অন্য ধরণের ফাইলের দিকে পুনঃনির্দেশিত)। আউটপুট যখন টার্মিনালে যায় তখন লাইন বাফারিং ডিফল্ট হয়, সুতরাং সেখানে কোনও পার্থক্য হবে না। নোট করুন যে বিকল্পটি জিএনইউ নির্দিষ্ট।
আপনি শুধু পারেন পাইপ আউটপুট grep
মধ্যেtail -f
। এছাড়া প্রোগ্রাম একত্রিত হয় tail -f
ফিল্টারিং এবং শোভা বিশেষ করে সঙ্গে কার্যকারিতা multitail ( উদাহরণ )।
আমি এই সমস্ত লোককে ব্যবহার করতে বলতে দেখছি tail -f
, তবে আমি এর সীমাবদ্ধতাগুলি পছন্দ করি না! নতুন রেখাগুলি দেখার সময় আমার একটি ফাইল অনুসন্ধান করার প্রিয় পদ্ধতি (যেমন, আমি সাধারণত লগ ফাইলগুলি নিয়ে কাজ করি যা ক্রোন জবসের মাধ্যমে পর্যায়ক্রমে সম্পাদিত প্রক্রিয়াগুলির পুনঃনির্দেশিত আউটপুট সংযোজন করা হয়):
tail -Fn+0 /path/to/file|grep searchterm
এটি GNU লেজ এবং গ্রেপ ধরেছে। লেজ ম্যানপেজ থেকে সরবরাহকারী বিশদ (জিএনইউ কোর্টিলস, খনিটি v8.22) [ https://www.gnu.org/software/coreutils/manual/coreutils.html] :
-F same as --follow=name --retry -n, --lines=K output the last K lines, instead of the last 10; or use -n +K to output starting with the Kth. If the first character of K (the number of bytes or lines) is a '+', print beginning with the Kth item from the start of each file, otherwise, print the last K items in the file. K may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y. 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 descriptor (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.
সুতরাং, আমার কমান্ডের লেজের অংশটি সমান tail --follow --retry --lines=+0
, যেখানে চূড়ান্ত যুক্তি শূন্য লাইনগুলি এড়িয়ে শুরুতে এটি শুরু করার নির্দেশ দেয়।
tail -f access | awk '/ADD/{print $0}'
উপরেরটি ব্যবহার করুন, আমি সাধারণত এটি ব্যবহার করি।
নতুন ফলাফলগুলি খুব সহজেই আসার কারণে আপনি লেজু-এর ফলাফলগুলি গ্রেপ করতে নেটকাট ব্যবহার করতে পারেন।
sudo nc -s localhost -l -p 1337 | grep ssh
tail -f /var/log/file.log | nc 127.0.0.1 1337
এটি 1337 বন্দর থেকে আসা ইনপুটটির ফলাফলগুলি শুনতে গ্র্যাপকে সেট করে
second , বা পর্দার মতো কিছু ব্যবহার করুন।
এটা কাজ করে। তবে খেয়াল রাখুন যে আউটপুট আর তাত্ক্ষণিক নয়: এটি পাইপের মাধ্যমে বাফার হয়ে যায়।
tail -f
একটি উইন্ডো এবং tail -f logfile | grep pattern
অন্য উইন্ডোতে চালান । লাইনযুক্ত লাইনগুলি pattern
সর্বদা একই সময়ে উভয় উইন্ডোতে উপস্থিত হয় না। আমি বিরল ইভেন্টগুলিতে 30 সেকেন্ডের ব্যবধানে লাইনগুলি উপস্থিত হতে দেখেছি, যা বিরক্তিকর ছিল।
tee
বা কিছু।