اگر با لینوکس، سرور یا برنامه نویسی کار کرده باشید، احتمالاً نام Shell یا شلرا شنیده اید. اما Shell دقیقاً چیست و چه تفاوتی با Terminal دارد؟
Shell یک مفسر خط فرمان است که دستورات کاربر را دریافت، تفسیر و اجرا می کند. به کمک Shell می توان فایل ها و پوشه ها را مدیریت کرد، برنامه ها را اجرا کرد، وضعیت سرور را بررسی کرد، دسترسی کاربران را تغییر داد و بسیاری از کارهای تکراری را به صورت خودکار انجام داد.
Shell در سیستم های Linux و Unix اهمیت زیادی دارد و یکی از ابزارهای اصلی مدیران سرور، توسعه دهندگان و متخصصان DevOps محسوب می شود.
در این مقاله با مفهوم Shell، تفاوت آن با Terminal، انواع Shell در لینوکس، Bash، Shell Scripting و کاربرد شل در مدیریت سرور آشنا می شویم.
Shell یک Command-Line Interpreter یا مفسر خط فرمان است که بین کاربر و سیستم عامل قرار می گیرد.
وقتی دستوری مانند زیر را در لینوکس وارد می کنید:
ls -l
Shell دستور را دریافت و تفسیر می کند و سپس برنامه موردنظر را اجرا می کند. نتیجه نیز از طریق Terminal به کاربر نمایش داده می شود.

به زبان ساده می توان مسیر ارتباط را این گونه در نظر گرفت:
کاربر → Terminal → Shell → برنامه ها و Kernel → سخت افزار
البته همه دستورات مستقیماً به Kernel ارسال نمی شوند؛ Shell می تواند برنامه های مختلف را اجرا کند و این برنامه ها در صورت نیاز از طریق System Call با Kernel ارتباط برقرار می کنند.
مهم ترین وظایف Shell عبارت اند از:
به همین دلیل Shell فقط یک محیط برای تایپ کردن چند دستور ساده نیست و می تواند به ابزاری قدرتمند برای مدیریت سیستم تبدیل شود.
یکی از رایج ترین اشتباهات افراد تازه کار این است که Shell و Terminal را یک چیز در نظر می گیرند؛ در حالی که این دو مفهوم متفاوت هستند.
Terminal یک برنامه یا محیط متنی است که به کاربر اجازه می دهد دستورات را وارد کرده و خروجی آن ها را مشاهده کند.

برای مثال در Ubuntu می توانید برنامه Terminal را باز کنید و دستور موردنظر خود را وارد کنید.
اما Terminal به تنهایی مسئول تفسیر دستورات نیست.
Shell برنامه ای است که دستور واردشده را دریافت و تفسیر می کند.
برای مثال ممکن است در یک Terminal از Bash استفاده کنید. در این حالت:
بنابراین به صورت خلاصه:
Terminal محیط ارتباط متنی با سیستم است؛ Shell مفسر دستورات داخل این محیط است.
این تفاوت هنگام مدیریت سرور اهمیت بیشتری پیدا می کند. برای مثال هنگام اتصال به یک سرور لینوکس از طریق SSH، معمولاً وارد یک محیط Shell می شوید و بسیاری از عملیات مدیریتی را از طریق خط فرمان انجام می دهید.
برای درک بهتر Shell باید با مفهوم Kernel یا هسته سیستم عامل نیز آشنا شویم.
Kernel بخش مرکزی سیستم عامل است و وظایفی مانند موارد زیر را بر عهده دارد:
Shell در واقع واسط میان کاربر و سیستم است.
برای مثال وقتی دستور زیر را اجرا می کنید:
ls
Shell دستور را تفسیر کرده و برنامه ls را اجرا می کند. این برنامه برای دریافت اطلاعات فایل ها و دایرکتوری ها از امکانات سیستم عامل استفاده می کند و نتیجه را در Terminal نمایش می دهد.
Linux و سیستم های Unix-like از Shellهای مختلفی پشتیبانی می کنند. این Shellها وظیفه اصلی مشابهی دارند اما Syntax، قابلیت ها و امکانات داخلی آن ها می تواند متفاوت باشد.
مهم ترین Shellهای لینوکس عبارت اند از:

