چرا هنوز هم باید CLI بلد باشیم؟ | بخش 2-1 کتاب bash2003

فصل اول [ قسمت دو از پنج ] (قسمت قبل)

توی پست قبلی، از بش، ترمینال و شل گفتم و یه داستان براتون تعریف کردم. توی اون داستان، در نهایت به جایی رسیدیم که فهمیدیم Bash در واقع یک شل متنی هست.

و حالا، با پیشرفت تکنولوژی و فراگیر شدن کامپیوتر های شخصی و لپتاپ ها ما معمولاً از شبیه‌سازهای ترمینال استفاده می‌کنیم تا به این شل‌های متنی مثل Bash دسترسی داشته باشیم.

اما اینجاست که یه سؤال مهم پیش میاد:
چرا باید از شل‌های متنی استفاده کنیم؟
اون هم وقتی کلی محیط گرافیکی خوشگل با دکمه و ماوس داریم که خیلی راحت‌تر به نظر می‌رسن؟ واقعاً چرا؟

یادتون میاد دیگه؟ محیط های گرافیکی و دسکتاپ ها هم یک نوع شل به حساب میان!


نکته فنی :
ببینید در حقیقت ما شل گرافیکی داریم مثل GNOME Shell خب؟ ولی منظورم از این که میگم دسکتاپ ها یه نوع شل گرافیکی محسوب میشن اینه که ما تا الان به شل به عنوان یه رابط بین ما یعنی انسان و سیستم عامل نگاه میکنیم و خب دسکتاپ ها هم همینن و حتی محیط های GUI هم همینن اما. توی قسمت بعدی که ساختار سیستم های Unix-Like رو به تصویر میکشیم و از یونیکس و لینوکس میگیم کم کم محتوا فنی تر میشه. و بهتون میگم که منظورمون کلا از shell همون بحث کلاسیکه که میگه shell چیزی هست که در CLI اجرا میشه و صرفا منظور از شل همون شل های متنی مثل Bash و Zsh و Ash و ایناست. پس تا اینجا موضوع اشتباه نیست صرفا زاویه دیدمون متفاوته و خب این خوبه برای شروع نگرانش نباشید.


CLI چیست؟

CLI یا Command Line Interface یعنی رابط کاربری‌ای که شما با نوشتن دستور، با سیستم‌عامل یا برنامه‌ها ارتباط برقرار می‌کنید.

بذار یه مثال بزنم:

وقتی کامپیوترت رو روشن می‌کنی، یه عالمه آیکون، رنگ، پنجره و دکمه می‌بینی.
می‌تونی با ماوس کلیک کنی، برنامه اجرا کنی، فایل جابه‌جا کنی و...
به این محیط می‌گیم: GUI یا (رابط گرافیکی).

اما CLI یه محیط متنیه.
اینجا خبری از آیکون و دکمه نیست.
باید دستور تایپ کنی و خروجی رو هم به صورت متن ببینی.
این همون فضاییه که شل‌هایی مثل Bash توش اجرا می‌شن.


خیلی‌ها CLI رو با «ترمینال» اشتباه می‌گیرن!

بذارید اینجا یه بار برای همیشه این سه‌ تا مفهوم رو از هم تفکیک کنیم تا ذهنتون مرتب شه:

شل (Shell)
برنامه‌ایه که بین ما و سیستم‌عامل قرار می‌گیره.
دستوراتی که می‌نویسیم رو می‌خونه، تفسیر می‌کنه، و به سیستم‌عامل می‌گه اجراشون کنه.
مثلاً Bash، Zsh، Ash و...

CLI یا رابط مبتنی بر خط فرمان

محیطیه که شل توش اجرا می‌شه.
یه محیط متنی تعاملی هست که ما توش دستور می‌نویسیم و خروجی می‌گیریم.
می‌تونه یه محیط واقعی باشه (مثلاً tty در لینوکس)، یا شبیه‌سازی‌شده باشه.

اوه این همهه tty تو سیستم من چیکار میکنه؟ به زودی میفهمیم!
اوه این همهه tty تو سیستم من چیکار میکنه؟ به زودی میفهمیم!

شبیه‌ساز ترمینال (Terminal Emulator)

نرم‌افزاریه که CLI رو برای ما قابل‌دسترس می‌کنه.
مثلا تو لینوکس ما Xterm یا konsole یا gnome-terminal و ... رو داریم که این برنامه‌ها:

  • برامون یک CLI بالا میارن.

  • توی اون CLI، یه شل (مثلاً Bash) اجرا می‌شه.

  • ما دستور تایپ می‌کنیم.

  • ترمینال اون دستورها رو به شل منتقل می‌کنه.

  • شل، اونا رو پردازش و اجرا می‌کنه.

  • خروجی رو هم ترمینال بهمون نشون می‌ده.

ما یه پنجره داریم (ترمینال) که داره فضای یه اتاق (CLI) رو نشون میده که یه مغز توش نشسته (Shell) و آمادست تا ما یه چیزی رو روی پنجره بنویسیم مثلا بنویسیم سبزش کن! و اونم اجراش کنه و ما خروجی رو از طریق پنجره ببینیم.
ما یه پنجره داریم (ترمینال) که داره فضای یه اتاق (CLI) رو نشون میده که یه مغز توش نشسته (Shell) و آمادست تا ما یه چیزی رو روی پنجره بنویسیم مثلا بنویسیم سبزش کن! و اونم اجراش کنه و ما خروجی رو از طریق پنجره ببینیم.

