خط فرمان لینوکس – مقدمه
من میخواهم داستانی را برایتان تعریف کنم.
نه، نمیخواهم به داستان اینکه چگونه لینوس توروالدز (Linus Torvalds) اولین نسخه از کرنل لینوکس را در سال 1991 نوشت بپردازم. شما میتوانید این داستان را در تعداد زیادی از کتاب های لینوکسی مطالعه کنید. این داستان را هم نمیخواهم تعریف کنم که چگونه چند سال قبل از آن ریچارد استالمن (Richard Stallman)، کار روی پروژه گنو (GNU Project) را برای ساخت یک سیستم عامل شبه یونیکس (Unix-like) آغاز کرد. این هم داستان مهمی است، اما اغلب کتاب های لینوکس به این داستان هم پرداختهاند.
نه، من میخواهم برایتان داستان چگونگی پس گرفتن کنترل کامپیوترتان را تعریف کنم.
وقتی کار با کامپیوتر را به عنوان یک دانشجوی کالج در اواخر دهه 1970 شروع کردم، انقلابی در حال وقوع بود. اختراع ریزپردازنده این امکان را فراهم کرده بود که افراد عادی مثل من و شما واقعا صاحب یک کامپیوتر شویم. تصور این موضوع که وقتی صرفا کسب و کارها و دولت های بزرگ تمام کامپیوترها را مدیریت میکردند دنیا چه شکلی بوده است این روزها برای اغلب مردم دشوار است. فقط میتوانیم بگوییم کار زیادی با کامپیوترها نمیتوانستید انجام دهید.
امروزه دنیا بسیار متفاوت است. کامپیوترها همه جا هستند، از ساعتهای مچی کوچک تا مراکز داده غول پیکر تا هرچیزی که مابین آنها قرار میگیرد. علاوه بر کامپیوترهایی که همه جا هستند، یک شبکه فراگیر هم داریم که آنها را به هم متصل میکند. حاصل این موضوع، عصر جدید و شگفتانگیزی از توانمندی شخصی و آزادی خلاق است، اما در یکی دو دهه اخیر اتفاق دیگری هم در حال وقوع است. تعدادی شرکت بزرگ کنترل خود را روی اغلب کامپیوترهای جهان تحمیل کردهاند و تصمیم میگیرند شما چه کاری با کامپیوترتان میتوانید انجام دهید و چه کاری نمیتوانید انجام دهید. خوشبختانه افرادی از سراسر دنیا در حال انجام کارهایی در این مورد هستند. آنها با نوشتن نرم افزارهای خودشان برای اینکه امکان کنترل کامپیوترهایشان را حفظ کنند مبارزه میکنند. آنها لینوکس را میسازند.
افراد بسیاری از “آزادی” (freedom) با توجه به لینوکس سخن میگویند، اما فکر نمیکنم اغلب مردم بدانند این آزادی واقعا چه معنایی دارد. آزادی، قدرت تصمیمگیری در این مورد است که کامپیوترتان چه کاری انجام میدهد، و تنها راه برای داشتن این آزادی اینست که بدانید کامپیوترتان در حال انجام چه کاری است. آزادی کامپیوتری است بدون اسرار، کامپیوتری که اگر به اندازه کافی درک هرچیزی در مورد آن برایتان مهم باشد بتوانید از آن سردربیاورید.
چرا از خط فرمان استفاده کنیم؟
تاکنون به فیلمهایی توجه کردهاید که در آن وقتی “ابر هکر” – کسی که میتواند به کامپیوتر نظامی فوق ایمن در کمتر از 30 ثانیه نفوذ کند – پشت کامپیوتر مینشیند اصلا به ماوس دست هم نمیزند؟ این موضوع به خاطر آنست که سازندگان فیلم درک میکنند ما به عنوان انسان به طور غریزی میدانیم تنها راه برای اینکه واقعا بتوانیم روی یک کامپیوتر هرکاری را انجام دهیم از طریق تایپ کردن روی صفحه کلید است!
این روزها اغلب کاربران کامپیوتر تنها با رابط کاربری گرافیکی (GUI) آشنا هستند و فروشنده ها و کارشناسان به آنها آموزش دادهاند رابط خط فرمان (CLI) چیز وحشتناکی است که به گذشته تعلق دارد. این مایه تأسف است، چرا که یک رابط خط فرمان خوب روشی شگفت انگیز برای برقراری ارتباط با کامپیوتر است درست به همان شیوهای که کلمه نوشته شده برای انسانهاست. این طور گفته شده است که “واسط های کاربری گرافیکی کارهای ساده را تسهیل میکنند، در حالیکه واسط های خط فرمان کارهای دشوار را امکانپذیر میکنند” و این موضوع امروز هم همچنان بسیار صحیح است.
از آنجایی که لینوکس از خانواده سیستم عاملهای یونیکس الگوبرداری شده است همان میراث غنی ابزارهای خط فرمان یونیکس را به اشتراک میگذارد. یونیکس در اوایل دهه 1980 میلادی پیش از پذیرش گسترده رابط های کاربری گرافیکی مورد توجه قرار گرفت (هرچند برای اولین بار یک دهه پیش از آن توسعه پیدا کرد) و درنتیجه به جای رابط کاربری گرافیکی، یک رابط خط فرمان بزرگ توسعه پیدا کرد. در واقع، یکی از قویترین دلایلی که پذیرندگان اولیه لینوکس آن را به جای ویندوز NT انتخاب کردند همین رابط خط فرمان قدرتمندش بود که “کارهای دشوار را امکانپذیر” میکرد.
این کتاب در مورد چیست؟
این کتاب نمایی کلی از “زندگی کردن” روی خط فرمان لینوکس است. برخلاف برخی از کتاب ها که تنها روی یک برنامه مانند برنامه شِل، bash، تمرکز میکنند، این کتاب تلاش میکند نحوه هماهنگی با رابط خط فرمان را به مفهوم بزرگتری بیان کند. اینکه چطور کار میکند؟ چه کار میتواند انجام دهد؟ بهترین روش برای استفاده از آن چیست؟
این کتابی در مورد مدیریت سیستم لینوکس نیست. در عین حالیکه هر بحث جدی پیرامون خط فرمان همواره به موضوعات مدیریت سیستم منجر میشود، این کتاب صرفا به تعداد اندکی از مسائل مدیریتی میپردازد. با این حال با ارائه یک پایه مستحکم در زمینه استفاده از خط فرمان که ابزاری ضروری برای هر عمل جدی مدیریت سیستم است خواننده را برای مطالعه بیشتر آماده میکند.
این کتاب بسیار لینوکس-محور است. بسیاری از کتاب ها سعی میکنند جذابیت خود را با اضافه کردن پلتفرم های دیگر مانند یونیکس و مک اُ اس (macOS) گسترش دهند. به این ترتیب چنین کتابهایی محتوای خود را “آب میکنند” تا تنها موضوعات عمومی را به صورت برجسته نمایش دهند. از سوی دیگر این کتاب فقط توزیع های امروزی لینوکس را پوشش میدهد. نود و پنج درصد از این محتوا برای کاربران سایر سیستم های شبه-یونیکس نیز مفید است، اما این کتاب به شدت کاربر خط فرمان لینوکس امروزی را هدف قرار داده است.
چه کسی باید این کتاب را بخواند؟
این کتاب برای کاربران جدید لینوکس است که از پلتفرم های دیگر مهاجرت کردهاند. به احتمال زیاد شما یک “کاربر قدرتمند” (پاور یوزر یا Power user) نسخه ای از مایکروسافت ویندوز (Microsoft Windows) هستید. شاید رئیستان به شما گفته است یک سرور لینوکسی را مدیریت کنید یا در حال ورود به دنیای هیجان انگیز و جدید کامپیوترهای تک برد (Single Board Computers – SBC) مانند رسپبری پای (Raspberry Pi) هستید. شما ممکن است فقط یک کاربر دسکتاپ باشید که از تمام مشکلات امنیتی خسته شده و میخواهد لینوکس را امتحان کند. خوب است. همگی به اینجا خوش آمدید.
همانطور که گفته شد، هیچ میانبری برای درک لینوکس وجود ندارد. یادگیری خط فرمان چالش برانگیز است و نیاز به تلاش واقعی دارد. دلیلش این نیست که خیلی سخت است، بلکه (به خاطر آنست که) نسبتا بسیار گسترده است. سیستم لینوکسی معمولی در واقع هزاران برنامه دارد که در خط فرمان میتوانید از آنها استفاده کنید. یادتان باشد به شما هشدار داده شد؛ یادگیری خط فرمان یک تلاش معمولی (و گاه به گاه) نیست.
از سوی دیگر، یاد گرفتن خط فرمان به شدت راضیکننده و ارزشمند است. اگر فکر میکنید هم اکنون یک “کاربر قدرتمند” هستید، فقط صبر کنید. شما هنوز نمیدانید قدرت واقعی چیست. و برخلاف بسیاری از مهارت های کامپیوتری دیگر، دانش خط فرمان دوام زیادی دارد. مهارتهایی که امروز یاد گرفته میشوند ده سال بعد همچنان مفید خواهند بود. خط فرمان از آزمون زمان جان سالم به در برده است.
همچنین فرض شده است که شما هیچ تجربه برنامه نویسی ندارید، اما نگران نباشید، ما شما را وارد این مسیر هم خواهیم کرد.
چه چیزی در این کتاب وجود دارد؟
این مطالب در یک دنباله با دقت انتخاب شده ارائه میشود، بسیار شبیه به معلمی که کنارتان نشسته و شما را در طول (مسیر) راهنمایی میکند. بسیاری از نویسندهها درباره این مطالب به شیوهای “نظام مند” (سیستماتیک) گفتگو میکنند و هر موضوع را با جزئیات به ترتیب پوشش میدهند. این موضوع از دید یک نویسنده بامعنی است، اما برای کاربران جدید میتواند بسیار گیجکننده باشد.
هدف دیگر اینست که شما را با طرز تفکر یونیکسی آشنا کنیم، چیزی که با طرز تفکر ویندوزی متفاوت است. در طول این راه، به چند سفر جانبی خواهیم رفت تا به شما کمک کنیم بفهمید چرا بعضی چیزهای مشخص به شیوهای که دارند، کار میکنند و چگونه به این شیوه دست پیدا کردهاند. لینوکس فقط یک قطعه نرم افزاری نیست؛ بلکه بخشی کوچک از یک فرهنگ بزرگتر یونیکس هم هست که زبان و تاریخچه خودش را دارد. من هم ممکن است کمی به آن بپردازم.
این کتاب به چهار بخش تقسیم شده است که هرکدام جنبههایی از تجربه خط فرمان را پوشش میدهند:
بخش 1 – یادگیری شل، اکتشاف ما در مورد زبان اصلی خط فرمان شامل چیزهایی مثل ساختار دستورات، گردش در سیستم فایل، ویرایش خط فرمان و پیدا کردن راهنما و مستندات در مورد دستورات را شروع میکند.
بخش 2 – پیکربندی و محیط، ویرایش فایل های پیکربندی را پوشش میدهد که عملکرد کامپیوتر را از طریق خط فرمان کنترل میکنند.
بخش 3 – اعمال متداول و ابزارهای ضروری، به بررسی بسیاری از اعمال مرسوم میپردازد که معمولا از طریق خط فرمان انجام میشوند. سیستم عامل های شبه یونیکس مانند لینوکس حاوی تعداد زیادی برنامههای خط فرمان “کلاسیک” هستند که برای انجام اعمال قدرتمند روی داده ها مورد استفاده قرار میگیرند.
بخش 4 – نوشتن اسکریپت های شل، برنامه نویسی شل را معرفی میکند، یک روش مسلما ابتدایی اما آسان برای یادگیری به منظور خودکارسازی بسیاری از اعمال رایانشی رایج. با یادگیری برنامه نویسی شل شما با مفاهیمی آشنا خواهید شد که روی بسیاری از زبان های برنامه نویسی دیگر قابل اعمال هستند.
چگونه این کتاب را مطالعه کنیم؟
از ابتدای کتاب شروع کنید و تا پایان آن را دنبال کنید. این (کتاب) به صورت یک اثر مرجع نوشته نشده است، در واقع بیشتر شبیه یک داستان با آغاز، میانه و پایان است.
پیش نیازها
برای استفاده از این کتاب، تمام چیزی که نیاز دارید یک لینوکس نصب شده است که کار کند. شما میتوانید با یکی از دو روش (زیر) به این (پیش نیاز) دست پیدا کنید:
- لینوکس را روی یک کامپیوتر (نه چندان جدید) نصب کنید. مهم نیست چه توزیعی را انتخاب میکنید، هرچند اغلب مردم این روزها با یکی از (توزیعهای) اوبونتو (Ubuntu)، فدورا (Fedora) یا اپنسوزه (OpenSUSE) شروع میکنند. اگر شک دارید ابتدا اوبونتو را امتحان کنید. نصب یک توزیع لینوکس امروزی میتواند بسته به سخت افزار شما به شکل مضحکی ساده یا دشوار باشد. من یک کامپیوتر رومیزی را (برای این کار) پیشنهاد میکنم که چند سالی از عمرش گذشته باشد و حداقل 2 گیگابایت رم (RAM) و 6 گیگابایت فضای خالی هارد دیسک داشته باشد. در صورت امکان از لپ تاپ ها و شبکه های بی سیم (Wireless) دوری کنید، چرا که شروع به کار با آنها اغلب کار دشوارتری است.
- از یک “لوح فشرده زنده” (Live CD) یا درایو فلش USB استفاده کنید. یکی از کارهای جالبی که میتوانید با بسیاری از توزیع های لینوکس انجام دهید اجرای مستقیم آنها از یک درایو CDROM یا درایو فلش UDB است بدون اینکه اصلا نصب شان کنید. فقط به بخش ستاپ (راه اندازی یا تنظیمات) بایوس (BIOS) خود مراجعه کنید و کامپیوترتان را طوری تنظیم کنید که از یک درایو CDROM یا دستگاه USB بوت شود و (کامپیوتر را) ریبوت (راه اندازی مجدد) کنید. استفاده از این روش، راهی عالی به منظور امتحان کردن یک کامپیوتر برای سازگاری با لینوکس قبل از نصب است. عیب (آن) اینست که ممکن است در مقایسه با داشتن لینوکس نصب شده روی درایو هارد (دیسک) تان بسیار کند باشد. اوبونتو و فدورا هر دو (در میان سایرین) دارای نسخه های زنده هستند.
فارغ از اینکه چگونه لینوکس را نصب میکنید گاهی اوقات برای انجام درسهای این کتاب به امتیازات ابرکاربر (یعنی امتیازات مدیریتی) نیاز خواهید داشت.
پس از اینکه یک (لینوکس) نصب شده داشتید که کار میکند، خواندن (کتاب) را شروع کنید و با کامپیوتر خودتان (آن را) دنبال کنید. اغلب مطالب این کتاب “با دستهای شما سر و کار دارد”، پس بنشینید و تایپ کنید.
چرا آن را گنو/لینوکس نمینامم؟
در برخی موارد از لحاظ عقلی صحیح است که سیستم عامل لینوکس را “سیستم عامل گِنو/لینوکس” (GNU/Linux) بنامیم. مشکل “لینوکس” اینست که هیچ روش کاملا صحیحی برای نامگذاری آن وجود ندارد چرا که توسط افراد مختلف فراوانی در یک تلاش گسترده و توزیع شده برای توسعه آن، نوشته شده است. از لحاظ فنی، لینوکس (Linux) نام هسته سیستم عامل است، نه چیزی بیشتر. البته که هسته یا کرنل (Kernel) بسیار مهم است زیرا باعث میشود سیستم عامل کار کند، اما برای شکل دادن یک سیستم عامل کامل کافی نیست.
ریچارد استالمن (Richard Stallman) وارد میشود، فیلسوف نابغهای که جنبش نرم افزار آزاد را پایهگذاری کرد، بنیاد نرم افزار آزاد را راهاندازی کرد، پروژه گنو را شکل داد، اولین نسخه کامپایلر گنو سی (GNU C Compiler یا GCC) را نوشت، مجوز جامع همگانی گنو (GNU General Public License یا GPL) را ایجاد کرد و غیره و غیره و غیره. او اصرار دارد آن (سیستم عامل) را “گنو/لینوکس” بنامید تا به درستی مشارکتهای پروژه گنو را بازتاب کند. درحالی که پروژه گنو به پیش از هسته لینوکس برمیگردد و مشارکتهای پروژه به شدت شایسته قدردانی است (اما) قرار دادن آنها در نام (سیستم عامل) برای هر فرد دیگری که مشارکتهای قابل توجهی داشته، ناعادلانه است. علاوه بر این، من فکر میکنم “لینوکس/گنو” از لحاظ فنی دقیقتر است چرا که ابتدا هسته بوت میشود و هر چیز دیگری روی آن اجرا میشود.
در استفاده رایج، “لینوکس” به هسته و همه نرم افزارهای رایگان و منبع بازی اشاره میکند که در توزیع های معمول لینوکس پیدا میشود، یعنی کل اکوسیستم لینوکس، نه فقط اجزای گنو. به نظر میرسد بازار سیستم عامل نامهای تک کلمهای مانند DOS, Windows, macOS, Solaris, Irix و AIX را ترجیح میدهد. من (هم) انتخاب کردم که از قالب محبوب استفاده کنم. با این حال اگر شما ترجیح میدهید به جایش از “گنو/لینوکس” استفاده کنید، لطفا هنگام مطالعه این کتاب یک جستجو و جایگزینی ذهنی انجام دهید. برای من مهم نیست.
چه چیزی در نسخه اینترنتی پنجم جدید است؟
با تکیه بر کارهای انجام شده برای نسخه اینترنتی چهارم، این نسخه از خط فرمان لینوکس به صورت گسترده امروزی شده است. ویرایش ها و اصلاحات کوچک فراوان، اسکرین شات ها و نمودارهای جدید همراه با تعداد اندکی شفاف سازی (در این نسخه) وجود دارد. تعدادی باگ را هم رفع کردم ;-).
قدردانی ها
من میخواهم از افراد زیر که در ساخت (نوشتن) این کتاب کمک کردهاند تشکر کنم:
اولین نسخه اینترنتی
جنی واتسون (Jenny Watson)، ویراستار کسبی (Acquisitions Editor) در انتشارات وایلی (Wiley Publishing) که در ابتدا پیشنهاد کرد من یک کتاب اسکریپت نویسی شل بنویسم.
جان سی. دوراک (John C. Dvorak)، ستوننویس و کارشناس برجسته. آقای دوراک در یک اپیزود از پادکست ویدئوییاش “Cranky Geeks” روند نوشتن را توضیح داد: “جهنم. روزی 200 کلمه بنویس و ظرف یک سال یک رمان داری.” این توصیه باعث شد روزی یک صفحه بنویسم تا زمانی که یک کتاب داشتم.
دیمیتری پوپوف (Dmitri Popov) مقالهای با عنوان “ایجاد قالب کتاب با Writer” در مجله نرم افزار آزاد (Free Software Magazine) نوشت که به من انگیزه داد از (نرم افزار) OpenOffice.org Writer برای نوشتن متن استفاده کنم. همانطور که معلوم شد، به طرز شگفت انگیزی کار کرد.
مارک پولسکی (Mark Polesky) بررسی و تست فوق العادهای روی متن انجام داد.
جسی بکر (Jesse Becker)، Tomasz Chrzczonowicz، مایکل لوین (Michael Levin) و اسپنس ماینر (Spence Miner) هم بخشهایی از متن را تست و بررسی کردند.
کارن ام. شاتس (Karen M. Shotts) ساعتهای زیادی را با ویرایش نوشته صرف پرداخت و آراستنِ بهاصطلاح انگلیسیِ من کرد.
دومین نسخه اینترنتی
تشکر ویژه از افراد زیر که بازخورد ارزشمندشان در دومین نسخه اینترنتی گنجانده شده است: Adrian Arpidez, Hu Bo, Heriberto Cantú, Joshua Escamilla, Bruce Fowler, Ma Jun, Seth King, Mike O’Donnell, Parviz Rasoulipour, Gabriel Stutzman, و Christian Wuethrich.
سومین نسخه اینترنتی
تشکر ویژه از افراد زیر که بازخورد ارزشمندشان در سومین نسخه اینترنتی گنجانده شده است: Steve Bragg, Lixin Duan, Sunil Joshi, Chris Knight, Jim Kovacs, Bartłomiej Majka, Bashar Maree, Frank McTipps, Justin Page, Waldo Ribeiro, Satej Kumar Sahu, Mikhail Sizov, Pickles Spill, Francesco Turco, Wolfram Volpi, and و Boyang Wang.
چهارمین نسخه اینترنتی
تشکر ویژه از افراد زیر که بازخورد ارزشمندشان در چهارمین نسخه اینترنتی گنجانده شده است: Enzo Cardinal, Devin Harper, Jørgen Heitmann, Jonathan Jones, Jaroslaw Kolosowski, Eric.Kammerer, Waldo Ribeiro, Nick Rose, Ben Slater, و Francesco Turco.
پنجمین نسخه اینترنتی
تشکر ویژه از افراد زیر که بازخورد ارزشمندشان در پنجمین نسخه اینترنتی گنجانده شده است: John Burns, Paolo Casati, Waldo Ribeiro, و Valter Wierzba.
و در پایان، از خواننده های فراوان LinuxCommand.org که ایمیل های مهربانانه زیادی برای من ارسال کردهاند بسیار سپاسگزارم. تشویق آنها به من این ایده را داد که واقعا در حال انجام کاری هستم!
بازخورد شما لازم است!
این کتاب مانند بسیاری از پروژههای نرمافزاری منبع باز، یک پروژه در حال پیشرفت است. اگر خطایی فنی (در آن) پیدا کردید در یک خط برایم بفرستید به:
bshotts@users.sourceforge.net
حتما نسخه دقیق کتابی که میخوانید را ذکر کنید. تغییرات و پیشنهادات شما ممکن است وارد نسخه های بعدی (کتاب) شوند.
مطالعه بیشتر
- اینجا تعدادی مقاله ویکیپدیا در مورد افراد مشهوری آورده شده که در بالا (نامشان) ذکر شده است:
http://en.wikipedia.org/wiki/Linus_Torvalds
http://en.wikipedia.org/wiki/Richard_Stallman - بنیاد نرم افزار آزاد و پروژه گنو:
http://en.wikipedia.org/wiki/Free_Software_Foundation
http://www.fsf.org
http://www.gnu.org - ریچارد استالمن به طور گسترده در مورد موضوع نامگذاری “گنو/لینوکس” نوشته است:
http://www.gnu.org/gnu/why-gnu-linux.html
http://www.gnu.org/gnu/gnu-linux-faq.html#tools
اطلاعات مربوط به تولید کتاب
این کتاب در اصل با استفاده از (نرم افزار) OpenOffice.org Writer و فونت های Liberation Serif و Liberation Sans روی یک Dell Inspiron 530N با پیکربندی کارخانه اوبونتو 8.04 نوشته شده است. نسخه PDF متن به صورت مستقیم توسط OpenOffice.org Writer تولید شده است. نسخه دوم اینترنتی روی همان کامپیوتر با استفاده از LibreOffice Writer در اوبونتو 12.04 تولید شد.
نسخه سوم و چهارم اینترنتی با LibreOffice Writer روی کامپیوتر System76 Ratel Pro تولید شد که با اوبونتو 14.04 پیکربندی کارخانه شده بود. نسخه پنجم اینترنتی روی همان کامپیوتر با استفاده از LibreOffice Writer و اوبونتو 18.04 تولید شد.
متن بالا بخشی از ترجمه کتاب The Linux Command Line (به فارسی: خط فرمان لینوکس) نوشته William Shotts است که نسخه اصلی آن از طریق وبسایت رسمی کتاب (https://linuxcommand.org) قابل دسترسی است. (فهرست مطالب کتاب خط فرمان لینوکس).