আপনি যদি কখনও আপনার লিনাক্স শেলের অধীনে পাইপ এবং পুনঃনির্দেশগুলি ব্যবহার করেন, তবে সম্ভবত আপনাকে কখনও কখনও tee
ব্যবহার করতে হবে ইউটিলিটি।
টি কি করে?
একটি কমান্ড যেমন
ls
আপনার বর্তমান ডিরেক্টরির বিষয়বস্তু প্রদর্শন করবে। অন্য কথায়, এটি এই বিষয়বস্তুগুলিকে stdout (স্ট্যান্ডার্ড আউটপুট) তে প্রদর্শন করে, যা সাধারণত আপনার স্ক্রীন, অথবা আরও সুনির্দিষ্টভাবে বলতে গেলে, আপনার ভার্চুয়াল টার্মিনাল ডিসপ্লে।
একটি কমান্ড যেমন
ls > file123
আপনার স্ক্রিনে কিছুই প্রদর্শন করবে না। কারণ >
সাইন সমস্ত আউটপুটকে stdout এ প্রদর্শন করার পরিবর্তে একটি ফাইলে পুনঃনির্দেশ করে। ফাইল123 এখন আপনার স্ক্রিনে পূর্বে প্রদর্শিত সামগ্রী দিয়ে পূর্ণ হবে৷
স্ক্রিনে আপনার ডিরেক্টরির বিষয়বস্তু প্রদর্শন করতে এবং এটি একটি ফাইলে লিখতে, আপনি দুটি কমান্ড ব্যবহার করেন। tee
সহ আপনি একসাথে এই দুটি জিনিস করতে পারেন।
ls | tee file123
আপনি যদি একই কমান্ড দুবার চালাতে পারেন তবে কেন টি ব্যবহার করবেন?
উপরের উদাহরণে, আপনি যদি ls
চালাতে পারেন তবে আপনার স্পষ্টতই টি-এর দরকার নেই সাধারনভাবে এবং তারপর আবার এক্সিকিউট করুন এবং আউটপুটটিকে একটি ফাইলে রিডাইরেক্ট করুন। যাইহোক, আপনি এমন পরিস্থিতির সম্মুখীন হবেন যেখানে আউটপুট অনন্য হবে। এমন একটি পরিস্থিতি কল্পনা করুন যেখানে আপনি একটি সমস্যা নির্ণয় করার চেষ্টা করছেন। আপনি diagnose | tee error.log
. আপনি যে ত্রুটিগুলি পান তা অনন্য হতে পারে। আপনি সেগুলিকে স্ক্রিনে প্রদর্শন করতে চান যাতে আপনি জিনিসগুলি পরীক্ষা করার সময় কী ঘটছে তা দেখতে পারেন। কিন্তু আপনি সেই ত্রুটিগুলিকে একটি ফাইলে সংরক্ষণ করতে চান, যাতে আপনি পরে সেগুলি পর্যালোচনা করতে পারেন বা আউটপুটটি একটি আলোচনা ফোরামে আটকাতে পারেন এবং এটি সম্পর্কে লোকেদের জিজ্ঞাসা করতে পারেন৷
আরেকটি পরিস্থিতি, প্রায়ই সম্মুখীন হয়, যখন আপনার টি-এর প্রয়োজন হতে পারে, তা হল:আপনি একটি কমান্ডের আউটপুট এমন একটি স্থানে লিখতে চান যেখানে শুধুমাত্র রুট ব্যবহারকারী পড়তে বা লিখতে পারে। এটা কাজ করবে না।
/sbin/blkid > /root/somefile
তারপরে, আপনি ভাবতে পারেন, "ঠিক আছে, অবশ্যই, শুধু সুডো ব্যবহার করুন!" এবং আপনি অবাক হবেন যে এটিও কাজ করে না:
sudo blkid > /root/somefile
কারণ sudo blkid
এর পরে executes, আপনি এখনও আপনার নিয়মিত, নন-রুট ব্যবহারকারী হিসাবে লগ ইন করেছেন। এবং আপনার শেল (সাধারণত ব্যাশ), /root/somefile
এ লেখার চেষ্টা করে আপনার নিয়মিত ব্যবহারকারীর শংসাপত্র সহ। এটি সমাধান করতে, আপনি tee ব্যবহার করতে পারেন:
/sbin/blkid | sudo tee /root/somefile
টেক্সট যুক্ত করা এবং রিডাইরেক্ট করার ত্রুটি
tee একটি দরকারী কিন্তু সহজ কমান্ড; একটি মৌলিক command | tee somefile
বেশিরভাগ সময়ই যথেষ্ট হবে। যাইহোক, দুটি পরিস্থিতিতে আপনি সম্মুখীন হতে পারেন যে এই টিপস প্রয়োজন হবে.
প্রথম জিনিসটি জানতে হবে যে টি, ডিফল্টরূপে, সর্বদা একটি ফাইল ওভাররাইট করে। আপনি যদি চালান
ls | tee somefile
এবং তারপর
ls /tmp | tee somefile
দ্বিতীয় কমান্ডটি somefile-এর বিষয়বস্তু ওভাররাইট করবে এবং আপনি শুধুমাত্র শেষ কমান্ডের বিষয়বস্তু সম্পাদিত দেখতে পাবেন। এই আচরণ পরিবর্তন করতে, আপনি ওভাররাইট করার পরিবর্তে পাঠ্য সংযোজন করতে পারেন। এটি করতে, শুধু -a
ব্যবহার করুন কমান্ড সুইচ।
ls | tee -a somefile
জানার দ্বিতীয় জিনিসটি হল যে সমস্ত আউটপুট একই নয়। ত্রুটি বার্তাগুলিকে ভিন্নভাবে বিবেচনা করা হয়, এবং যদিও সেগুলি স্ক্রিনে উপস্থিত হয়, তবে সেগুলিকে stdout হিসাবে বিবেচনা করা হয় না, তাই সেগুলি টি দ্বারা ধরা হবে না৷ (তাদের stderr হিসাবে বিবেচনা করা হয়।) এখানে গ্রেপের একটি উদাহরণ।
grep -r L2TP /etc | tee somefile
এটি নিম্নলিখিত চিত্রের মত কিছু প্রদর্শন করবে।
অনুমতি অস্বীকৃত বার্তা stderr এ লেখা হয়। stdout এ লেখা একমাত্র জিনিসটি হাইলাইট করা পাঠ্য। এই কারণেই আপনি লক্ষ্য করবেন যে "somefile" এর বিষয়বস্তু নীচের ছবিতে দেখানো হয়েছে৷
এই ক্ষেত্রে, যেখানে গ্রেপ পাঠ্য অনুসন্ধান করতে ব্যবহৃত হয়, এটি কার্যকর যে ত্রুটি বার্তাগুলি ফাইলে পুনঃনির্দেশিত হয় না। তারা কেবল অপ্রয়োজনীয় আবর্জনা দিয়ে ফাইলটি পূরণ করবে। আপনি শুধুমাত্র পাওয়া ফলাফল দেখতে চান. কিন্তু যখন আপনার ত্রুটি বার্তার প্রয়োজন হয়, 2>&1
ব্যবহার করুন , যা stderr কে stdout এ পুনঃনির্দেশ করে।
grep -r L2TP /etc 2>&1 | tee somefile
এই কমান্ডের সাহায্যে আপনি লক্ষ্য করবেন যে somefile-এ এখন ত্রুটির বার্তাও রয়েছে।
উপসংহার
আশা করি, এই টিউটোরিয়ালটি টি কমান্ডের সর্বাধিক ব্যবহার করার জন্য আপনার প্রয়োজনীয় সমস্ত কিছু কভার করে। কিন্তু আপনি যদি এমন কোনো পরিস্থিতির সম্মুখীন হন যেখানে আপনি টি-তে আটকে যান, তাহলে নিচে একটি মন্তব্য করুন এবং আমরা হয়তো সাহায্য করতে পারব।