امیدوارم با دیدن تصویر بالا تونسته باشید درک کنید چی به چیه!


حالا که میدونیم CLI چیه بریم ببینیم چرا باید ازش استفاده کنیم چه مزیت هایی داره و به نسبت GUI چی به ما ارائه میده.


خب خیلی چیزا هست که در موردشون براتون بگم ولی خیلی هاشون در این سطح از کتاب اصولا گفتنشون به هیچ دردی نمیخوره. پس خیلی سریع فقط به یه سری موارد اشاره میکنم اما در آینده کم کم میتونیم کاربرد های خفن رو در باب مطالب فنی تر و ریز تر بررسی کنیم.


چرا باید از CLI و شل های متنی استفاده کنیم؟

  1. خب اولین چیزی که به عنوان یه تازه کار باید بهش توجه کنید اینه که یادگیری CLI کمک میکنه سیستم عاملتون رو بهتر بشناسید و در نهایت به یادگیری مفاهیم پایه ای سیستم عامل کمک میکنه!

    اما این یادگیری صرفا در حد یادگیری مفاهیم و مباحث تئوری نیست. بلکه از اونجایی که میتونید با این محیط کار کنید و دستورات رو تایپ کنید و خروجی بگیرید این قضیه برای شما پرکتیکال تر و عملی تر میشه به طوری که میتونم ادعا کنم که اگر کار با CLI رو بلد بشید میتونید سیستم عامل رو تجربه کنید!

  2. ممکن کردن غیر ممکن ها، دومین مزیت CLI اینه که شما میتونید به وسیله ابزار هایی که دارید و صرفا به وسیله تایپ کردن به انعطاف و قدرت عجیب غریبی دست پیدا کنید به طوری که میتونید خروجی برنامه های مختلف رو به عنوان ورودی به برنامه های دیگه بدید و یه زنجیره عجیب غریب بسازید و به نوعی این امکان رو داشته باشید که از توانایی برنامه ها به صورت همزمان و به هم زنجیر شده استفاده کنید. کاری که در GUI عملا غیر ممکن یا بی اندازه سخته!

  3. میتونید روی هر سیستمی کار کنید، ممکنه در یک پروژه ای نیاز باشه که یک سیستم عامل رو روی یک چیپ کوچک با منابع محدود بیارید بالا و روش برنامه نویسی کنید خب شما نمیتونید اینجا یک محیط گرافیکی بیارید بالا و روش VSCODE نصب کنید. چون این کار عملا نشدنیه. پس مجبورید که از محیط CLI استفاده کنید و به جای VSCODE مثلا vim یا vi یا nano استفاده کنید . (نگران نباشید کم کم با اینا آشنا میشید) از طرفی ممکنه که شما در سیستم عامل mac با یک نرم افزاری کار کنید و بعد برید توی یه شرکتی و اونجا مجبور باشید با ویندوز کار کنید خب اصولا براتون سخت خواهد بود اما خبر خوب اینه که اگر به استفاده از CLI عادت کرده باشید شما میتونید تقریبا همه جا و با هر سیستم عاملی کار کنید چه mac باشه چه ویندوز و چه لینوکس و ...

  4. و دلایل دیگه، ببینید شما میتونید خیلی راحت به یه سرور به حالت ریموت دسترسی پیدا کنید، خیلی راحت کارای تکراریتون رو اتوماتیک کنید، به راحتی در سطح سیستم عامل کد بزنید و از ابزار هایی مثل make و ... برای بیلد کردن هر چه بهتر نرم افزار هاتون استفاده کنید از پشت صحنه و لاگ های برنامه ها خبر داشته باشید به راحتی پکیج ها و برنامه های مختلف رو نصب کنید، از داکر و دیگر کانتینر ها خیلی راحت استفاده کنید چون به هر حال نیاز دارید که از CLI استفاده کنید، با گیت کار کنید و کلی چیز دیگه... که گفتنشون همونطور که گفتم در این سطح صرفا زیاده گویی هست ولی فقط اینو بدونید که شما هر چقدر در دنیای کامپیوتر و برنامه نویسی حرفه ای تر بشید نیاز بیشتری به CLI میکنید میخواید با سرورها کار کنید؟ بهش نیاز دارید با فضاهای ابری؟ باز همینطور و ...

    خلاصه اگر میخواید کنترل بیشتری روی کامپیوترتون داشته باشید بهتره که کار در محیط CLI و با شل رو یاد بگیرید.


خلاصه ماجرا

توی این پست از CLI گفتم براتون این که چی هست و چه کاربرد هایی داره، فرق بین ترمینال و CLI رو گفتم که باعث شد که از ترمینال درک بهتری داشته باشیم و به واسطه این دو بش و شل رو هم بهتر درک کنیم.

تمرین

چیز خاصی نیست، حالا که تا اینجا اومدید این ۴ مفهوم رو تعریف کنید :

شل :
ترمینال :
CLI :
بش :

جوابتون رو توی کامنتا بنویسید.
(پاسخشون فردا ساعت ۱۵:۰۰) در کامنتا گذاشته میشه.


سخن پایانی

از پست بعد کم کم وارد آموزشمون میشیم . امیدوارم که تونسته باشم مفهوم CLI و فرقش با ترمینال رو خوب براتون جا انداخته باشم.

پست بعدی و ساعت ۱۳:۰۰ فردا