دوره آموزش خط فرمان لینوکس

لینوکس پروژه‌ای است که در قلب دنیای Open Source قرار دارد و حتماً در مورد تاریخچه‌ی پیدایش و توسعه‌ی آن چیزهایی شنیده‌اید. چکیده‌ی این تاریخچه از این قرار است:

سال ۱۹۶۴ پروپوزال یک پروژه‌ی عظیم با نام Multics در دانشگاه MIT ارائه شد و یک سال بعد، این دانشگاه با همکاری دپارتمان کامپیوتر اَبَرشرکت General Electric و آزمایشگاه‌های بل (Bell Laboratories) شروع به پیاده‌سازی این پروژه کردند. Multics اختصاری است برای Multiplexed Information and Computing Service و قرار بود مهمترین خروجی آن یک سیستم‌عامل چندکاربره (multi user) باشد. به دلایلی که ظاهراً بیش از هر چیز به بلندپروازانه بودن این پروژه مربوط می‌شد، پیاده‌سازی‌کنندگان این پروژه یکی‌یکی از گروه خارج شدند و کار مطابق پیش‌بینی‌ها پیش نرفت. اما به واسطه‌ی تجربه‌ی حاصل از این پروژه، دو نفر از متخصصین آزمایشگاه‌های بل (شرکت AT&T) با نام‌های Dennis Ritchie و Ken Thompson توانستند یک سیستم‌عامل تجاری (که در ابتدا چندکاربره هم نبود)‌ با نام UNIX ایجاد کنند.

در حین توسعه‌ی UNIX، آقای Dennis Ritchie یک زبان برنامه‌نویسی سطح بالا با نام C را ابداع کرد و با بازنویسی UNIX با استفاده از C آن را به یک سیستم‌عامل پرتابل تبدیل کرد. وقتی قوانین ضد انحصار بر علیه شرکت AT&T به کار افتاد و موجب تجزیه‌ی این شرکت به چند شرکت دیگر از جمله Nokia شد، عرضه‌ی UNIX با مشکل همراه شد. در این بین، یک نسخه‌ی متن‌باز از UNIX با نام BSD در دانشگاه برکلی کالیفرنیا تولید شد اما قبل از عرضه با شکایت AT&T مبنی بر استفاده‌ی مستقیم از سورس‌کد UNIX مواجه شد. در این میان، یک دانشجوی خلاق و مستعد فنلاندی به نام Linus Torvalds از فرصت ایجاد شده استفاده کرد و به قول خودش فقط برای سرگرمی، یک نسخه‌ی متن‌باز از UNIX ایجاد کرد. در واقع، آنچه که آقای Torvalds ایجاد کرده بود، Kernel یا هسته‌ی یک سیستم‌عامل بود که به شکل خیره‌کننده‌ای اکثر قابلیت‌های UNIX را ارائه می‌داد و کاملاً با استاندارد POSIX که با هدف حفظ Portability ارائه شده بود، سازگار بود.

عرضه‌ی این هسته توسط آقای Torvalds در سال ۱۹۹۱ رخ داد اما چند سال قبل از آن، جنبشی با نام FOSS یا Free and Open Source Software به راه افتاده بود و شخصی به نام Richard Stallman در رأس این جنبش قرار داشت. یکی از مهمترین کارهایی که این افراد دنبال می‌کردند، خلق یک نسخه‌ی متن‌باز و رایگان از UNIX در پروژه‌ای با نام GNU بود. پروژه‌ی GNU خوب پیش رفته بود و تقریباً همه‌ی کامپوننت‌های یک سیستم‌عامل را ساخته بود به‌جز Kernel که هنوز به چند سال کار نیاز داشت. اما با توافقی که بین Torvalds و Stallman رخ داد، هسته‌ی ساخته‌شده توسط Torvalds که Linux نام داشت به GNU افزوده شد و سیستم عاملی ایجاد شد با نام GNU/LINUX.

تاریخچه‌ی پیدایش و توسعه‌ی لینوکس در بطن خود یک مبارزه را روایت می‌کند؛ مبارزه‌ای برای پس گرفتن حق کنترل کامپیوتر. وقتی انقلاب ریزپردازنده‌ها (microprocessors) در دهه‌ی ۱۹۷۰ میلادی، داشتن کامپیوتر را برای افراد عادی مثل من و شما ممکن کرد، چند شرکت بزرگ شروع به تحمیل کنترل خود روی کامپیوترها کردند و توسعه‌ی لینوکس، پاسخ جامعه‌ی متن‌باز (open source community) به این خواسته‌های انحصارگرایانه و محدود کننده بود. اولین چیزی که با شنیدن نام لینوکس به ذهن هر کسی متبادر می‌شود، مفهوم آزادی است اما واقعاً خیلی از مردم نمی‌دانند مفهوم این آزادی واقعاً چیست. آزادی یعنی اینکه شما تصمیم می‌گیرید که با کامپیوترتان چه کنید و تنها راه برای حصول این هدف این است که بدانید کامپیوتر شما چطور کار می‌کند. لینوکس هیچ رازی را از شما پنهان نمی‌کند.