Bash مخفف Bourne Again Shell است و یکی از شناخته شده ترین Shellها در محیط Linux و Unix-like محسوب می شود.
Bash امکانات مختلفی برای اجرای دستورات، مدیریت فایل ها، تعریف متغیر، شرط ها، حلقه ها، توابع و اجرای Scriptها در اختیار کاربر قرار می دهد.
برای مشاهده Shell فعلی می توانید از دستور زیر استفاده کنید:
echo $SHELL
در بسیاری از سیستم های لینوکسی Bash یکی از گزینه های اصلی برای اجرای دستورات و Shell Scriptها است.
Zsh یا Z Shell یکی دیگر از Shellهای محبوب در سیستم های Unix-like است.
Zsh قابلیت هایی مانند:
را ارائه می دهد.
sh یکی از نام های شناخته شده در خانواده Shellهای Unix است و از نظر تاریخی با Bourne Shell ارتباط دارد.
بسیاری از Scriptهایی که با هدف سازگاری بیشتر بین سیستم های مختلف Unix و Linux نوشته می شوند، از Syntax سازگار با sh استفاده می کنند.

Korn Shell یا Ksh یکی دیگر از Shellهای قدیمی Unix است که امکانات مناسبی برای اجرای دستورات و Shell Scripting ارائه می کند.
Ksh همچنین در شکل گیری استانداردهای مرتبط با POSIX Shell نقش داشته است.
Fish یا Friendly Interactive Shell با تمرکز بر تجربه کاربری ساده تر طراحی شده است.
از ویژگی های آن می توان به پیشنهاد خودکار دستورات و قابلیت های تعاملی مناسب اشاره کرد.
فرض کنید هر روز باید چندین کار تکراری روی سیستم انجام دهید:
اجرای دستی این دستورات هم زمان بر است و هم می تواند باعث خطای انسانی شود.
در این شرایط می توان دستورات را در یک فایل قرار داد و آن فایل را به عنوان یک Shell Script اجرا کرد.
Shell Script در ساده ترین تعریف، یک فایل متنی شامل مجموعه ای از دستورات است که توسط Shell اجرا می شوند.
برای مثال:
#!/bin/bash
echo “Current Directory:”
pwd
echo “Files:”
ls -l
این Script ابتدا مسیر فعلی را نمایش داده و سپس فایل ها و پوشه های موجود در آن را فهرست می کند.
در بسیاری از Shell Scriptها، خط اول به شکل زیر نوشته می شود:
#!/bin/bash
به این خط Shebang گفته می شود.
Shebang مشخص می کند که Script باید با چه Interpreterای اجرا شود.
برای مثال:
#!/bin/bash
یعنی Script با Bash اجرا شود.
یا:
#!/bin/sh
برای اجرای Script با sh استفاده می شود.
فرض کنید فایلی به نام backup.sh ساخته اید.
ابتدا می توانید مجوز اجرای آن را فعال کنید:
chmod +x backup.sh
سپس Script را اجرا کنید:
./backup.sh
یا مستقیماً آن را با Bash اجرا کنید:
bash backup.sh
Shell Script از متغیرها نیز پشتیبانی می کند.
برای مثال:
NAME=”Linux”
و برای استفاده از مقدار آن:
echo $NAME
خروجی:
Linux
متغیرها برای ذخیره مسیر فایل ها، نام کاربران، تنظیمات و نتایج دستورات کاربرد زیادی دارند.
با استفاده از ساختارهای شرطی می توان رفتار Script را بر اساس شرایط مختلف تغییر داد.
برای مثال:
#!/bin/bash
if -f “/var/log/syslog” ; then
echo “File exists”
else
echo “File does not exist”
fi
در این مثال بررسی می شود که آیا فایل مشخص شده وجود دارد یا خیر.
Shell Script از حلقه هایی مانند for، while و until پشتیبانی می کند.
برای مثال:
#!/bin/bash
for file in *.txt
do
echo “$file”
done
این Script فایل های دارای پسوند .txt را در مسیر فعلی پیدا کرده و نام آن ها را نمایش می دهد.
یکی از قابلیت های بسیار مهم Shell، Pipe است.
Pipe با علامت | مشخص می شود و امکان انتقال خروجی یک دستور به ورودی دستور دیگر را فراهم می کند.
برای مثال:
ls -l | grep “.txt”
در اینجا خروجی ls -l به grep منتقل می شود تا موارد مرتبط با .txt فیلتر شوند.
این قابلیت باعث می شود بتوان چندین ابزار ساده را در کنار یکدیگر قرار داد و عملیات پیچیده تری انجام داد.
Shell امکان تغییر مسیر ورودی و خروجی دستورات را نیز فراهم می کند.
برای مثال:
ls -l > files.txt
خروجی دستور ls -l را داخل فایل files.txt ذخیره می کند.
همچنین با استفاده از >> می توان اطلاعات جدیدی را به انتهای فایل اضافه کرد:
echo “New log” >> files.txt
Redirection در ایجاد Log، گزارش گیری و خودکارسازی عملیات مختلف کاربرد زیادی دارد.
Shell در بسیاری از فعالیت های مرتبط با Linux کاربرد دارد.
ایجاد، حذف، کپی، جابه جایی و تغییر نام فایل ها از طریق Shell امکان پذیر است.
برای مثال:
mkdir backup
cp website.zip backup/
مدیران سیستم می توانند بسیاری از عملیات مربوط به سرور را از طریق Shell انجام دهند؛ از مدیریت سرویس ها و کاربران گرفته تا بررسی فایل های Log و منابع سیستم.
این موضوع در هاست لینوکس اهمیت زیادی دارد، زیرا بخش مهمی از زیرساخت های میزبانی وب بر پایه Linux اجرا می شوند.
اگر برای سایت خود به یک محیط میزبانی مبتنی بر Linux نیاز دارید،
هاست لینوکس راستچین کلود با منابع متنوع، SSL رایگان،
مانیتورینگ و آپتایم 99.99٪ ارائه میشود.
یکی از کاربردهای مهم Shell Script، خودکارسازی فرآیند Backup است.
برای مثال می توان Scriptی ایجاد کرد که در یک زمان مشخص:
با ترکیب Shell Script و ابزارهایی مانند cron می توان چنین فرآیندهایی را به صورت زمان بندی شده اجرا کرد.
Shell برای بررسی منابع سیستم نیز کاربرد دارد.
برای مشاهده فضای دیسک:
df -h
برای مشاهده وضعیت حافظه:
free -h
و برای مشاهده فرآیندهای در حال اجرا:
ps aux
می توان از این دستورات استفاده کرد.
در محیط های حرفه ای حتی می توان Scriptهایی نوشت که وضعیت منابع را بررسی کرده و در صورت عبور مصرف از یک حد مشخص، هشدار ایجاد کنند.
یکی دیگر از کاربردهای Shell، اجرای خودکار دستورات در زمان مشخص است.
در Linux ابزار Cron برای زمان بندی وظایف استفاده می شود.
برای مثال می توان یک Shell Script مربوط به Backup را طوری تنظیم کرد که هر شب به صورت خودکار اجرا شود.
اگر می خواهید درباره زمان بندی وظایف در محیط میزبانی بیشتر بدانید، مقاله آموزش ایجاد Cron Job در سی پنل نیز می تواند مکمل این بخش باشد.
کاربرد Shell در VPS حتی پررنگ تر است. در یک سرور مجازی لینوکس معمولاً از طریق SSH به سرور متصل می شوید و بسیاری از عملیات مدیریتی را از طریق Shell انجام می دهید.
برای مثال:
cd
ls
mkdir
cp
mv
rm
chmod
chown
systemctl
journalctl
از جمله دستورات و ابزارهایی هستند که می توانند برای مدیریت فایل ها، دسترسی ها، سرویس ها و Logهای سیستم مورد استفاده قرار گیرند.
اگر می خواهید بیشتر با این موضوع آشنا شوید، راهنمای راه اندازی و اتصال به سرور مجازی لینوکس راست چین کلود می تواند ادامه مناسبی برای این مقاله باشد.
اگر هاست اشتراکی پاسخگوی نیاز پروژه شما نیست و می خواهید به سیستم عامل، منابع و تنظیمات سرور کنترل بیشتری داشته باشید، یک سرور مجازی لینوکس می تواند انتخاب مناسبی باشد.
مشاهده سرورهای مجازی راستچین کلود ←
اگر سایت یا اپلیکیشن شما روی یک سرور لینوکسی اجرا شود، Shell یکی از ابزارهای اصلی مدیریت آن خواهد بود.
برای مثال هنگام اتصال به سرور از طریق SSH می توانید:
برای آشنایی با یکی از روش های اتصال به سرور لینوکس می توانید مقاله آموزش اتصال به سرور لینوکس با PuTTY را نیز مطالعه کنید.
خیر. Shell را می توان روی کامپیوتر شخصی دارای Linux، macOS و بسیاری از سیستم های Unix-like نیز استفاده کرد.
با این حال، اهمیت Shell در محیط Server بیشتر احساس می شود؛ زیرا بسیاری از سرورهای Linux بدون محیط گرافیکی اجرا می شوند و مدیریت آن ها از طریق SSH و خط فرمان انجام می شود.
به همین دلیل افرادی که در زمینه های زیر فعالیت می کنند معمولاً باید با Shell آشنایی داشته باشند:
Shell Scripting به دلایل مختلفی در Linux و Unix محبوب است.
وظایفی که مرتباً تکرار می شوند را می توان در قالب Script قرار داد.
وقتی فرآیند یک بار نوشته و تست شود، اجرای مجدد آن طبق همان مراحل انجام می شود.
به جای اجرای دستی ده ها دستور، می توان همه آن ها را در یک Script قرار داد.
برای بسیاری از عملیات ساده مدیریتی نیازی به استفاده از یک زبان برنامه نویسی سنگین نیست.
Shell می تواند دستورات و ابزارهای مختلف سیستم را با یکدیگر ترکیب کند.
Shell دارای ویژگی هایی مانند:
است و می توان با آن برنامه هایی در قالب Script نوشت. اما Shell معمولاً برای ساخت نرم افزارهای بزرگ و پیچیده جایگزین زبان هایی مانند Python، Java یا C++ نمی شود. Shell بیشتر برای مدیریت سیستم، اتوماسیون، Deployment، پردازش فایل ها و عملیات DevOps کاربرد دارد.
Shell Script یک اصطلاح کلی است و به Scriptهایی گفته می شود که توسط یک Shell اجرا می شوند.
اما Bash Script مشخصاً برای Bash نوشته شده است.
برای مثال:
#!/bin/bash
نشان می دهد که Script برای اجرا با Bash طراحی شده است.
اگر Script از قابلیت های اختصاصی Bash استفاده کند، ممکن است اجرای آن با Shellهای دیگر امکان پذیر نباشد.
Shell بخش مهمی از تاریخ Unix و سیستم های Unix-like است و Linux نیز بسیاری از ابزارهای خط فرمان خود را از همین سنت به ارث برده است.
دستوراتی مانند:
ls
cd
cp
mv
rm
grep
cat
find
از جمله ابزارهای رایج محیط های Linux و Unix-like هستند. البته ممکن است رفتار یا امکانات برخی ابزارها در توزیع ها و سیستم های مختلف متفاوت باشد.
اگر به تازگی یادگیری Shell را شروع کرده اید، آشنایی با دستورات زیر نقطه شروع خوبی است:
| دستور | کاربرد |
| pwd | نمایش مسیر فعلی |
| ls | نمایش فایل ها و پوشه ها |
| cd | تغییر مسیر |
| mkdir | ایجاد پوشه |
| touch | ایجاد فایل |
| cp | کپی فایل یا پوشه |
| mv | جابه جایی یا تغییر نام |
| rm | حذف فایل یا پوشه |
| cat | نمایش محتوای فایل |
| grep | جست وجو در متن |
| find | پیدا کردن فایل ها |
| chmod | تغییر Permission |
| chown | تغییر مالک فایل |
| ps | نمایش Processها |
| df | نمایش فضای دیسک |
| free | نمایش وضعیت RAM |
خیر. بسیاری از توزیع های Linux دارای محیط گرافیکی هستند و می توان بخش زیادی از کارهای روزمره را بدون استفاده مستقیم از Shell انجام داد.
اما اگر قصد دارید با سرور لینوکس، VPS، Docker، DevOps یا مدیریت سیستم کار کنید، یادگیری Shell یک مهارت بسیار کاربردی است.
به خصوص در سرورهایی که محیط گرافیکی ندارند، خط فرمان مهم ترین روش تعامل با سیستم محسوب می شود.
یادگیری Shell برای همه کاربران Linux اجباری نیست، اما برای گروه های زیر اهمیت بیشتری دارد:
برای مدیریت سرویس ها، فایل ها، کاربران، Permissionها و منابع سیستم.
برای اجرای ابزارهای توسعه، مدیریت پروژه ها و خودکارسازی فرآیندهای مختلف.
برای Deployment، مدیریت Infrastructure، اجرای Scriptها و کار با ابزارهای CI/CD.

