প্রযুক্তিগত পরিভাষায়, "/dev/null" হল একটি ভার্চুয়াল ডিভাইস ফাইল। যতদূর প্রোগ্রাম উদ্বিগ্ন হয়, এগুলিকে বাস্তব ফাইলের মতোই বিবেচনা করা হয়। ইউটিলিটিগুলি এই ধরণের উত্স থেকে ডেটা অনুরোধ করতে পারে এবং অপারেটিং সিস্টেম তাদের ডেটা ফিড করে। কিন্তু, ডিস্ক থেকে পড়ার পরিবর্তে, অপারেটিং সিস্টেম গতিশীলভাবে এই ডেটা তৈরি করে। এই ধরনের ফাইলের একটি উদাহরণ হল “/dev/zero.”
এই ক্ষেত্রে, তবে, আপনি একটি ডিভাইস ফাইল লিখতে হবে. আপনি “/dev/null”-এ যা লিখবেন তা বাতিল, ভুলে যাওয়া, শূন্যে ফেলে দেওয়া হবে। কেন এটি দরকারী তা বোঝার জন্য, আপনাকে প্রথমে লিনাক্স বা *নিক্স টাইপ অপারেটিং সিস্টেমে স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি সম্পর্কে প্রাথমিক ধারণা থাকতে হবে।
stdout এবং stder
একটি কমান্ড-লাইন ইউটিলিটি দুই ধরনের আউটপুট তৈরি করতে পারে। স্ট্যান্ডার্ড আউটপুট stdout এ পাঠানো হয়। ত্রুটিগুলি stderr এ পাঠানো হয়৷
৷ডিফল্টরূপে, stdout এবং stderr আপনার টার্মিনাল উইন্ডো (বা কনসোল) এর সাথে যুক্ত। এর মানে হল যে কিছু stdout এবং stderr-এ পাঠানো হয় সাধারণত আপনার স্ক্রিনে প্রদর্শিত হয়। কিন্তু শেল পুনর্নির্দেশের মাধ্যমে, আপনি এই আচরণ পরিবর্তন করতে পারেন। উদাহরণস্বরূপ, আপনি একটি ফাইলে stdout পুনর্নির্দেশ করতে পারেন। এইভাবে, স্ক্রিনে আউটপুট প্রদর্শনের পরিবর্তে, এটি আপনার পরে পড়ার জন্য একটি ফাইলে সংরক্ষিত হবে – অথবা আপনি একটি ফিজিক্যাল ডিভাইসে, বলুন, একটি ডিজিটাল LED বা LCD ডিসপ্লেতে stdout রিডাইরেক্ট করতে পারেন৷
আপনি যদি আরও জানতে চান তাহলে পাইপ এবং পুনঃনির্দেশ সম্পর্কে একটি সম্পূর্ণ নিবন্ধ উপলব্ধ।
-
2>
সহ আপনি স্ট্যান্ডার্ড ত্রুটি বার্তা পুনর্নির্দেশ. উদাহরণ:2>/dev/null
অথবা2>/home/user/error.log
. -
1>
সহ আপনি স্ট্যান্ডার্ড আউটপুট রিডাইরেক্ট করুন। -
&>
সহ আপনি স্ট্যান্ডার্ড এরর এবং স্ট্যান্ডার্ড আউটপুট উভয়ই রিডাইরেক্ট করেন।
আপনার প্রয়োজন নেই এমন আউটপুট থেকে মুক্তি পেতে /dev/null ব্যবহার করুন
যেহেতু দুই ধরনের আউটপুট আছে, স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি, তাই প্রথম ব্যবহারের ক্ষেত্রে এক প্রকার বা অন্যটিকে ফিল্টার করা হয়। একটি বাস্তব উদাহরণের মাধ্যমে বোঝা সহজ। ধরা যাক আপনি পাওয়ার সেটিংস উল্লেখ করে এমন ফাইলগুলি খুঁজে পেতে "/sys"-এ একটি স্ট্রিং খুঁজছেন৷
grep -r power /sys/
এমন অনেক ফাইল থাকবে যা একজন নিয়মিত, নন-রুট ব্যবহারকারী পড়তে পারবে না। এর ফলে অনেক "অনুমতি অস্বীকার" ত্রুটি দেখা দেবে৷
৷এইগুলি আউটপুটকে বিশৃঙ্খল করে এবং আপনি যে ফলাফলগুলি খুঁজছেন তা চিহ্নিত করা কঠিন করে তোলে। যেহেতু "অনুমতি অস্বীকার করা হয়েছে" ত্রুটিগুলি stderr এর অংশ, তাই আপনি সেগুলিকে "/dev/null" এ পুনঃনির্দেশ করতে পারেন৷
grep -r power /sys/ 2>/dev/null
আপনি দেখতে পাচ্ছেন, এটি পড়া অনেক সহজ।
অন্য ক্ষেত্রে, এটি বিপরীত করতে উপযোগী হতে পারে:স্ট্যান্ডার্ড আউটপুট ফিল্টার করুন যাতে আপনি শুধুমাত্র ত্রুটি দেখতে পারেন।
ping google.com 1>/dev/null
উপরের স্ক্রিনশটটি দেখায় যে, পুনঃনির্দেশ না করে, পিং তার স্বাভাবিক আউটপুট প্রদর্শন করে যখন এটি গন্তব্য মেশিনে পৌঁছাতে পারে। দ্বিতীয় কমান্ডে, নেটওয়ার্ক অনলাইনে থাকাকালীন কিছুই প্রদর্শিত হয় না, তবে এটি সংযোগ বিচ্ছিন্ন হওয়ার সাথে সাথে শুধুমাত্র ত্রুটি বার্তাগুলি প্রদর্শিত হয়৷
আপনি stdout এবং stderr উভয়কে দুটি ভিন্ন স্থানে পুনঃনির্দেশ করতে পারেন।
ping google.com 1>/dev/null 2>error.log
এই ক্ষেত্রে, stdout বার্তাগুলি মোটেও প্রদর্শিত হবে না এবং ত্রুটি বার্তাগুলি "error.log" ফাইলে সংরক্ষিত হবে৷
সমস্ত আউটপুটকে /dev/null এ রিডাইরেক্ট করুন
কখনও কখনও এটি সমস্ত আউটপুট পরিত্রাণ পেতে দরকারী। এটি করার দুটি উপায় রয়েছে৷
৷grep -r power /sys/ >/dev/null 2>&1
স্ট্রিং >/dev/null
মানে "/dev/null-এ stdout পাঠান," এবং দ্বিতীয় অংশ, 2>&1
, মানে stdout এ stderr পাঠান। এই ক্ষেত্রে আপনাকে কেবল "1" এর পরিবর্তে "&1" হিসাবে stdout উল্লেখ করতে হবে। "2>1" লিখলে শুধুমাত্র "1" নামের একটি ফাইলে stdout পুনঃনির্দেশিত হবে৷
এখানে উল্লেখ করা গুরুত্বপূর্ণ যে অর্ডারটি গুরুত্বপূর্ণ। যদি আপনি এইভাবে পুনঃনির্দেশিত প্যারামিটারগুলিকে বিপরীত করেন:
grep -r power /sys/ 2>&1 >/dev/null
এটি উদ্দেশ্য হিসাবে কাজ করবে না। কারণ যত তাড়াতাড়ি 2>&1
ব্যাখ্যা করা হয়, stderr stdout এ পাঠানো হয় এবং পর্দায় প্রদর্শিত হয়। এরপর, stdout চাপা হয় যখন "/dev/null" এ পাঠানো হয়। চূড়ান্ত ফলাফল হল যে আপনি সমস্ত আউটপুট দমন করার পরিবর্তে পর্দায় ত্রুটিগুলি দেখতে পাবেন। আপনি যদি সঠিক ক্রম মনে না রাখতে পারেন, তাহলে একটি সহজ পুনঃনির্দেশ আছে যা টাইপ করা অনেক সহজ:
grep -r power /sys/ &>/dev/null
এই ক্ষেত্রে, &>/dev/null
"এই অবস্থানে stdout এবং stderr উভয়ই পুনঃনির্দেশিত" বলার সমতুল্য৷
অন্যান্য উদাহরণ যেখানে এটি /dev/null এ পুনঃনির্দেশিত করা কার্যকর হতে পারে
বলুন আপনি দেখতে চান আপনার ডিস্ক কত দ্রুত ক্রমিক ডেটা পড়তে পারে। পরীক্ষাটি অত্যন্ত নির্ভুল নয় কিন্তু যথেষ্ট সঠিক। আপনি dd
ব্যবহার করতে পারেন এর জন্য, তবে dd হয় stdout-এ আউটপুট দেয় বা একটি ফাইলে লিখতে নির্দেশ দেওয়া যেতে পারে। of=/dev/null
সহ আপনি dd কে এই ভার্চুয়াল ফাইলে লিখতে বলতে পারেন। আপনাকে এখানে শেল পুনর্নির্দেশগুলিও ব্যবহার করতে হবে না। if=
পড়ার জন্য ইনপুট ফাইলের অবস্থান নির্দিষ্ট করে; of=
আউটপুট ফাইলের নাম উল্লেখ করে, কোথায় লিখতে হবে।
dd if=debian-disk.qcow2 of=/dev/null status=progress bs=1M iflag=direct
কিছু পরিস্থিতিতে, আপনি একটি সার্ভার থেকে কত দ্রুত ডাউনলোড করতে পারেন তা দেখতে চাইতে পারেন। কিন্তু আপনি অপ্রয়োজনীয়ভাবে আপনার ডিস্কে লিখতে চান না। সহজভাবে, একটি নিয়মিত ফাইলে লিখবেন না, "/dev/null" এ লিখুন৷
৷wget -O /dev/null https://ftp.halifax.rwth-aachen.de/ubuntu-releases/18.04/ubuntu-18.04.2-desktop-amd64.iso
উপসংহার
আশা করি, এই নিবন্ধের উদাহরণগুলি আপনাকে "/dev/null" ব্যবহার করার জন্য আপনার নিজস্ব সৃজনশীল উপায়গুলি খুঁজে পেতে অনুপ্রাণিত করতে পারে৷
এই বিশেষ ডিভাইস ফাইলের জন্য একটি আকর্ষণীয় ব্যবহার-কেস জানেন? নীচে একটি মন্তব্য করুন এবং জ্ঞান ভাগ করুন!