بخش ۴ – تفاوت Shell و Terminal
مقدمه
در لینوکس (و حتی ویندوز و macOS)، وقتی با خط فرمان کار میکنیم، دو اصطلاح زیاد شنیده میشه:
- Terminal (ترمینال)
- Shell (شل)
شاید قبلاً برایت پیش آمده باشه که بگی «ترمینال رو باز کن» یا «شل رو باز کن» و فکر کنی اینها دقیقاً یکی هستن. ولی نه 👌
یکی مثل پنجره است، دیگری مثل مغز پردازشکننده دستورها.
۱. تعریف Terminal
Terminal چیست؟
ترمینال در اصل یک سختافزار قدیمی بود که قبل از اختراع مانیتورهای مدرن استفاده میشد:
- یک صفحه نمایش (متنی) + کیبورد
- به یک کامپیوتر اصلی (Mainframe) وصل میشد
- فقط برای ورودی دستور و خروجی متن
امروزه در دنیای لینوکس و ویندوز منظور از Terminal نرمافزاری است که محیط ورودی/خروجی خط فرمان را برای کاربر فراهم میکند.
📌 مثال در لینوکس:
- GNOME Terminal
- Konsole (در KDE)
- Xfce Terminal
- Tilix
- Alacritty
📌 مثال در ویندوز:
- Command Prompt (CMD)
- Windows Terminal
- PowerShell Terminal
۲. تعریف Shell
Shell چیست؟
شل یک برنامه نرمافزاری است که دستورهای شما را میگیرد، پردازش میکند و به سیستمعامل میگوید چه کاری انجام دهد.
اسم “شل” یعنی «پوسته»؛ چون بین تو (کاربر) و هسته (Kernel) قرار میگیرد.
📌 وظایف Shell:
- خواندن ورودی شما (دستورات)
- تفسیر آن
- اجرای دستور و دریافت خروجی از هسته لینوکس
- نمایش نتیجه به شما
💡 هسته به تنهایی از شما چیزی نمیفهمد. شما نمیتوانید مستقیم به Kernel دستور متنی بدهید. Shell نقش مترجم را دارد.
۳. رابطه Terminal و Shell (تشبیه ساده)
فرض کن:
- ترمینال = تلفن یا میکروفون و بلندگو (وسیلهای برای صحبت کردن)
- شل = مترجم پشت خط تلفن که زبان تو رو به زبان مخاطب تبدیل میکنه
تو فرمان را در ترمینال وارد میکنی → ترمینال آن را میفرستد به شل → شل آن را برای Kernel ترجمه و اجرا میکند → خروجی را برمیگرداند به ترمینال.
۴. انواع Shell در لینوکس
چند نمونه معروف:
- Bash → پیشفرض بیشتر توزیعها
- Zsh → سریعتر و قابل سفارشیسازی زیاد
- Fish → رابط کاربرپسند، پیشنهاد دستورات
- Sh → شل قدیمی و سبک
- Ksh → برای اسکریپتنویسی سنگین
۵. تفاوت Shell و Terminal در عمل
📌 مثال ۱:
- وقتی GNOME Terminal را باز میکنی، در واقع یک برنامه شبیه پنجره چت باز کردی که داخلش Bash (به عنوان Shell) فعال است.
📌 مثال ۲:
میتوانی همان شل را بدون ترمینال گرافیکی در حالت TTY (ترمینال متنی مستقیم) باز کنی، مثلاً:
Ctrl + Alt + F3
در این حالت به یک محیط متنی میروی که فقط شل در آن اجرا میشود.
۶. چطور بفهمیم الان از چه Shell استفاده میکنیم؟
در لینوکس دستور زیر را اجرا کن:
echo $SHELL
مثلاً خروجی:
/bin/bash
📌 یعنی الان در Bash هستی.
۷. تغییر Shell پیشفرض
مثلاً برای تغییر به Zsh:
sudo apt install zsh # نصب Zsh
chsh -s /bin/zsh # تغییر شل پیشفرض
بعد باید Logout و Login کنی.
۸. نکات مهم
- تو میتوانی یک ترمینال باز کنی و داخل آن هر شل دلخواه را اجرا کنی.
- حتی میتوانی در یک سیستم چندین شل مختلف نصب کنی.
- ترمینال مثل قاب عکس است، تصویر داخل قاب همان شل است.
۹. تمرین عملی
- ترمینال را باز کن (در Ubuntu با
Ctrl+Alt+T
). - دستور زیر را بزن و نوع شل را ببین:
echo $SHELL
- یک شل جدید داخل همین ترمینال اجرا کن:
bash # اجرای مجدد Bash
zsh # اگر نصب کردی
- برای خروج از شل اضافه:
exit
۱۰. جمعبندی
- ترمینال → ابزار نمایش ورودی/خروجی خط فرمان (پنجره یا کانال ارتباطی).
- شل → برنامهای که دستورات را تفسیر و اجرا میکند.
- هر ترمینال میتواند چندین شل مختلف را اجرا کند.
- Bash رایجترین شل در لینوکس است، ولی Zsh و Fish محبوبیت رو به رشدی دارند.