برای مدیریت مستقیم سرور، بررسی منابع، نصب نرم افزار و عیب یابی.
برای انجام سریع تر و دقیق تر کارهایی که در محیط گرافیکی زمان بیشتری نیاز دارند.
مطالعه بیشتر:
Shell یک مفسر خط فرمان است که دستورات کاربر را دریافت و تفسیر کرده و برنامه ها یا دستورات موردنظر را اجرا می کند.
Terminal محیطی برای ورود و مشاهده دستورات است، در حالی که Shell برنامه ای است که این دستورات را تفسیر و اجرا می کند.
Bash مخفف Bourne Again Shell و یکی از رایج ترین Shellهای مورد استفاده در سیستم های Linux و Unix-like است.
Shell Script یک فایل متنی شامل مجموعه ای از دستورات است که توسط Shell اجرا می شود و می تواند برای خودکارسازی کارهای مختلف مورد استفاده قرار گیرد.
برای مدیریت حرفه ای VPS لینوکس، آشنایی با Shell بسیار کاربردی است؛ زیرا بسیاری از عملیات مدیریت سرور از طریق SSH و خط فرمان انجام می شوند.
کاربر هاست لینوکس الزاماً نیازی به دانش عمیق Shell ندارد. بسیاری از وظایف را می توان از طریق کنترل پنل انجام داد؛ اما آشنایی با دستورات Linux و Shell برای کاربران فنی و توسعه دهندگان مفید است.