جزئیات وقایع تاریخی همیشه پنهان بوده و این باعث می‌شود که هر واقعه‌ی تاریخی در هاله‌ای از ابهام قرار داشته باشد. شما مخیرید که به هر یک از این دو روش در مورد لینوکس و جامعه‌ی متن‌باز فکر کنید: یک تلاش قهرمانانه و افسانه‌ای برای آزادی یا یک انتخاب ناگزیر برای کسانی که به خاطر نداشتن مزایایی که رقبا دارند، باید زمین بازی را عوض کنند. اما در هر حال، لینوکس مزایایی انکار نشدنی دارد و حق آگاهی و کنترل کامپیوتر را به ما هدیه می‌دهد. باز هم تأکید می‌کنم که در اینوکس هیچ چیزی ماهیت رازآلود ندارد و هر کسی که به اندازه‌ی کافی مشتاق باشد، می‌تواند بداند در کامپیوترش چه می‌گذرد.

توزیع‌های یونیکس و لینوکس

با توجه به متن‌باز بودن لینوکس و مطابق لایسنس GPL، هر کسی می‌تواند از کدهای هسته‌ لینوکس برای خلق یک سیستم‌عامل استفاده کند. چنین سیستم‌عامل‌هایی را توزیع‌های لینوکسی (Linux Distributions) می‌گویند و Debian، Ubuntu، RedHat و Fedora تعدادی از مهمترین آنها هستند. اندروید هم یک توزیع لینوکسی محسوب می‌شود. به طور کلی، توزیع‌های لینوکسی اصطلاحاً Unix-like هستند. اما سیستم‌عامل‌هایی مانند FreeBSD و MacOS توزیع‌های Unix هستند. توزیع‌های Unix یه استاندارد POSIX پایبند هستند اما در بین توزیع‌های لینوکسی تعداد کمی (مثل EulerOS) هستند که کاملاً به POSIX پایبندند و اصطلاحاً POSIX-Compliant هستند.

این آموزش به خط فرمان لینوکس اختصاص دارد که البته کاملاً از خط فرمان یونیکس متأثر است و اکثر مطالب بیان‌شده برای توزیع‌های یونیکسی هم کاربرد دارد. هر جا تفاوتی از این نظر وجود داشته باشد، به آن اشاره خواهیم کرد.

مزایای استفاده از خط فرمان

در دنیای فیلم و سینما ما موجوداتی می‌بینیم که سوپر هکر محسوب می‌شوند؛ شخصی که می‌تواند در کمتر از ۳۰ ثانیه به اطلاعات فوق‌سری یک کامپیوتر نظامی دسترسی پیدا کند! اما آیا تا حالا به این نکته توجه کرده‌اید که این موجودات عجیب‌الخلقه هیچ اعتقادی به ماوس ندارند؟ علت این امر آن است که فیلمسازها می‌دانند که ما انسان‌ها به طور غریزی آگاهیم که تنها وسیله‌ای که واقعاً برای ارتباط با کامپیوتر و انجام هر کاری با آن لازم است، کیبورد است.

اکثر کاربران کامپیوتر از رابط کاربری گرافیکی (Graphical User Interface) یا GUI استفاده می‌کنند و از نظر آنها رابط خط فرمان (Command Line Interface) یا CLI چیز وحشتناکی است که به تاریخ پیوسته است. البته که این یک تصور کاملاً غلط و تأسف‌برانگیز است، زیرا یک CLI‌ خوب یک روش فوق‌العاده برای برقراری ارتباط با کامپیوتر است و قابلیت‌هایی ارائه می‌دهد که یک GUI فاقد آنهاست. شاید این جمله‌ی معروف را شنیده باشید که: GUI کارهای ساده را ساده می‌کند و CLI کارهای سخت را ممکن می‌کند.

اجازه دهید قدرت CLI در مقابل GUI را با ذکر یک مثال نشان دهیم. فرض کنید بخواهیم از بین چند صد فایل موجود در یک دایرکتوری، فایل‌هایی را که دارای پسوند .txt هستند، در یک دایرکتوری دیگر کپی کنیم. اگر بخواهیم از GUI برای این کار استفاده کنیم، راهی نداریم جز اینکه این فایل‌ها را یکی‌یکی بررسی کنیم و هر فایلی را که داری پسوند .txt است، انتخاب کنیم. اما این کار، با استفاده از CLI، فارغ از تعداد فایل‌ها، تنها به یک دستور نیم‌خطی نیاز دارد.

آنچه در دوره آموزش خط فرمان لینوکس خواهید آموخت:

مطالب این اموزش در قالب چهار بخش کلی ارائه می‌شود:

  • یادگیری Shell: در این بخش با مفسر خط فرمان لینوکس یعنی Shell آشنا می‌شویم. Shell یک زبان اسکریپت‌نویسی است و توزیع‌های لینوکسی از چندین Shell مختلف برای تفسیر دستورات خط فرمان استفاده می‌کنند که مهمترین آنها Bash نام دارد. ساختار دستورات (commands)، پیمایش در سیستم (system navigation)، دسترسی به help و مستندات دستورات و تعدادی از مهمترین دستورات پایه در این بخش مورد بررسی قرار می‌گیرند.
  • پیکربندی محیط: در این بخش با ویرایش فایل‌های پیکربندی که رفتار کامپیوتر را از خط فرمان کنترل می‌کنند، آشنا می‌شویم.
  • کارهای معمول و ابزارهای ضروری: در این بخش با بسیاری از کارهای معمول که از طریق خط فرمان به انجام می‌رسیند، آشنا می‌شویم.
  • نوشتن اسکریپت‌های Shell: در این بخش برنامه‌نویسی Shell معرفی می‌شود. بسیاری از مفاهیم رایج در زبان‌های برنامه‌نویسی در Shell نیز وجود دارد و Shell Scripting به‌ویژه ما را در فرایند اتوماسیون یا خودکارسازی کارها یاری می‌کند.