آشنایی با Bash: ابزاری اساسی برای توسعه دهندگان و مدیران سیستم
چه یک توسعه دهنده نوپا یا یک مدیر سیستم با تجربه باشید، Bash جز ابزاری است که باید آن را بشناسید و از چگونگی عملکردش آگاهی داشته باشید. این ابزار کلید خودکارسازی تسکها، مدیریت سیستم و ساده سازی گردش کار شماست. Bash مخفف Bourne Again Shell یک مترجم خط فرمان (Command-Line interpreter) میباشد که هدفش تعامل با سیستم عامل است. این پوسته (Shell) راهی مستقیم و کارآمد برای تعامل با سیستمهای لینوکس و macOS فراهم میکند.
پوسته یا همان Shell به رابط دستوری بین کاربر و هسته سیستم عامل گفته میشود. به آن به عنوان واسطه بین کاربر و هسته رایانه فکر کنید. این لایه دستوراتی که شما تایپ میکنید را تفسیر و آنها را به اقداماتی تبدیل میکند که سیستم عامل بتواند درک کند.
CLI مخفف Command-Line Interface، به معنای تعامل با رایانه به وسیلهی دستورات مبتنی بر متن میباشد.
تاریخچه Bash
Bash مخفف Bourne again shell نام خود را از نسخه قدیمی خود sh یا همان Bourne Shell گرفته است. sh از اولین شلهای ساخته شده برای سیستم عامل UNIX بود. Bash به عنوان یک جایگزین رایگان و منبع باز برای sh ایجاد شد که ویژگیهای بهبود یافته و بیشتری ارائه میدهد. این شل در ابتدا توسط برایان فاکس به عنوان بخشی از پروژه گنو ساخته شد و پس از آن توسط توسعه دهنگان بهبود یافته است. Bash به عنوان شل پیشفرض در اکثر توزیعهای لینوکس و سیستم عامل macOS استفاده میشود. تاریخچه طولانی و توسعه مستمر، آن را به ابزاری قوی و همه کاره برای توسعه دهندگان و مدیران سیستم تبدیل کرده است.
برخی موارد استفاده از Bash
- توسعه دهندگان نرم افزار برای بسیاری از وظایف توسعه به این ابزار متکی هستند. Bash میتواند برای خودکار سازی وظایف توسعه نرم افزار مانند کامپایل کد، اشکال زدایی کد منبع و تست کردن استفاده شود.
- مهندسان شبکه میتوانند برای آزمایش، پیکربندی و بهینه سازی عملکرد شبکه از این ابزار استفاده کنند.
- محققان علوم کامپیوتر میتوانند برای مدیریت سیستمهای تحقیقاتی و انجام تحقیقات بر روی سیستمها از Bash استفاده کنند.
- علاقه مندان و کاربران روزمره با یادگیری این ابزار میتوانند از آن برای تعامل با سیستم خود، اجرای برنامهها و کارهای دیگر استفاده کنند.

