📖 مقدمه
میخواهم داستانی برایتان تعریف کنم.
نه، نه داستان اینکه چگونه لینوس توروالدز در سال ۱۹۹۱ نخستین نسخه از هستهٔ لینوکس را نوشت. آن داستان را میتوانید در بسیاری از کتابهای لینوکس بخوانید. همچنین قصد ندارم داستان دیگری را بازگو کنم؛ اینکه چند سال پیشتر، ریچارد استالمن پروژهٔ گنو (GNU Project) را آغاز کرد تا یک سیستمعامل آزاد شبیه یونیکس ایجاد کند. آن هم داستانی مهم است، اما بیشتر کتابهای لینوکس آن را روایت کردهاند.
نه، داستانی که من قصد دارم بگویم، داستان بازپسگیری کنترل رایانهٔ شما است.
زمانی که من در اواخر دههٔ ۱۹۷۰ بهعنوان یک دانشجوی دانشگاه شروع به کار با رایانه کردم، انقلابی در جریان بود. اختراع ریزپردازنده این امکان را فراهم ساخته بود که افراد عادی مانند من و شما بتوانند واقعاً مالک یک رایانه شوند. برای بسیاری از مردم امروز دشوار است که تصور کنند زمانی تنها شرکتهای بزرگ و دولتها همهٔ رایانهها را اداره میکردند. کافی است بگویم در آن زمان، کار چندانی نمیتوانستید انجام دهید.
امروز جهان بسیار متفاوت است. رایانهها همهجا هستند؛ از ساعتهای مچی کوچک گرفته تا مراکز دادهٔ عظیم و هر چیزی در میان این دو. افزون بر حضور همهجانبهٔ رایانهها، ما یک شبکهٔ جهانی نیز داریم که همهٔ آنها را به هم متصل میکند. این امر عصری شگفتانگیز از توانمندسازی فردی و آزادی خلاقانه پدید آورده است. با این حال، در دو دههٔ گذشته، اتفاق دیگری نیز در جریان بوده است: چند شرکت غولآسا کنترل بیشتر رایانههای جهان را به دست گرفتهاند و تعیین میکنند که شما با رایانهتان چه میتوانید و چه نمیتوانید انجام دهید.
خوشبختانه، مردم از سراسر جهان در برابر این روند ایستادهاند. آنها برای حفظ کنترل رایانههای خود مبارزه میکنند؛ با نوشتن نرمافزارهای خویش. آنها لینوکس را بنا میکنند.
بسیاری از مردم هنگام سخن گفتن دربارهٔ لینوکس از «آزادی» یاد میکنند، اما بهگمان من بیشتر آنها بهدرستی نمیدانند این آزادی چه معنایی دارد. آزادی یعنی قدرت تصمیمگیری دربارهٔ اینکه رایانهٔ شما چه کاری انجام دهد؛ و تنها راه رسیدن به این آزادی آن است که بدانید رایانهٔ شما چه میکند. آزادی یعنی رایانهای که هیچ رازی ندارد؛ جایی که همهچیز را میتوان دریافت، اگر بهاندازهٔ کافی پیگیر باشید.
چرا از خط فرمان استفاده کنیم؟
آیا تا به حال در فیلمها دیدهاید وقتی «ابرهکر» ــ همان کسی که میتواند در کمتر از ۳۰ ثانیه وارد یک رایانهٔ فوقامنیتی نظامی شود ــ پشت رایانه مینشیند، هرگز به ماوس دست نمیزند؟ این به این دلیل است که فیلمسازان میدانند ما، بهعنوان انسان، بهطور غریزی میفهمیم که تنها راه برای واقعاً انجام دادن کارها با رایانه، تایپ کردن بر روی صفحهکلید است.
امروزه بیشتر کاربران رایانه تنها با رابط کاربری گرافیکی (GUI) آشنا هستند و فروشندگان و مفسران به آنان آموختهاند که رابط خط فرمان (CLI) چیزی هراسانگیز و متعلق به گذشته است. این جای تأسف دارد، زیرا یک رابط خط فرمان خوب روشی شگفتانگیز و بیانی برای ارتباط با رایانه است، همانگونه که زبان نوشتاری برای انسانها چنین است. گفتهاند که: «رابطهای گرافیکی کارهای آسان را آسان میکنند، در حالیکه رابطهای خط فرمان کارهای دشوار را ممکن میسازند» و این گفته هنوز هم بهشدت درست است.
از آنجا که لینوکس بر پایهٔ خانوادهٔ سیستمعاملهای یونیکس ساخته شده است، همان میراث غنی ابزارهای خط فرمان یونیکس را به ارث برده است. یونیکس در اوایل دههٔ ۱۹۸۰ بهطور گسترده مطرح شد (اگرچه یک دهه زودتر توسعه یافته بود)، پیش از آنکه رابطهای کاربری گرافیکی بهطور فراگیر پذیرفته شوند، و در نتیجه، یک رابط خط فرمان گسترده و قدرتمند توسعه داد. در واقع، یکی از مهمترین دلایلی که کاربران اولیه لینوکس آن را بهجای ویندوز NT انتخاب کردند، همین رابط خط فرمان قدرتمندی بود که «کارهای دشوار را ممکن میکرد».
این کتاب دربارهٔ چیست؟
این کتاب یک نمای کلی از «زندگی در خط فرمان لینوکس» است. برخلاف برخی کتابها که تنها بر یک برنامه متمرکز میشوند (مانند شل bash)، این کتاب تلاش میکند تا چگونگی کار با رابط خط فرمان را در مقیاسی گستردهتر نشان دهد. اینکه چگونه همهچیز کار میکند؟ چه قابلیتهایی دارد؟ بهترین شیوهٔ استفاده از آن چیست؟
این کتاب در مورد مدیریت سیستم لینوکس نیست. هرچند هر بحث جدی دربارهٔ خط فرمان ناگزیر به موضوعات مدیریت سیستم کشیده میشود، اما این کتاب تنها به برخی از آنها اشاره میکند. با این حال، خواننده را برای مطالعهٔ بیشتر آماده خواهد کرد؛ با فراهم کردن بنیانی محکم در استفاده از خط فرمان، ابزاری اساسی برای هر کار جدی در مدیریت سیستم.
این کتاب بهشدت بر لینوکس متمرکز است. بسیاری از کتابهای دیگر تلاش میکنند با گنجاندن سکوهای دیگر مانند یونیکس عمومی یا macOS مخاطبان بیشتری را جذب کنند. اما در این راه، محتوای خود را «رقیق» کرده و تنها به موضوعات کلی میپردازند. این کتاب، برعکس، تنها توزیعهای معاصر لینوکس را پوشش میدهد. نود و پنج درصد محتوای آن برای کاربران سایر سیستمهای شبهیونیکس نیز مفید است، اما هدف اصلی آن کاربر مدرن خط فرمان لینوکس است.
چه کسانی باید این کتاب را بخوانند؟
این کتاب برای کاربران تازهوارد لینوکس است که از سکوهای دیگر مهاجرت کردهاند. احتمالاً شما یک «کاربر حرفهای» در یکی از نسخههای مایکروسافت ویندوز هستید. شاید رئیستان به شما گفته است باید یک سرور لینوکس را مدیریت کنید، یا شاید وارد دنیای هیجانانگیز رایانههای تکبُردی (SBC) مانند رزبریپای شدهاید. ممکن است صرفاً یک کاربر دسکتاپ باشید که از مشکلات امنیتی خسته شده و میخواهد لینوکس را امتحان کند. همهٔ اینها پذیرفته است. همه در اینجا خوشآمدید.
با این حال، هیچ میانبری به سوی آگاهی لینوکسی وجود ندارد. یادگیری خط فرمان چالشبرانگیز است و تلاش واقعی میطلبد. نه به این دلیل که بسیار سخت است، بلکه به این دلیل که بسیار گسترده است. یک سیستم لینوکس معمولی واقعاً هزاران برنامه دارد که میتوانید روی خط فرمان بهکار گیرید. خود را هشدارشده بدانید؛ یادگیری خط فرمان یک کار سطحی نیست.
از سوی دیگر، یادگیری خط فرمان لینوکس بسیار پاداشدهنده است. اگر اکنون فکر میکنید یک «کاربر حرفهای» هستید، صبر کنید. هنوز قدرت واقعی را نمیشناسید. و بر خلاف بسیاری از مهارتهای دیگر رایانهای، دانش خط فرمان ماندگار است. مهارتهایی که امروز میآموزید، حتی ده سال دیگر هم به کار خواهند آمد. خط فرمان آزمون زمان را تاب آورده است.
همچنین فرض بر این است که شما هیچ تجربهٔ برنامهنویسی ندارید، اما نگران نباشید؛ ما شما را در این مسیر نیز راهنمایی خواهیم کرد.
چه چیزهایی در این کتاب هست؟
مطالب این کتاب با دقت در یک توالی انتخابشده ارائه شدهاند، همانند یک معلم خصوصی که در کنار شما نشسته و شما را هدایت میکند. بسیاری از نویسندگان این مطالب را بهصورت «سیستماتیک» ارائه میدهند و هر موضوع را بهطور جامع پوشش میدهند. این از دید نویسنده منطقی است، اما میتواند برای کاربران تازهکار بسیار گیجکننده باشد.
هدف دیگر، آشنا کردن شما با شیوهٔ تفکر یونیکس است، که با شیوهٔ تفکر ویندوز متفاوت است. در این مسیر، به چند موضوع جانبی نیز خواهیم پرداخت تا درک کنید چرا برخی چیزها اینگونه کار میکنند و چگونه چنین شدهاند. لینوکس تنها یک نرمافزار نیست؛ بلکه بخشی کوچک از فرهنگ بزرگتر یونیکس است که زبان و تاریخ خاص خود را دارد. ممکن است یکی دو گلایه هم در میان بیاورم.
این کتاب به چهار بخش تقسیم شده است، که هر یک جنبهای از تجربهٔ خط فرمان را پوشش میدهند:
- بخش ۱ – یادگیری شل: آغاز اکتشاف ما در زبان پایهٔ خط فرمان، شامل ساختار دستورات، پیمایش در سیستم فایل، ویرایش خط فرمان، و یافتن راهنما و مستندات برای دستورات.
- بخش ۲ – پیکربندی و محیط: ویرایش فایلهای پیکربندی که عملیات رایانه را از طریق خط فرمان کنترل میکنند.
- بخش ۳ – وظایف رایج و ابزارهای اساسی: بررسی بسیاری از کارهای معمول که از طریق خط فرمان انجام میشوند. سیستمعاملهای شبهیونیکس مانند لینوکس شامل برنامههای «کلاسیک» خط فرمان هستند که برای انجام عملیات قدرتمند بر روی دادهها بهکار میروند.
- بخش ۴ – نوشتن اسکریپتهای شل: معرفی برنامهنویسی شل، روشی ساده اما کارآمد برای خودکارسازی بسیاری از وظایف رایج رایانهای. با یادگیری برنامهنویسی شل، با مفاهیمی آشنا میشوید که در بسیاری از زبانهای دیگر نیز کاربرد دارند.
چگونه این کتاب را بخوانید
از ابتدای کتاب شروع کنید و تا انتها ادامه دهید. این کتاب بهعنوان یک مرجع نوشته نشده است، بلکه بیشتر شبیه داستانی با آغاز، میانه و پایان است.
پیشنیازها
برای استفاده از این کتاب، تنها چیزی که نیاز دارید یک نصب فعال لینوکس است. این را میتوانید به دو روش بهدست آورید:
-
نصب لینوکس روی یک رایانه (نه چندان جدید). مهم نیست کدام توزیع را انتخاب میکنید، هرچند بیشتر افراد امروزه با اوبونتو، فدورا یا OpenSUSE شروع میکنند. اگر مطمئن نیستید، ابتدا اوبونتو را امتحان کنید. نصب یک توزیع مدرن لینوکس میتواند بهطور مضحکی آسان یا بهطور مضحکی دشوار باشد، بسته به سختافزار شما. من یک رایانهٔ رومیزی دو سه ساله با حداقل ۲ گیگابایت رم و ۶ گیگابایت فضای خالی دیسک سخت پیشنهاد میکنم. تا حد امکان از لپتاپها و شبکههای بیسیم خودداری کنید، زیرا اغلب دشوارتر راهاندازی میشوند.
-
استفاده از «Live CD» یا فلش USB. یکی از قابلیتهای جالب بسیاری از توزیعهای لینوکس این است که میتوان آنها را مستقیماً از یک CD-ROM یا فلش USB اجرا کرد، بدون نصب بر روی دیسک. کافی است وارد تنظیمات BIOS شوید و سیستم خود را برای بوت شدن از CD-ROM یا USB تنظیم کنید، سپس رایانه را راهاندازی مجدد کنید. این روش راهی عالی برای آزمایش سازگاری رایانه با لینوکس پیش از نصب است. عیب این روش این است که ممکن است بسیار کندتر از نصب روی دیسک سخت باشد. هم اوبونتو و هم فدورا (و برخی دیگر) نسخههای زنده (Live) دارند.
به هر حال، برای استفاده از این کتاب نیاز خواهید داشت گهگاه دسترسی ابرکاربر (superuser) داشته باشید تا برخی تمرینها را انجام دهید.
پس از داشتن یک نصب فعال لینوکس، شروع به خواندن کنید و همزمان روی رایانهٔ خود تمرین کنید. بیشتر مطالب این کتاب عملی هستند، پس پشت صفحهکلید بنشینید و تایپ کنید!
چرا آن را «گنو/لینوکس» نمینامم؟
در برخی محافل، از نظر سیاسی درست است که سیستمعامل لینوکس را «گنو/لینوکس» بنامند. مشکل واژهٔ «لینوکس» این است که هیچ راه کاملاً درستی برای نامگذاری آن وجود ندارد، زیرا توسط افراد زیادی در یک تلاش توسعهٔ توزیعشده و گسترده نوشته شده است. بهطور فنی، لینوکس تنها نام هستهٔ سیستمعامل است، نه بیشتر. هسته بسیار مهم است، چرا که سیستمعامل را به کار میاندازد، اما بهتنهایی کافی نیست تا یک سیستمعامل کامل بسازد.
اینجا است که ریچارد استالمن وارد میشود، فیلسوف-نابغهای که جنبش نرمافزار آزاد را بنیان نهاد، بنیاد نرمافزار آزاد را ایجاد کرد، پروژهٔ گنو را آغاز کرد، نخستین نسخهٔ کامپایلر GNU C (gcc) را نوشت، مجوز عمومی گنو (GPL) را خلق کرد و … . او اصرار دارد که باید آن را «گنو/لینوکس» بنامید تا نقش پروژهٔ گنو بهدرستی بازتاب یابد. در حالیکه پروژهٔ گنو پیش از هستهٔ لینوکس آغاز شد و سهم آن واقعاً شایستهٔ تقدیر است، قرار دادن آن در نام، به سایر افرادی که سهم قابلتوجهی داشتند بیانصافی خواهد بود. افزون بر این، من فکر میکنم «لینوکس/گنو» از نظر فنی دقیقتر است، زیرا هسته نخست بالا میآید و بقیه روی آن اجرا میشوند.
در کاربرد عمومی، «لینوکس» به هسته و همچنین همهٔ نرمافزارهای آزاد و متنبازی اشاره دارد که در یک توزیع لینوکس یافت میشوند؛ یعنی کل اکوسیستم لینوکس، نه فقط اجزای گنو. بازار سیستمعاملها به نامهای یککلمهای گرایش دارد، مانند DOS، ویندوز، macOS، سولاریس، Irix و AIX. من نیز انتخاب کردهام از همین قالب رایج استفاده کنم. البته اگر شما ترجیح میدهید از «گنو/لینوکس» استفاده کنید، کافی است در هنگام خواندن این کتاب آن را در ذهن خود جایگزین کنید. من اعتراضی نخواهم داشت.
چه چیزی در ویرایش ششم اینترنتی جدید است؟
در حالیکه شل تنها هر ده سال یا بیشتر یک نسخهٔ اصلی جدید دریافت میکند، سختافزار و ابزارها بهطور مداوم تغییر میکنند. این ویرایش از The Linux Command Line بار دیگر بهروز شده است تا این تغییرات در محیط خط فرمان بازتاب یابد. ویرایش جدید شامل اصلاحات کوچک متعدد، پوشش دستورات جدید و مثالهای تازه از اسکریپتها است. در مجموع، نزدیک به چهل صفحه محتوای تازه افزوده شده است. فهرست دقیق تغییرات در یادداشتهای انتشار موجود در LinuxCommand.org آمده است. همچنین در این نسخه، مجموعهای از اسکریپتهای نمونهٔ کتاب برای دانلود در LinuxCommand.org فراهم شده است.
سپاسگزاریها
میخواهم از افراد زیر که به امکانپذیر شدن این کتاب کمک کردند، سپاسگزاری کنم:
- Jenny Watson، ویراستار در انتشارات Wiley، که در ابتدا پیشنهاد نوشتن یک کتاب اسکریپتنویسی شل را داد.
- John C. Dvorak، ستوننویس و مفسر مشهور، که در یک قسمت از پادکست ویدیویی خود «Cranky Geeks» فرایند نوشتن را اینگونه توصیف کرد: «جهنم. روزی ۲۰۰ کلمه بنویس و در یک سال یک رمان خواهی داشت.» این توصیه مرا بر آن داشت که هر روز یک صفحه بنویسم تا یک کتاب کامل شود.
- Dmitri Popov، نویسندهٔ مقالهای در Free Software Magazine با عنوان «Creating a Book Template with Writer» که الهامبخش استفاده من از OpenOffice.org Writer (و بعداً LibreOffice Writer) برای نگارش متن شد. این انتخاب عالی از آب درآمد.
- Mark Polesky که بازبینی و آزمایش فوقالعادهای بر متن انجام داد.
- Jesse Becker، Tomasz Chrzczonowicz، Michael Levin و Spence Miner که بخشهایی از متن را آزمودند و مرور کردند.
- Karen M. Shotts ساعتهای زیادی صرف ویرایش و پالایش متن انگلیسی من کرد.
ویرایش ششم اینترنتی: سپاس ویژه از افرادی که بازخوردهای ارزشمندشان در این ویرایش گنجانده شد: Ala'a Ali، Mikey Barboza، Emanuele Bernardi، Andreas Bjørnestad، Richard Cooke، Ethan Dowlatshah، Marc Evans، Ryan Flynn، Janrodion، Robert Kennington، Klaus M. Körmendi، Vladimir Milovanović، Sea Monkey، Tim Nelson، Oktay-Akin Okutan، Nick Owens، Michael Parrish، Patrick، Esra Purba، Amir Razqandi، Pat Roche، Avid Seeker، Pooya Taherkhani، Carl Westman، و John Wiersba.