GNU/লিনাক্স সিস্টেমের সর্বোত্তম আউটপুট পেতে কমান্ড প্রম্পট ও শেল স্ক্রিপ্ট জানা এখনও জরুরি। কমান্ড লাইনে যত বেশি কাজ করবেন, তত বুঝবেন অধিকাংশ কমান্ড একটি ছোট সাবসেট। অধিকাংশ টাস্ক অভ্যাসগত এবং আপনি একইভাবে প্রতিদিন রান করেন।
বেশirks কমান্ড ইউটিলিটির মейকাররা শর্টেন্ড নাম দিয়ে এক্সট্রা টাইপিং কমাতে চেয়েছে—যেমন list-এর বদলে ls, change-directory-এর বদলে cd। অনেক লিনাক্স ইউজার একই কমান্ড বারবার ব্যবহার করেন। একই কমান্ড বারবার টাইপ/কপি করা প্রোডাক্টিভিটি কমায় এবং আসল কাজ থেকে মন ভালোবাসে।
লং কমান্ড টাইপ করার সময় কমাতে শেল алиাস এবং ফাংশন—এই দুটি পাওয়ারফুল টুল। এগুলো দিয়ে রিপিটিটিভ টাস্ক টেম করা, লং প্রসেস শর্ট করা, এবং কাস্টমাইজড কমান্ড কনফিগার করা যায় যেগুলো আপনি সবসময় ব্যবহার করেন এবং মনে রাখতে কষ্ট পান।
আপনি নিজের নির্দিষ্ট চাহিদা অনুযায়ী কমান্ড ডিফাইন করতে পারেন এবং রিপিটিটিভ টাস্কের বোঝা হালকা করতে পারেন।
আলিয়াস এবং শেল স্ক্রিপ্ট (ফাংশন) একই টাইপের কাজ করে। এগুলো আপনাকে Bash শেল ফাংশনালিটির একটি সেট ডিফাইন ও নেম দেয়ার সুযোগ দেয় যা পরে সেই নামে কল করা যায়। নাম টাইপ করা প্রতিবার সকল স্টেপ বা কমান্ড টাইপ করার চেয়ে সহজ ও সুবিধাজনক।
আলিয়াস ও ফাংশনের পার্থক্য হলো কমপ্লেক্সিটি ও স্কেল। স্ক্রিপ্ট বড় ও জটিল কোড চাঙ্ক ধারণ করতে ভালো। আলিয়াস ছোট, সংক্ষিপ্ত কমান্ড সেট ধারণ করতে পারফেক্ট।
শেল আলিয়াস
শেল আলিয়াস হলো একটি কাস্টম শর্টকাট যা একটি কমান্ড বা কমান্ড সেট রেফারেন্স করে কাস্টম অপশনসহ বা ছাড়া। এই আলিয়াসগুলো লং কমান্ডের জন্য অল্টারনেটিভ, সহজে মনে রাখার নাম যেগুলো আপনাকে বারবার এক্সিকিউট করতে হয়। কমান্ড লাইনে টাইপ করলে শেল প্রথমে তার আলিয়াস লিস্টে সেটা খুঁজে। মিল পেলে আলিয়াসটি তার করেসপন্ডিং টেক্সট দিয়ে রিপ্লেস করে; তারপর পুরো কমান্ড লাইন রিভিউ করে এক্সিকিউট করে।
সম্ভবত আপনি ইতিমধ্যে লিনাক্স সিস্টেমে আলিয়াস ব্যবহার করেছেন কারণ অধিকাংশ লিনাক্স ডিস্ট্রো ডিফল্টভাবে ইউজার অ্যাকাউন্টের .bashrc ফাইলে কিছু জনপ্রিয় আলিয়াস যোগ করে দেয়।
আলিয়াসের বাইরে: শেল ফাংশন
সদৃশ কিন্তু নন-আইডেন্টিক্যাল কোড ব্লক আলিয়াস দিয়ে রিপ্লেস করা যায় না। এগুলো এরর হ্যান্ডেল করতে পারে না, কাস্টম এক্সিট কোড রিটার্ন করতে পারে না, ফ্লো কন্ট্রোল বা ভেরিয়েবল ব্যবহার করতে পারে না। এগুলো দরকার হলে শেল ফাংশন ব্যবহার করুন।
শেল ফাংশন হলো কমপ্লিট সাব-স্ক্রিপ্ট হিসেবে স্ট্রাকচার্ড কোড ব্লক, একবার লেখা হয়ে যেকোনো স্ক্রিপ্ট থেকে ইনভোক করা যায়।
আলিয়াসের সিনট্যাক্স:
Bash-এ আলিয়াস তৈরি করা খুব সোজা। সিনট্যাক্স:
alias alias_name="command_to_run"
কারেন্ট সেশনে নতুন বাশ আলিয়াস তৈরি করতে:
aliasটাইপ করুন- আলিয়াস নাম ডিক্লেয়ার করুন
- ইকুয়াল সাইন দিন
- আলিয়াস কল করলে যে কমান্ড রান হবে সেটা লিখুন
কমান্ড কোটেশনে দিতে হবে এবং ইকুয়াল সাইনের চারপাশে স্পেস নয়। স্পেস দিলে কমান্ড ভাঙবে। প্রতিটি আলিয়াস নতুন লাইনে ডিক্লেয়ার করতে হবে।
উদাহরণ দিয়ে ক্লিয়ার করি। লিনাক্স কমান্ড লাইনে সবচেয়ে বেশি ব্যবহৃত কমান্ড ls। অধিকাংশ সময় ls সাথে la সুইচ ব্যবহার করা হয় যা হিডেন ফাইলসহ সকল ফাইল ও ডিরেক্টরি লং লিস্ট ফরম্যাটে দেখায়। এখন একটি সিম্পল বাশ আলিয়াস ll তৈরি করি যা ls -la এর শর্টকাট।
- টার্মিনাল উইন্ডো খুলুন
- টাইপ করুন:
alias ll="ls -la"
এবং Enter চাপুন
- কনসোলে
llটাইপ করে Enter চাপুন
- আউটপুট
ls -laটাইপ করলে যেটা আসে সেটাই আসবে।
উপরে ডিফাইন করা ll আলিয়াস শুধু কারেন্ট শেল সেশনে উপলব্ধ। সেশন বন্ধ করলে বা অন্য টার্মিনাল থেকে নতুন সেশন শুরু করলে উপলব্ধ নয়।
পারসিস্টেন্ট করার পদ্ধতি পরে আলোচনা করব। উদাহরণগুলো bash শেলের জন্য, কিন্তু কনসেপ্ট ও অধিকাংশ কোড অন্যান্য শেলের জন্যও ভ্যালিড।
প্রিডিফাইনড আলিয়াস
কিছু আলিয়াস আপনার জন্য প্রিডিফাইনড থাকে। সিস্টেমে ডিফাইন করা সকল আলিয়াসের লিস্ট জানতে alias কমান্ড প্যারামিটার ছাড়া চালান:
alias
এই আর্টিকেল রিসার্চ করা উবুন্টু টেস্ট মেশিনের আলিয়াসগুলো। আপনার কাস্টম ডিফাইন করা আলিয়াসও এই লিস্টে দেখাবে।
ls কমান্ডের জন্য একাধিক আলিয়াস রয়েছে, এবং grep ফ্যামিলির কমান্ডের জন্য কালার আউটপুট দেয় এমন গ্রুপ আলিয়াস রয়েছে। উপরে ডিফাইন করা আলিয়াস অনুযায়ী আপনি যখন grep টাইপ করবেন:
grep
এটি ইন্টারপ্রেট হবে:
grep --color=auto
এটি আলিয়াসের একটি গুরুত্বপূর্ণ পয়েন্ট দেখায়। এগুলো এক্সিস্টিং কমান্ডের সাথে একই নাম রাখতে পারে। এগুলো নিজের ভেতরেই অরিজিনাল কমান্ড ধারণ করতে পারে।
grep আলিয়াসের ডেফিনিশন:
alias grep='grep --color=auto'
aliasকমান্ড দিয়ে আলিয়াস ডিফাইন করা হয়।- আলিয়াসের নাম দিন। উদাহরণে
grep। - ইকুয়াল সাইন আলিয়াসের নামকে এর বডি-র সাথে কানেক্ট করে। সিম্পল আলিয়াস বাদে সিঙ্গেল কোটেশনে বডি রাখা হয়।
- আলিয়াসের বডি হলো সেকশন যা কমান্ড লাইনে আলিয়াস ইউজ করলে এক্সিকিউট হয়।
- এই আলিয়াসের বডি শুধু
grepকমান্ডকে--color=autoঅপশনসহ কল করে।
The Alert Alias
লিস্টের শীর্ষে একটি জটিল আলিয়াস alert রয়েছে। দ্রুত জানার জন্য: alert alias কমান্ড শেষ হলে আপনাকে জানাতে ব্যবহৃত হয়। এটি কমান্ড সফল হয়েছে কিনা সেটাও ইন্ডিকেট করে। স্ক্রিনের টপে গ্রাফিক্যাল সিস্টেম এলার্ট দেখায়।
সিম্পল উদাহরণ: sleep কমান্ড ৫ সেকেন্ড স্লিপ করবে। তারপর alert alias কল হবে। Алиас পূর্বের কমান্ডের রেসপন্স চেক করে। হিস্ট্রি ফাইল থেকে লাস্ট কমান্ড এক্সট্রাক্ট করে। কমান্ড সফল হয়েছে কিনা নির্ধারণ করে। সিস্টেম এলার্টে রেজাল্ট দেখায়।
কমান্ড প্রত্যাশা অনুযায়ী সম্পন্ন হলে সিস্টেম এলার্টে আইকন হলো ছোট টার্মিনাল উইন্ডো। কমান্ড এরর কোড রিটার্ন করলে আইকন হবে রেড এরর আইকন।
sleep 5; alert
৫ সেকেন্ড পর এই সিস্টেম এলার্ট দেখবেন:
আইকন ছোট টার্মিনাল উইন্ডো—অর্থাৎ সব ঠিকঠাক। এবার একটা ফেইল হওয়া কমান্ড দিয়ে ট্রাই করুন:
DoomedToFail; alert
এখন সিস্টেম এলার্টে এরর আইকন।
ট্রিভিয়াল আলিয়াস ডিফাইন করা
দেখেছি, আলিয়াস ডিফাইন করতে alias কমান্ড ব্যবহার করা হয়।
আমরা clear কমান্ডের জন্য একটি সিউডোনিম তৈরি করব। আমাদের আলিয়াস হবে cls এবং এটি clear কমান্ড কল করবে।
আমাদের আলিয়াস ডেফিনিশন একদম ট্রিভিয়াল তাই সিঙ্গেল কোটেশন র্যাপ করার দরকার নেই। যদি বডি ততটুকু কমপ্লেক্স হয় বা স্পেস থাকে তবে সিঙ্গেল কোটেশন দিন। আমরা আলিয়াস ডিফাইন করব, ls দিয়ে আউটপুট দেখাব, তারপর আমাদের নতুন আলিয়াস cls দিয়ে স্ক্রিন ক্লিয়ার করব।
alias cls=clear ls -l cls
স্ক্রিন ক্লিয়ার হয়েছে। সাকসেস, যদিও ক্ষণস্থায়ী। আলিয়াস ততক্ষণই টিকবে যতক্ষণ টার্মিনাল উইন্ডো ওপেন। উইন্ডো বন্ধ হলে আলিয়াস চলে যাবে।
.bashrc ফাইল দিয়ে আলিয়াস পারম্যানেন্ট করা
প্রি-প্যাকেজড আলিয়াসগুলো কোথায় ডিফাইন থাকে জানতে চাইছেন? আপনার হোম ফোল্ডারের .bashrc ফাইলে। এই ফাইল পড়া হয় এবং এর ভেতরের কমান্ড এক্সিকিউট হয় যখন আপনি ইন্টারেক্টিভ শেল শুরু করেন—অর্থাৎ টার্মিনাল উইন্ডো খোলেন।
হোম ফোল্ডারে নিচের কমান্ড দিয়ে সিনট্যাক্স হাইলাইটিংসহ .bashrc ফাইল দেখুন:
gedit .bashrc
এটি gedit এডিটর লঞ্চ করবে .bashrc ফাইল লোড করে।
হাইলাইটেড এরিয়া দুটি জায়গায় আলিয়াস ডিফাইন করা দেখাচ্ছে।
ডকুমেন্ট স্ক্রোল করলে আলিয়াস রিলেটেড আরও দুটি সেকশন পাবেন:
প্রথমটি alert alias-এর ডেফিনিশন। দ্বিতীয়টি একটি if স্টেটমেন্ট। অর্থ: "যদি .bash_aliases ফাইল এক্সিস্ট করে, তবে সেটা রিড ইন করো।"
কয়েকটি আলিয়াস ডিফাইন করতে চাইলে .bashrc ফাইলে নিচে ls আলিয়াস সেকশনের নিচে যোগ করুন।
অনেক আলিয়াস তৈরি করতে চাইলে বা আলাদা ফাইলে রাখতে চাইলে .bash_aliases ফাইলে ডিফাইন করুন। সুবিধা: .bashrc ফাইলে অকস্মাত পরিবর্তন হবেনা। আরেক সুবিধা: আলিয়াস আলাদা ফাইলে থাকলে নতুন সিস্টেমে কপি করা সহজ।
আলিয়াসের নাম সহজে মনে রাখার হয়ে দিন। ভবিষ্যতের রেফারেন্সের জন্য কমেন্ট যোগ করুন।
.bash_aliases ফাইলে আলিয়াস স্টোর করা
.bash_aliases ফাইল ডিফল্টে এক্সিস্ট করে না, তৈরি করতে হবে। কমান্ড:
touch .bash_aliases
ফাইল এডিট করে কয়েকটি আলিয়াস যোগ করুন। এই কমান্ড .bash_aliases ফাইল gedit-এ ওপেন করবে:
gedit .bash_aliases
আমরা তিনটি আলিয়াস যোগ করলাম। প্রথমটি আমাদের আগের cls আলিয়াস। দ্বিতীয়টি h.—history কমান্ড কল করার শর্টহ্যান্ড।
তৃতীয়টি ftc। এটি file type count-এর শর্টফর্ম।
এই আলিয়াস কিছুটা জটিল, তাই সিঙ্গেল কোটেশন র্যাপ করা হয়েছে। এটি পাইপ দিয়ে লিংক করা কমান্ড চেইন ব্যবহার করে। ভিন্ন ফাইল এক্সটেনশন ও ডিরেক্টরি নামের একটি সোর্টেড লিস্ট আউটপুট দেয় কাউন্টসহ।
.bash_aliases ফাইল সেভ করলে আমরা আশা করি আলিয়াসগুলো লাইভ হবে। কিন্তু তেমন হয় না। ফাইলটি Bash শেলে রিড ইন হওয়া লাগে। এটি হয় যখন ইন্টারেক্টিভ শেল ওপেন হয়।
Bash শেল বিল্ট-ইন . দিয়ে ফাইলের কমান্ড রিড ও এক্সিকিউট করা যায়। আমাদের .bash_alias ফাইল .bashrc প্রসেস হয়ে গেলে রিড ইন হয়, তাই আমরা .bashrc কল করব যাতে চেক করতে পারি .bash_alias কল হয়েছে কিনা এবং আলিয়াসগুলো লাইভ কিনা।
ব্যবহৃত কমান্ডগুলো:
gedit .bash_aliases
.bash_aliases ফাইল এডিট করতে।
. .bashrc
এটি .bashrc-র কমান্ড রিড ও এক্সিকিউট করবে, যা .bash_aliases কল করবে।
ftc
এটি ftc আলিয়াস কল করবে।
আমাদের আলিয়াস রেসপন্স দিয়েছে—অর্থাৎ Bash .bashrc ও .bash_aliases রিড ইন করেছে, এবং আমাদের নতুন আলিয়াসগুলো এখন লাইভ।
আপনি যেই সময় নতুন আলিয়াস যোগ করতে চান .bash_aliases ফাইলে যোগ করুন। একটা কাজ একবারাদিক করলে আলিয়াস বানাতে ভাবুন।
আলিয়াস রিমুভ করা
আলিয়াস রিমুভ করার কমান্ড রয়েছে যাতে Bash সেটা রিকগনাইজ বা রেসপন্ড না করে। কমান্ডের নাম রিফ্রেশিং ফোর্থরাইট: unalias।
ব্যবহার: আপনি যে আলিয়াস Bash-কে ভুলাতে চান তার নাম দিন। আমাদের ftc আলিয়াস ভুলাতে unalias ইউজ করুন, যেমন আগে ব্যবহৃত ll কমান্ড:
unalias ll
unalias` দিয়ে আপনার ডিফাইন করা এবং প্রিডিফাইনড আলিয়াসই রিমুভ করতে পারেন।
সিস্টেম থেকে সকল আলিয়াস রিমুভ করতে -a (all) অপশন ব্যবহার করুন:
unalias -a
Bash-এর মেমোরি লস পারম্যানেন্ট নয়। পরবর টার্মিনাল উইন্ডো খোললে "ভুলে যাওয়া" আলিয়াসগুলো ফিরে আসবে। সত্যিকারের ওয়াইপ আউট করতে .bashrc এবং .bash_alias ফাইল থেকে রিমুভ করতে হবে।
ফিরে পাওয়ার চান্স রাখতে চাইলে .bashrc থেকে ডিলিট করবেন না। বরং প্রতিটি আলিয়াস লাইনের শুরুতে হ্যাশ # দিয়ে কমেন্ট আউট করুন। .bash_alias ফাইল ইফেক্টলেস করতে রিনেম করুন। .bashrc এটা দেখতে না পেলে রিড ইন করবে না। রিভার্স করলে আলিয়াস ফিরে আসবে।
টেম্পোরেরিলি আলিয়াস বাইপাস করতে (যেমন ls-কে ls -a-তে আলিয়াস করা হয়েছে), টাইপ করুন:
\ls
ফলস্বরূপ নরমাল কমান্ড কল হবে, আলিয়াসড ভার্সন নয়।
Alias কমান্ডের হেল্প:
- --help অপশন: হেল্প ইনফরমেশন ডিসপ্লে করে।
সিনট্যাক্স:
alias --help
শেল ফাংশন
কখনো কখনো আর্গুমেন্ট গ্রহণকারী আলিয়াস দরকার হয়—তখন বাশ ফাংশন ব্যবহার করা হয়।
সিনট্যাক্স
Bash ফাংশন তৈরি করা কঠিন নয়। দুটি ফরম্যাটে ডিক্লেয়ার করা যায়:
function_name () { [commands] }
অথবা
function function_name { [commands] }
দ্বিতীয় ফরম্যাট এক লাইনে কমপ্রেস করা যায় এবং কমান্ডগুলো সেমিকোলন দিয়ে আলাদা করা যায়। লাস্ট কমান্ডের পরও সেমিকোলন অবশ্যই দিতে হবে:
function_name () { command1; command2; }
আলিয়াসের মতো Bash শেল ফাংশন .bashrc ফাইলে ডিফাইন করা যায়, কিন্তু আলাদা ডেফিনিশন ফাইলে রাখা নীটার। আমরা .bash_functions নাম দিব, .bash_aliases কনভেনশন অনুসরণ করে।
এznac .bashrc ফাইলকে আমাদের ডেফিনিশন রিড ইন করতে বলতে হবে। .bash_aliases রিড ইন করার কোড স্নিপেট কপি-পেস্ট করে দুটি জায়গায় .bash_aliases কে .bash_functions করে দিন। gedit .bashrc দিয়ে ফাইল লোড করুন:
gedit .bashrc
নিচে হাইলাইটেড সেকশন যোগ করুন।
আলিয়াস সেকশন হাইলাইট করে Ctrl+C, নতুন সেকশনে Ctrl+V পেস্ট করুন। তারপর দুটি জায়গায় .bash_aliases কে .bash_functions রিপ্লেস করুন।
চেঞ্জ সেভ করে gedit বন্ধ করুন।
এখন .bash_functions ফাইল তৈরি ও এডিট করুন, একটি ফাংশন ডেফিনিশন দিন।
touch .bash_functions gedit .bash_functions
এটি খালি .bash_functions ফাইল gedit-এ ওপেন করবে।
আমরা up নামে একটি সিম্পল ফাংশন যোগ করব। up একটি কমান্ড লাইন প্যারামিটার নেবে (ডিজিট)। up সেটা সংখ্যক বার cd .. কল করবে। যেমন up 2 দিলে দুবার cd .. কল করে ডিরেক্টরি ট্রিতে দু লেভেল উপরে যাবে।
ফাংশন ডিফাইন করার বিভিন্ন পদ্ধতি রয়েছে। একটা:
function up() {
function শব্দ অপশনাল। ট্রেডিশনালিস্ট হলে ব্যবহার করুন, না হলে বাদ দিন।
আমাদের পুরো ফাংশন gedit-এ:
function up() {
এটি ফাংশন ডেফিনিশন শুরু করে এবং ফাংশন নাম up।
levels=$1
levels নামক ভেরিয়েবল তৈরি করে এবং প্রথম প্যারামিটারের ভ্যালু সেট করে। $1 মানে "ফার্স্ট কমান্ড লাইন প্যারামিটার"।
while [ "$levels" -gt "0" ]; do
একটি লুপে প্রবেশ করবে যা বোঝায় "যখন levels-এর ভ্যালু পজিটিভ বা শূন্য থেকে বড়, তখন লুপের বডি এক্সিকিউট করো।"
লুপের বডিতে দুটি কমান্ড:
cd ..
ডিরেক্টরি ট্রিতে এক লেভেল উপরে যাও।
levels=$(($levels - 1))
levels-কে নতুন ভ্যালু দাও, যা কারেন্ট ভ্যালুর চেয়ে এক কম।
লুপের শীর্ষে ফিরে যাবে, levels এবং শূন্যের তুলনা আবার হবে। levels শূন্যের চেয়ে বড় হলে লুপ বডি আবার রান হবে। না হলে লুপ শেষ, done স্টেটমেন্টে যাবে, ফাংশন শেষ।
Save করুন এবং gedit বন্ধ করুন।
.bashrc-র কমান্ড রিড ও এক্সিকিউট করব যাতে আমাদের .bash_functions ফাইলও রিড ও এক্সিকিউট হয়।
. .bashrc
ফাংশন টেস্ট করব কিছু ডিরেক্টরিতে যেতে up দিয়ে হায়ার পয়েন্টে ফিরে যাব।
cd ./work/backup/ up 2
ফাংশন কাজ করছে। ডিরেক্টরি ট্রিতে দুই লেভেল উপরে এসেছি।
type কমান্ড দিয়ে ট্র্যাক রাখা
আলিয়াস ও ফাংশন লাইব্রেরি বড় হলে কোথায় আলিয়াস কোথায় ফাংশন সেটা মনে রাখা কঠিন। type কমান্ড দিয়ে জানা যায়। কুল পার্ট: ডেফিনিশনও দেখাবে।
আমাদের ftc আলিয়াস এবং up ফাংশনে type ইউজ করি।
type ftc type up
খুবই উপকারী রিমাইন্ডার—প্রতিটির টাইপ এবং ডেফিনিশন সহ।
কালেকশন শুরু করুন
আলিয়াস ও ফাংশন কমান্ড লাইন ইউজ খুব ফাস্ট করে দেয়। কমান্ড সিকোয়েন্স শর্ট করে, স্ট্যান্ডার্ড কমান্ডের সাথে আপনার সবসময় ব্যবহৃত অপশন বেক করতে দেয়। আপনি যখন কোনো নিফ्टी ワン-লাইনার বা ইউজফুল ফাংশন দেখেন, অ্যাডাপ্ট ও পার্সোনালাইজ করে .bash_aliases বা .bash_functions ফাইলে যোগ করুন। ব্যাপক ব্যবহার শেলে আপনার টাইম আনন্দদায়ক এবং কম জটিল করবে।
সতর্ক रहুন: ডেস্ট্রাক্টিভ বিহেভিয়ারের সাথে এক্সিস্টিং কমান্ড রিডিফাইন করলে সমস্যা হয়। উল্টা করা—কমান্ডকে সेफ ভারিয়ান্টে আলিয়াস করা (রিকার্সিভ ডিলিটের আগে কনফারমেশন)—ও সমস্যা সৃষ্টি করতে পারে যখন আপনি সেটা ছাড়া সিস্টেমে কাজ করবেন এবং সেটার ওপর নির্ভরশীল হয়ে যাবেন। আপনার হিস্ট্রি সার্চ করে সবচেয়ে কমন কমান্ডগুলো খুঁজে বের করুন যেগুলোর জন্য আলিয়াস বানানো উপযোগী।