Bash چگونه کار میکند؟
در نگاه اول این شل یک سیستم پاسخ و فرمان ساده به نظر میرسد. با این حال Bash در اسکریپت نویسی نیز استفاده میشود. این اسکریپتها میتوانند شامل برخی مفاهیم مورد استفاده در زبانهای برنامه نویسی مانند متغیرها، حلقهها و عبارات شرطی باشند. این ابزار به عنوان یک واسطه بین شما و هسته سیستم عامل عمل میکند. در ادامه نحوه عملکرد آن را توضیح میدهیم:
1. ورودی کاربر:
شما دستوری (مانند ls) را در ترمینال تایپ کرده و Enter را فشار میدهید.
2. تجزیه:
Bash دستوری که شما تایپ کردید را گرفته و به اجزای آن تجزیه میکند برای مثال دستور (ls -l /Home/user).
- دستور (Command): ls که دستوری است برای لیست کردن فایلها
- گزینهها (Options): l- که گزینهای است برای لیست کردن در فرمت طولانی
- آرگیومنتها (Arguments): Home/user/ میگوید که کدام دایرکتوری لیست شود.
3. گسترش (Expansion):
در دستور بالا ما هیچ Expansionای وارد نکردیم ولی اگر بخواهیم مثالی زده باشیم:
- Globbing: اگر از کاراکترهای Wildcard استفاده کنید، Bash لیست کردن فایل را برای مطابقت با فرمت txt گسترش میدهد.
- جایگزینی متغیر (Variable Substitution): اگر در دستور متغیری تعریف کرده باشیم به عنوان مثال (Home$)، این متغیرها با مقادیرشان جایگزین میشوند.
- جایگزینی میانبر برای دستورات طولانی (Alias Substitution): اگر در دستور میانبری برای دستورات طولانی تعریف کرده باشید Bash آن را با دستور کامل جایگزین میکند.
4. جستجوی فرمان:
Bash بررسی میکند که آیا دستوری که تایپ کردهاید:
- دستور داخلی (Built-In Command): برخی از دستورها مستقیما در خود Bash ساخته شدهاند (مثلا echo). اگر دستوری که تایپ کردهاید این گونه باشد این شل دستور را مستقیما اجرا میکند.
- دستور خارجی (External Command): اگر دستور نوشته شده داخلی نباشد، این ابزار Path سیستم (لیستی از دایرکتوریها) را برای یافتن فایل اجرایی با آن نام جستجو میکند.
5. اجرا:
Bash دستورات داخلی را مستقیما اجرا میکند. درحالی که برای دستورات خارجی فایل برنامه را پیدا کرده و آن را در فرایندی جداگانه با استفاده از هسته سیستم اجرا میکند.
6. خروجی:
دستوری که وارد کردیم خروجی را تولید میکند که در ترمینال قابل مشاهده میباشد.
Bash در سیستم عامل ویندوز
در مقدمه گفتیم که Bash در توزیعهای لینوکس و سیستم عامل macOS استفاده میشود. شاید برایتان این سوال پیش آمده باشد که آیا میشود از آن در سیستم عامل ویندوز استفاده کرد یا خیر که در ادامه به آن پاسخ میدهیم.
این شل برای استفاده در محیطهای UNIX-like طراحی شده و استفاده مستقیم از آن در ویندوز ممکن نیست. با این حال راههایی وجود دارد که از این ابزار محبوب در ویندوز نیز استفاده کنیم. برخی از این راهها عبارتند از:
- استفاده از زیرسیستم ویندوز برای لینوکس (WSL): استفاده از WSL بهترین و پیشنهادیترین گزینه است. این زیرسیستم به شما اجازه میدهد که مستقیما از توزیعهای مختلف لینوکس (مانند اوبونتو) بر روی ویندوز استفاده کنید. پس از نصب یک توزیع لینوکس از طریق WSL شما به Bash دسترسی خواهید داشت. WSL به خوبی با ویندوز ادغام شده و نزدیکترین تجربه به استفاده Bash به صورت بومی را ارائه میدهد.
- استفاده از Git Bash: وقتی که شما Git را بر روی سیستم خود نصب میکنید، شامل Git Bash میباشد. این شل برای کار با Git طراحی شده است. اگر برای کارهای مربوط به Git به Bash نیاز دارید این شل گزینه خوبی میباشد اما شامل تمام امکانات Bash در محیط لینوکس نیست.
- استفاده از Cygwin: مجموعهای از ابزارهای منبع باز است که به شما اجازه میدهد دستورها و ابزارهای لینوکس را در ویندوز اجرا کنید. با این حال راه اندازی آن مقداری پیچیدهتر از WSL است و در اجرای دستورها ممکن است کمی کندتر عمل کند.
10 دستور Bash که بیشترین استفاده را دارند
حالا که Bash را بیشتر شناختیم و کاربردهای آن را فهمیدیم بیایید با برخی از مهمترین و مورد استفادهترین دستورات این شل محبوب نیز آشنا شویم.
- ls: فایلها و دایرکتوریها را لیست میکند.
ls # List files in current directory
ls -l # Long listing (details)
ls -lh # Long listing, human-readable sizes
ls *.txt # List all .txt files
- cd: دایرکتوری مورد استفاده را به دایرکتوری مشخص شده تغییر میدهد. برای جابجایی در فایلها استفاده میشود.
cd /path/to/directory # Change to specified directory
cd .. # Go up one level
cd # Go to home directory
- pwd: دایرکتوری (مکان در فایل سیستم) فعلی شما را نشان میدهد.
pwd # Display current directory
- mkdir: دایرکتوری جدید ایجاد میکند.
mkdir new_directory # Create a directory
- rm: دایرکتوری و فایلها را حذف میکند (از آن با احتیاط استفاده کنید).
rm file.txt # Remove a file
rm -r directory # Remove a directory and its contents (recursive)
- cp: فایلها و دایرکتوریها را کپی میکند.
cp file1.txt file2.txt # Copy file1 to file2
cp -r dir1 dir2 # Copy directory dir1 to dir2 (recursive)
- mv: فایلها و دایرکتوریها را جابجا یا تغییر نام میدهد.
mv file.txt new_name.txt # Rename file.txt
mv file.txt /path/ # Move file.txt to /path/
- cat: محتوای فایل مورد نظر را نشان میدهد.
cat file.txt # Display the contents of file.txt
- less: این دستور مانند نسخه پیشرفته دستور cat میباشد. بیشتر برای صفحاتی با محتوای زیاد به کار میرود و تمام محتوای صفحه را در ترمینال نشان میدهد.
less large_file.txt # Open file in less (spacebar to scroll, q to quit)
- grep: الگوهای Regular Expression را در متن جستجو میکند.
grep "pattern" file.txt # Find lines containing "pattern"
grep -i "pattern" file.txt # Case-insensitive search
مقایسه بین Bash ،PowerShell و Cmd.exe
بالاتر گفتیم که لینوکس و macOS از Bash برای تعامل با سیستم استفاده میکنند. ویندوز نیز مانند این دو نیاز به تعامل با سیستم و اجرای دستورات دارد. در ویندوز دو شل اصلی وجود دارد، PowerShell و Cmd.exe. شل Cmd.exe شل قدیمی و سنتی ویندوز است که برای دستورات ساده و اسکریپتهای bat استفاده میشود. PowerShell کراس پلتفرم است و در باقی سیستم عاملها نیز قابل استفاده میباشد. در جدول پایین این سه را مقایسه میکنیم.
ویژگی | PowerShell | Bash | Cmd.exe |
---|---|---|---|
پلتفرمها | ویندوز، لینوکس، macOS (از نسخه 7 به بعد) | لینوکس، macOS، ویندوز (با استفاده از WSL) | ویندوز |
زبان برنامهنویسی | زبان شیءگرا و دستورالعملی | زبان دستوری و خطی | زبان دستوری (اسکریپتهای bat) |
دستورات | دستورات PowerShell با cmdlets (مثلا Get-Process) | دستورات Bash با دستورات استاندارد (مثلا ls, cd) | دستورات داخلی (مثلا dir, copy) و برنامههای اجرایی |
نوع ورودی و خروجی | ورودی و خروجی به صورت اشیاء (Objects) | ورودی و خروجی به صورت رشتههای متنی (Strings) | ورودی و خروجی به صورت رشتههای متنی (Strings) |
پشتیبانی از متغیرها | پشتیبانی از متغیرها با نوع دادهای خاص (مثلا $Variable) | پشتیبانی از متغیرها به صورت رشتهای (مثلا $Variable) | پشتیبانی از متغیرها به صورت رشتهای (مثلا %Variable%) |
پشتیبانی از Pipelineها | پشتیبانی از Pipelines برای انتقال اشیاء (Objects) | پشتیبانی از Pipelines برای انتقال رشتهها (Strings) | پشتیبانی محدود از Pipelines برای انتقال رشتهها (Strings) |
عملکرد با فایلها | فایلها به عنوان اشیاء (Objects) مدیریت میشوند. | فایلها به عنوان رشتهها (Strings) مدیریت میشوند. | فایلها به عنوان رشتهها (Strings) مدیریت میشوند. |
قابلیتهای جستجو و فیلتر | استفاده از فیلترها با Where-Object, Select-Object | استفاده از فیلترها با grep ،awk ،sed | جستجوی محدود با دستورات find و findstr |
توسعهپذیری | قابلیت اضافه کردن ماژولها و cmdletها | قابلیت اضافه کردن اسکریپتها و برنامهها | قابلیت اضافه کردن برنامههای اجرایی |
سازگاری با اسکریپتها | اسکریپتها با پسوند .ps1 ایجاد میشوند | اسکریپتها با پسوند .sh ایجاد میشوند | اسکریپتها با پسوند .bat یا .cmd ایجاد میشوند |
دستورات مدیریت سیستم | ابزارهای مدیریت سیستم قوی و یکپارچه برای ویندوز و لینوکس | ابزارهای مدیریت سیستم برای لینوکس و macOS معمولا محدودتر هستند | ابزارهای محدود برای مدیریت سیستم ویندوز |
سطح قدرت و مدرن بودن | بسیار قدرتمند و مدرن | قدرتمند و استاندارد | قدیمی و با قابلیتهای محدود |
نتیجه گیری
Bash یک ابزار قدرتمند و همه کاره میباشد که یادگرفتن آن برای توسعه دهندگان و مدیران سیستم و دارندگان لینوکس و macOS ضروری است. با اینکه در شروع ممکن است یادگیری آن پیچیده و ترسناک به نظر برسد، در ادامه پاداش آن ارزش تلاش کردن را دارد.
سوالات متداول
از Bash میتوانیم کجاها استفاده کنیم؟
این ابزار قابل استفاده در لینوکس، macOS میباشد. شما میتوانید از آن در ویندوز به واسطه زیرسیستم ویندوز برای لینوکس (WSL) استفاده کنید.
آیا Bash یک زبان برنامه نویسی حساب میشود؟
این شل ویژگیهای زیادی دارد که آن را شبیه زبانهای برنامه نویسی میکند. به جای یک زبان برنامه نویسی کامل، دقیقتر است که از آن به عنوان یک زبان برنامه نویسی شل یا یک مفسر خط فرمان با ویژگیهای زبانهای برنامه نویسی یاد کنیم.
آیا یادگیری Bash سخت است؟
شروع یادگیری این ابزار اگر پیش زمینهای در زبانهای برنامه نویسی یا استفاده از شلها نداشته باشید میتواند کمی چالش برانگیز باشد. با این حال با گذر زمان و تمرین یادگیری آن سادهتر میشود.
منابع
- https://www.techtarget.com/searchdatacenter/definition/bash-Bourne-Again-Shell
- https://www.geeksforgeeks.org/bash-scripting-introduction-to-bash-and-bash-scripting
- https://www.educative.io/blog/bash-shell-command-cheat-sheet
به این مقاله امتیاز دهید!
میانگین امتیاز 0 / 5. تعداد رأی ها : 0
هنوز هیچ رأیی داده نشده. اولین نفر باشید!
اولین دیدگاه را اضافه کنید.