লিনাক্সের কমান্ড লাইন ইন্টারফেস আপনার সিস্টেমে বিভিন্ন টাস্ক পারফর্ম করার একটি শক্তিশালী উপায় প্রদান করে। এর রুটের কারণে, লিনাক্সের টার্মিনালে অনেক ফিচার বেকড থাকে।
এই শক্তিশালী ফিচার দুটি হলো পাইপিং এবং রিডাইরেকশন। এই ফিচারগুলো আপনাকে কমান্ডের আউটপুট এবং ইনপুট অন্য কমান্ড এবং ফাইলের সাথে রিডাইরেক্ট করতে দেয়।
এই আর্টিকেলে, আপনি শিখবেন লিনাক্সে পাইপিং এবং রিডাইরেকশন কী, এবং এরপর নিজে কীভাবে এই ফিচারগুলো ব্যবহার করবেন তার গভীরে যাবেন।
প্রারম্ভিক জ্ঞান
এই গাইড পুরোপুরি বুঝতে, আপনার কমপক্ষে নিচের জ্ঞান থাকা উচিত:
- লিনাক্স অপারেটিং সিস্টেমের বেসিক বোঝাপড়া।
- লিনাক্স কমান্ড লাইন নিয়ে কাজ করার বেসিক অভিজ্ঞতা।
- লিনাক্স কমান্ড লাইন এক্সেস যাতে কমান্ডগুলো ট্রাই করতে পারেন।
আপনি যদি নতুন হন বা রিফ্রেশার দরকার হয়, তবে এই লিনাক্স কমান্ড লাইন টিউটোরিয়ালটি দেখুন।
লিনাক্সে পাইপিং কী?
কীভাবে জানার আগে, পাইপিং বলতে কী বুঝায়? পাইপিং হলো একটি লিনাক্স কমান্ডের আউটপুটকে অন্য একটি কমান্ডের ইনপুট হিসেবে ডায়রেক্ট করার কাজ। আপনি স্ট্যান্ডার্ড আউটপুট বা স্ট্যান্ডার্ড এরর এক কমান্ড থেকে অন্য কমান্ডে পাইপিং ব্যবহার করে পাঠাতে পারেন।
পাইপিং এর একটি সিম্পল উদাহরণ হলো একটি কমান্ডের আউটপুট নেয়া এবং সেটি অন্য একটি কমান্ডের ইনপুট হিসেবে ব্যবহার করা। পাইপ (|) মেটাক্যারেক্টারটি এই কাজের জন্য ব্যবহৃত হয়।
আপনি যদি মেটাক্যারেক্টারের কনসেপ্টে নতুন হন, তবে এটি কেবল কমান্ড লাইনে স্পেশাল মেনিং دار ক্যারেক্টারদের জন্য একটি ফ্যান্সি নাম। পাইপ (|) ছাড়াও লিনাক্সে অন্যান্য মেটাক্যারেক্টার রয়েছে। সাধারণ উদাহরণ হলো less than (<), greater than (>), এবং ampersand (&)।
পাইপিং এর বেসিক
pipe কমান্ড ব্যবহার করার বেসিক সিনট্যাক্স নিচের মতো:
command1 | command2 | command3 | ... | commandN উপরের সিনট্যাক্সে, টার্মিনাল কমান্ডগুলো বাম থেকে ডানে এক্সিকিউট করবে। এটি command1-এ শুরু হবে, তারপর আউটপুট command2-এ ইনপুট হিসেবে যাবে। command2-এর আউটপুট command3-এর ইনপুট হিসেবে ব্যবহার হবে এবং এইভাবে চলবে। পাইপিং এর ভালো দিক হলো আপনি চাইলে যতগুলো কমান্ড চেইন করতে পারেন।
পাইপিং উদাহরণ
নিচে pipe কমান্ড ব্যবহার করে বিভিন্ন টাস্ক পারফর্ম করার উদাহরণ দেওয়া হলো।
১. ফাইল এবং ডিরেক্টরির সংখ্যা গণনা
ls -l | wc -l উপরের উদাহরণে, প্রথম অংশ ls কমান্ড ব্যবহার করে করেন্ট ডিরেক্টরির সব ফাইল এবং ডিরেক্টরি লিস্ট করে। এডিশনাল -l অপশন ls কমান্ডকে লং লিস্ট ফরম্যাটে কন্টেন্ট লিস্ট করতে বলে।
ls -l কমান্ডের আউটপুট পাইপ করা হয় দ্বিতীয় অংশে। wc -l কমান্ড ls -l কমান্ডের আউটপুট থেকে লাইনের সংখ্যা গণনা করে এবং রেজাল্ট টার্মিনালে প্রিন্ট করে।
২. ফাইল এবং ডিরেক্টরির লিস্ট সর্ট করা
ls | sort উপরের কমান্ডে, ls কমান্ড করেন্ট ডিরেক্টরির ফাইল এবং ডিরেক্টরির লিস্ট আউটপুট করবে। লিস্টটি পাইপ করা হবে sort কমান্ডে, যা সেগুলো অ্যালফাবেটিক্যালি সর্ট করে এবং রেজাল্ট টার্মিনালে প্রিন্ট করে।
৩. একটি ফাইল থেকে ইউনিক ওয়ার্ড সর্ট এবং ডিসপ্লে করা
cat words.txt | sort -r | uniq তৃতীয় উদাহরণে তিনটি আলাদা কমান্ড দুটি পাইপ দ্বারা কানেক্টেড। প্রথম কমান্ড words.txt ফাইলের কন্টেন্ট আউটপুট করে, যেটিতে ওয়ার্ডের একটি লিস্ট রয়েছে।
আউটপুট পাইপ করা হয় sort -r কমান্ডে, যা ওয়ার্ডগুলো রিভার্স অ্যালফাবেটিক্যাল অর্ডারে সর্ট করে। অবশেষে, সর্টেড ওয়ার্ডগুলো পাইপ করা হয় uniq কমান্ডে, যা ডুপ্লিকেট রিমুভ করে এবং ইউনিক সর্টেড ওয়ার্ড আউটপুট করে।
কেন এবং কখন লিনাক্সে কমান্ড পাইপিং প্রয়োগ করবেন?
পাইপিং শুধু সিনট্যাক্স জানা নয়। সিনট্যাক্স খুব সিম্পল। পাইপিং কার্যকরভাবে ব্যবহার করতে, আপনাকে এর সারথ্য বুঝতে হবে।
পাইপিং এর উদ্দেশ্য হলো আপনাকে কমান্ড চেইন করতে সাহায্য করা, একটি কমান্ডের আউটপুটকে অন্যটির ইনপুট হিসেবে ব্যবহার করে।
পাইপিং কোনোভাবে অনারেলেটেড কমান্ড চেইন করার উপায় নয় যা আপনি সিকোয়েনশিয়ালি এক্সিকিউট করতে চান। যদি আপনাকে সেটি করতে হয়, তবে আপনার কমান্ডগুলো টার্মিনালে লিখুন এবং সেমিকোলন (;) দিয়ে সেপারেট করুন নিচের সিনট্যাক্স ব্যবহার করে:
command1 ; command2 ; ... ; commandN লিনাক্সে রিডাইরেকশন কী?
রিডাইরেকশন হলো আপনার কমান্ডের ইনপুট বা আউটপুট কোথায় যাবে তা নির্দেশ করার কাজ। ডিফল্টভাবে, কমান্ডগুলো স্ট্যান্ডার্ড ইনপুট থেকে ডেটা গ্রহণ করে এবং রেজাল্ট স্ট্যান্ডার্ড আউটপুটে আউটপুট করে।
রিডাইরেকশন যেটি খুব উপকারী একটি মূল ক্ষেত্র হলো কমান্ড এবং ফাইল নিয়ে কাজ করার সময়। আপনি উদাহরণস্বরূপ, একটি কমান্ডের আউটপুট টার্মিনালে প্রিন্ট করার বদলে একটি ফাইলে রিডাইরেক্ট করতে পারেন। অথবা, আপনি একটি নির্দিষ্ট ফাইল কমান্ডের ইনপুট হিসেবে ডিক্লেয়ার করতে পারেন।
পাইপিং-এর মতো, লিনাক্স রিডাইরেকশন করার জন্য স্পেশাল ক্যারেক্টার প্রদান করে। নিচে লিনাক্সের গুরুত্বপূর্ণ ফাইল-রিডাইরেকশন ক্যারেক্টার এবং তাদের কাজ দেওয়া হলো:
>– একটি কমান্ডের আউটপুট একটি নির্দিষ্ট ফাইলে ডায়রেক্ট করে।<– একটি নির্দিষ্ট ফাইলের কন্টেন্ট একটি কমান্ডে ডায়রেক্ট করে।>>– একটি কমান্ডের আউটপুট একটি নির্দিষ্ট ফাইলে ডায়রেক্ট করে। ফাইল এক্সিস্ট করলে এবং কন্টেন্ট থাকলে আউটপুট অ্যাপেন্ড করে।2>– একটি কমান্ড থেকে এরর মেসেজ একটি নির্দিষ্ট ফাইলে ডায়রেক্ট করে।2>>– একটি কমান্ড থেকে এরর মেসেজ একটি নির্দিষ্ট ফাইলে ডায়রেক্ট করে। ফাইল এক্সিস্ট করলে এবং কন্টেন্ট থাকলে এরর মেসেজ অ্যাপেন্ড করে।&>– স্ট্যান্ডার্ড আউটপুট এবং এরর দুটোই একটি নির্দিষ্ট ফাইলে ডায়রেক্ট করে।&>>– স্ট্যান্ডার্ড আউটপুট এবং এরর দুটোই একটি নির্দিষ্ট ফাইলে ডায়রেক্ট করে। ফাইল এক্সিস্ট করলে এবং কন্টেন্ট থাকলে অ্যাপেন্ড করে।
আসুন প্রতিটি ফাইল-রিডাইরেকশন ক্যারেক্টার গভীরে দেখি।
১. > দিয়ে আউটপুট রিডাইরেকশন
> সিম্বল আপনাকে একটি কমান্ডের আউটপুট একটি নির্দিষ্ট ফাইলে রিডাইরেক্ট করতে দেয়। এই সিম্বল ব্যবহার করে, আপনি যেকোনো এক্সিস্টিং ফাইলে আউটপুট রিডাইরেক্ট করতে পারেন। যদি ফাইল এক্সিস্ট না করে, তবে আউটপুট রিডাইরেকশন ক্যারেক্টার স্বয়ংক্রিয়ভাবে একটি নতুন ফাইল তৈরি করবে।
তবে, আপনাকে এক্সিস্টিং ফাইলে লিখার সময় সতর্ক থাকা উচিত কারণ সেটির কন্টেন্ট কোনো ওয়ার্নিং ছাড়াই ওভাররাইট হয়ে যাবে।
আউটপুট রিডাইরেকশন নিচের সিনট্যাক্স ব্যবহার করে করা যায়:
command > file command চালানোর আউটপুট file-এ লেখা হবে স্ট্যান্ডার্ড আউটপুটে (অথবা অন্য কথায়, টার্মিনালে প্রিন্ট হওয়ার বদলে)। আউটপুট রিডাইরেকশন করার একটি উদাহরণ:
ls -a > contents.txt উপরের কমান্ডে, করেন্ট ডিরেক্টরির আইটেমের লিস্ট (ডটফাইল, ডিরেক্টরি, এবং ফাইলসহ) contents.txt ফাইলে লেখা হবে। রিডাইরেকশনের কারণে টার্মিনালে কোনো আউটপুট দেখাবে না।
২. >> দিয়ে আউটপুট রিডাইরেকশন
>> আপনাকে একটি কমান্ডের আউটপুট একটি ফাইলে রিডাইরেক্ট করতে দেয়। কিন্তু, সিঙ্গেল greater than ক্যারেক্টার (>)এর বিপরীতে, >> আউটপুট অ্যাপেন্ড করবে যদি আপনি এক্সিস্টিং ফাইলে লিখতে চান (এর কন্টেন্ট ওভাররাইট করার বদলে)। যদি ফাইল এক্সিস্ট না করে, তবে এটি একটি নতুন ফাইল তৈরি করবে।
সিনট্যাক্স নিচের মতো:
command >> file >> ব্যবহার করে আউটপুট রিডাইরেকশন করার একটি উদাহরণ:
ls -a >> contents.txt ৩. < দিয়ে ইনপুট রিডাইরেকশন
কমান্ড লাইনে < ক্যারেক্টার আপনাকে একটি ফাইল থেকে একটি কমান্ডে ইনপুট রিডাইরেক্ট করতে দেয় কীবোর্ডের বদলে। < ব্যবহার করে ইনপুট রিডাইরেকশনের সিনট্যাক্স:
command < file ইনপুট রিডাইরেকশন ব্যবহার করার একটি উদাহরণ:
wc -w < files.txt উপরের উদাহরণে, আমরা files.txt-কে wc -w কমান্ডের ইনপুট হিসেবে পাস করছি, যা ফাইলে কতগুলো ওয়ার্ড আছে তা গণনা করে। কিন্তু আপনাকে অনেক সিনেরিওতে ইনপুট রিডাইরেকশন ক্যারেক্টার ব্যবহার করতে হয় না কারণ এটি ডিফল্ট বিহেভিয়র। উদাহরণস্বরূপ, উপরের কমান্ড নিচেরটির মতো:
wc -w files.txt ৪. 2> এবং 2>> দিয়ে এরর রিডাইরেকশন
কমান্ড লাইনে কাজ করার সময়, আপনি এরর ফেস করতে পারেন। উদাহরণস্বরূপ, আপনি উপযুক্ত পারমিশন ছাড়া একটি ফাইল এক্সিকিউট করতে চান। টার্মিনালকে এরর প্রিন্ট করার দিয়ে ছেড়ে দেয়ার বদলে, আপনি এরর রিডাইরেকশন ক্যারেক্টার ব্যবহার করে এরর মেসেজ কোথায় যাবে তা নির্দেশ করতে পারেন।
এরর রিডাইরেক্ট করার জন্য একটি ভালো জায়গা হলো এরর স্টোর করার জন্য ডেডিকেটেড একটি ফাইল। এক্সিস্ট না করা একটি ডিরেক্টরির ফাইল লিস্ট অ্যাক্সেস করার চেষ্টা করার একটি সিম্পল উদাহরণ:
ls nonexistent 2> error.txt উপরের উদাহরণে, টার্মিনাল এরর থ্রো করবে কারণ nonexistent নামক কোনো ফাইল নেই। কিন্তু কনসোলে প্রিন্ট করার বদলে, এরর রিডাইরেকশন ক্যারেক্টারের কারণে সেটি error.txt ফাইলে স্টোর হবে। তবে, যদি কোনো এরর না থাকে, তবে ফাইলটি খালি থাকবে।
আপনি যদি এক্সিস্টিং ফাইলে এরর অ্যাপেন্ড করতে চান ওভাররাইট করার বদলে, তবে 2>-এর বদলে 2>> ব্যবহার করুন।
৫. &> এবং &>> দিয়ে আউটপুট এবং এরর রিডাইরেকশন
স্ট্যান্ডার্ড আউটপুট বা স্ট্যান্ডার্ড এরর কোনটাকে ফাইলে রিডাইরেক্ট করতে হবে তা চয়েস না করে, &> আপনাকে দুটোই একসাথে রিডাইরেক্ট করতে দেয়। আপনি &>-কে আউটপুট রিডাইরেকশন (>) এবং এরর রিডাইরেকশন (2>) ক্যারেক্টারের কম্বিনেশন হিসেবে ভাবতে পারেন।
&> ব্যবহারের সিনট্যাক্স:
command &> output.txt command-এর এরর বা আউটপুট output.txt ফাইলে লেখা হবে। একটি উদাহরণ:
ls sample &> output.txt উপরের কমান্ডে, যদি sample ডিরেক্টরি উপলব্ধ না থাকে বা উপলব্ধ থাকেও আপনার রিড পারমিশন না থাকে, তবে উপযুক্ত এরর output.txt ফাইলে লেখা হবে। কিন্তু যদি এক্সিস্ট করে এবং আপনার রিড পারমিশন থাকে, তবে এর কন্টেন্ট output.txt ফাইলে আউটপুট হবে।
&>> ব্যবহার করলে ফাইল এক্সিস্ট করলে এবং কন্টেন্ট থাকলে আউটপুট অ্যাপেন্ড হবে।
পাইপিং এবং রিডাইরেকশন কম্বাইন করে কমান্ড লাইনের শক্তি আনলক করুন
পাইপিং এবং রিডাইরেকশন কম্বাইন করে ব্যবহার করলে আপনি কমপ্লেক্স অপারেশন পারফর্ম করতে পারবেন ভায়িত্ব ছাড়া। দুটোকে কীভাবে কম্বাইন করবেন তা শিখলে, আপনি কম টাইপিংয়ে विवിധ অ্যাকশন পারফর্ম করার কমপ্লেক্স কমান্ড তৈরি করতে পারবেন।
নিচের কমান্ডটি উদাহরণ হিসেবে নিন:
ls | grep ".txt" > text_files.txt ls কমান্ড করেন্ট ডিরেক্টরির কন্টেন্ট লিস্ট করে। আউটপুট পাইপ করা হয় grep কমান্ডে টেক্সট ফাইল ফিল্টার করতে। শেষে, grep কমান্ডের আউটপুট text_files.txt ফাইলে রিডাইরেক্ট করা হয়।
এই সিম্পল কিন্তু শক্তিশালী উদাহরণ দেখায় যে পাইপিং এবং রিডাইরেকশনের ক্ষেত্রে, একমাত্র লিমিট হলো আপনার মনে।
উপসংহার
এই টিউটোরিয়ালে, আপনি লিনাক্সে পাইপিং এবং রিডাইরেকশনের বেসিক শিখলেন। আমরা বেসিকসহ উদাহরণ দিয়ে দেখিয়েছি কীভাবে এই দুটি ফিচার ব্যবহার করতে হয়।
দুটি ফিচার আলাদা আলাদা শক্তিশালী, কিন্তু আপনি আরও এগিয়ে যেতে পারেন আপনার কমান্ডে সেগুলো কম্বাইন করে, যেমন শেষ সেকশনে দেখানো হয়েছে।
নিঃশুল্ক কোডিং শিখুন। freeCodeCamp-এর ওপেন সোর্স কারিকুলাম ৪০,০০০-এর বেশি লোককে ডেভেলপার হিসেবে চাকরি পেতে সাহায্য করেছে। শুরু করুন।