بخش ۵ – معرفی انواع Shellها: Bash، Zsh، Fish و مقایسه کامل
مقدمه
در بخش قبل یاد گرفتیم که Shell یک برنامهی مفسر دستورات است؛ یعنی بین کاربر و هسته لینوکس قرار میگیرد و دستورها را اجرا میکند.
حالا میخواهیم به سراغ انواع شلها برویم؛ در لینوکس چندین شل معروف وجود دارد که هر کدام ویژگیها، مزایا و معایب خاص خودش را دارد.
در این آموزش با چهار شل مهم آشنا میشویم:
- Bash
- Zsh
- Fish
- Sh (و اشاره به چند شل فرعی دیگر برای تکمیل دید)
۱. Bash (Bourne Again Shell)
تاریخچه
- ساخته شده در سال ۱۹۸۹ بهعنوان جایگزین sh (Bourne Shell)
- اکثر توزیعهای لینوکس به صورت پیشفرض از Bash استفاده میکنند
- از محبوبترین شلهای دنیای لینوکس و یونیکس است
ویژگیها
- سازگاری بالا با sh و اسکریپتهای قدیمی
- پشتیبانی از History (تاریخچه دستورات)
- پشتیبانی از Tab Completion (تکمیل خودکار نامها)
- امکان استفاده از متغیرها، حلقهها، شرطها و توابع
- پشتیبانی از اسکریپتنویسی قدرتمند
مثالهای عملی
۱. مشاهده نسخه Bash:
bash --version
۲. تاریخچه دستورات:
history
۳. اجرای حلقه ساده:
for i in 1 2 3; do echo "عدد $i"; done
۲. Zsh (Z Shell)
تاریخچه
- معرفی شده در سال ۱۹۹۰
- ترکیبی از ویژگیهای bash، ksh و tcsh
- قابلیت سفارشیسازی بسیار بالا
ویژگیها
- تکمیل خودکار دستورات پیشرفتهتر و هوشمندتر از Bash
- هایلایت کردن گرامر دستورات (Syntax Highlighting)
- موتور جستجوی قدرتمند در تاریخچه دستورات
- مناسب برای کاربرانی که زیبایی و عملکرد سریع میخواهند
- پشتیبانی از Plugins و Themes (مثل Oh My Zsh)
نصب Zsh (در Ubuntu/Debian):
sudo apt install zsh
نمونه ویژگی خاص – تکمیل خودکار دایرکتوریها:
اگر حتی یک بخشی از مسیر را بنویسی، Zsh میتواند کامل کند:
cd /u/lo<TAB>
# به طور خودکار /usr/local را کامل میکند
استفاده از Oh My Zsh برای امکانات بیشتر:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
با این کار ظاهر ترمینال رنگی، آیکوندار و هوشمند میشود.
۳. Fish (Friendly Interactive Shell)
تاریخچه و هدف
- ساخته شده در سال ۲۰۰۵
- طراحی شده برای کاربرپسند بودن و بدون نیاز به پیکربندی پیچیده
- حتی بدون تغییرات، ظاهری زیبا و امکانات جذاب دارد
ویژگیها
- Autocomplete بسیار هوشمند بر اساس تاریخچه و مسیرها
- Syntax Highlighting پیشفرض
- بدون نیاز به تنظیمات زیاد (Plug and Play)
- پیشنهاد دستور بر اساس تاریخچه مانند جستجوی گوگل
- اسکریپتنویسی سادهتر (ولی با تفاوتهای نحوی نسبت به Bash)
نصب Fish (در Ubuntu/Debian):
sudo apt install fish
نمونه پیشنهادی Live در Fish
وقتی شروع به تایپ ssh
کنی، اگر قبلاً جایی وصل شدی، Fish آدرس را حدس میزند و پیشنهاد میدهد.
۴. Sh (Bourne Shell)
تاریخچه
- ساختهشده توسط Stephen Bourne در دهه ۷۰
- شل پیشفرض سیستمعامل یونیکس اصلی
- بسیار سبک و مناسب اجرای اسکریپتهای ساده
ویژگیها
- بدون قابلیتهای پیشرفتهی Bash یا Zsh
- استفاده در اسکریپتنویسی سیستم برای بیشترین سازگاری
- سرعت بالا
۵. شلهای دیگری که باید بشناسی
- Ksh (KornShell) → ترکیبی از sh و ویژگیهای مدرن
- Tcsh → نسخه بهبودیافته csh با امکانات تعاملی
- Dash → بسیار سبک و سریع، مناسب بوت سیستم
۶. مقایسه کلی
ویژگی | Bash | Zsh | Fish | Sh |
---|---|---|---|---|
پیشفرض اکثر لینوکسها | ✅ | ❌ | ❌ | ❌ |
قدرت اسکریپتنویسی | عالی | عالی | متوسط (سینتکس متفاوت) | پایهای |
تکمیل خودکار پیشرفته | متوسط | عالی | عالی | ❌ |
سفارشیسازی ظاهری | متوسط | بسیار زیاد | خوب | ❌ |
مناسب مبتدیها | خوب | خوب | عالی | ضعیف |
سازگاری با اسکریپتها | عالی | عالی | نسبی | عالی |
۷. تمرین عملی
- تشخیص شل فعلی:
echo $SHELL
- نصب Zsh و تست آن:
sudo apt install zsh
zsh
- نصب Fish و تست:
sudo apt install fish
fish
- بازگشت به Bash:
bash
- تغییر شل پیشفرض:
chsh -s /bin/zsh
۸. تجربه واقعی
یادت باشه:
- Bash بهترین گزینه برای شروع و یادگیری مفاهیم پایه لینوکس است.
- Zsh برای کسانی که ظاهر ترمینال زیبا و ویژگیهای هوشمند میخواهند عالی است.
- Fish برای سادهترین تجربه ممکن مناسب است.
- Sh برای اجرای اسکریپتهایی که در همه سیستمها کار کنند انتخاب خوبی است.
۹. جمعبندی
- شلها برنامههایی هستند که بین کاربر و هسته سیستم قرار میگیرند و دستورات را اجرا میکنند.
- Bash، Zsh و Fish سه شل مدرن و پرکاربرد در لینوکس هستند.
- هر کدام مزایا و محدودیتهای خود را دارند و میتوانند بر اساس نیاز تغییر داده شوند.
- میتوان شل پیشفرض را با دستور
chsh
تغییر داد. - انتخاب شل بیشتر به سبک کاری، نیاز و سلیقه شخصی بستگی دارد.