چطور در کامندلاین لینوکس حرفه ای باشیم یا «لینوکس را درک کنیم»

سلام

من یه مدته که وبلاگ شما سر میزنم و بخش محبوبم تو وبلاگ شما «چرا گنولینوکس رو دوست دارمه».

حالا یه سوال برام پیش اومده:

«چطور اینقدر خوب با ترمینال کار میکنید؟»

لطفا من رو راهنمایی کنید تا مثل خودتون یک لینوکس کار حرفه ایی بشم.

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

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

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

در لینوکس هم همینه. اگر شروع کنین به حفظ کردن تک تک دستورات و سوییچ ها و اینکه چطوری کار می کنن سریعا ذهنتون درگیر می شه با کلی چیز مهمل که توی هر کتاب و راهنمایی می شه پیداش کرد. کاری که برای حرفه ای شدن توی ترمینال باید کرد، درک سیستم است. من سعی می کنم توی بخش های زیر، مفهوم کلی سیستم عامل گنو/لینوکس رو توضیح بدهم. فراموش نکنین که گنو/لینوکس یک فلسفه هم هست و درست مثل ذن، روشن-شدگی توش باعث حرفه ای شدن ناگهانی آدم ها می شه. شاید کسی سال ها کار کنه و به روشنی نرسه و شاید کسی فقط با خوندن همین جمله که «گنو/لینوکس یک دید به دنیا است» درست مثل راهب بودایی که با تمرکز روی «صدای یک دست» یکهو به روشن شدگی می رسه، گنو/لینوکس رو درک کنه.

کوچک زیباست – اجزای تک منظوره ولی بسیار قوی

ضرب المثلی در دنیای برنامه نویسی هست که می گه «اگر می خواین یک تقویم بنویسین، لازم نیست براش ماشین حساب هم بنویسین». هر برنامه خوب دقیقا یک کار رو باید انجام بده ولی با قدرت و دقت. این درک بسیار مهمی از دنیای گنو/لینوکسه. گنو/لینوکس مثل یک جعبه ابزاره: پیچ گوشتی، گازانبر، فازمتر، چسب، متر، … توش هیچ وقت یک دستگاه مخصوص پیدا نمی کنین که فقط طراحی شده باشه برای «بیرون آوردن میخ از دیوار و بعد صاف کردنش و بعد زدن کمی رنگ به جای سوراخ» بلکه یک ابزار دارین برای بیرون آوردن میخ از دیوار و یک چکش که باید با یک سطح صاف ازش ابزاری برای میخ صاف کردن ابداع کنین و در نهایت یک قلم مو برای زدن کمی رنگ به جای میخ روی دیوار.

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

هنر شما در این بخش، درک این فلسفه است و داشتن آگاهی عمومی نسبت به این ابزارها. کافیه یک ایده داشته باشین که چه دستورهایی داریم و چیکار می کنن. کار سختی هم نیست و هیچ نیازی هم نیست که همه جزییات جریان رو حفظ باشیم. در این مورد جلوتر حرف می زنیم.

قابلیت وصل شدن اجزا به همدیگه

در بخش قبل گفتم که در گنو لینوکس ابزارهای مختلفی دارین که هر کدوم یک کار مستقل می کنن. این ابزارها ورودی و خروجی های استاندارد رو می گیرن. اگر هیچ چیز بهشون ندین احتمالا ورودی شون کیبورد خواهد بود و اگر هیچ چیز بهشون نگین، احتمالا خروجی شون نمایشگر کامپیوتر. اما گذاشتن یک علامت پایپ ساده ( | ) باعث می شه شما ورودی خروجی ها رو به هم لوله کشی کنین! مثلا wc تعداد کلمات یک متن رو می شمره. ls هم فایل های موجود رو نشون می ده. پس اگر من خروجی اولی رو لوله کشی کن به دومی و چنین چیزی بنویسم:

ls | wc

سیستم تعداد کلمات موجود در دستور اول (یعنی فایل های دایرکتوری جاری رو) نشونم خواهد داد. با اینکار شما می تونین تمام ابزارهای ریزی که داشتین رو یکی یکی به همدیگه وصل کنین. در مثال قبل شما با وصل کردن میخ-کش، چکش (کار روی سطح صاف)، قلم مو در اصل با کلی ابزار ریز یک ابزار ترکیبی ساختین که هر کدوم ورودی اش رو از خروجی قبلی می گیره. این یکی از برگ برنده های بسیار بزرگ لینوکسه.

همه چیز یا فایله یا پروسس

برای روشن-شدگی اینهم بسیار مهمه که در لینوکس برنامه ها همه بر اساس یک فلسفه نوشته شدن. رابط کاربری بر اساس یک فلسفه ایجاد شده و کلیت سیستم به یک شکل کار می کنه. مطلقا هر برنامه خوب لینوکس یکسری فایل تنظیم داره (که احتمالا توی etc/ و دایرکتوری ای به اسم همون برنامه است). تنظیمات همه از همونجا اعمال می شن و اگر می خواین چیزی رو تغییر بدین یا با یک برنامه بزرگتر (مثلا وب سرور) کاری رو بکنین که اصلا نمی دونین ممکنه یا نه، کافیه به دایرکتوری فایل های تنظیمات برین و فایل های تنظیمات و محتویاتشون رو چک کنین. معمولا اونجا راهنمایی های کافی پیدا می شن. این کاملا فرق داره با حالتی که برای تنظیم هر برنامه مجبور باشین توی منوها بچرخین و در بخش تنظیمات تب ها رو نگاه کنین. اکثرا برنامه های گرافیکی این رو هم دارن ولی در نهایت چیزی که مشخص می کنه برنامه چطور کار کنه ، اون فایل متنی تنظیمات است. در دنیای گنو/لینوکس هیچ چیز از چشم شما بیرون نیست و معمولا فایل تنظیمات حاوی هر چیز ممکن یک برنامه است.

ساختار فایل ها رو بشناسین

فایل های لینوکس به شکل اتفاقی توی دایرکتوری ها پخش نشدن (: یک نظم کاملا منطقی طبق یک استاندارد رعایت شده و این باعث می شه شما در مواجهه با ناشناخته ترین سوال هم یک سرنخ برای شروع داشته باشین. به این جدول نگاه کنید:

حالا فرض کنید به من بگن که لازمه تغییراتی توی سرویس privoxy بدم و مثلا بهش بگم که به جای 8123 از این به بعد روی پورت 8111 گوش بده. چه می کنم؟ جدول بالا می گه همه تنظیمات توی etc هستن. پس می رم اونجا. اوجنا یک دایرکتوری پیدا می کنم به اسم privoxy و اون تو یک فایل هست به اسم config! چی از این منطقی تر؟ توش رو نگاه می کنم و خط به خطش توضیح داره. یک جا هم نوشته:

تنظیمات پریوکسی

پس کافیه این خط رو ادیت کنم و عدد جدید رو بنویسم و بعد سرویس پرویوکسی رو حتی اگر ندونم چیه، مثل هر سرویس دیگه ری استارت کنم تا تنظیمات جدیدش رو بخونه:

/etc/init.d/privoxy restart

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

توانایی خوندن راهنماها

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

man privoxy

تا یک توضیح کامل در مورد این دستور / سرویس / موضوع بهم داده بشه. اول در یک پارگراف در این مورد که این دستور دقیقا چیکار می کنه و بعد کلی جزییات در مورد شیوه استفاده و در آخر هم اینکه کی اینو نوشته و بعدش هم حرف هایی مثل اینکه چه فایل های تنظیماتی برای این دستور هست و غیره.

این بهترین و کاملتر مرجع گنو/لینوکسه. اگر بتونین man فایل ها رو بخونین یعنی تقریبا هر کاری در گنو/لینوکس هست رو با حوصله و وقت می تونین انجام بدین. نباید ازش بترسین و باید شجاع باشین. پیشنهاد می کنم برای شروع به من فایل دستور ساده ای مثل wc نگاه کنین و با حوصله اونو بخونین تا بفهمین کجاش چی می گه و در دفعات بعدی راحت باشین.

در ضمن اینترنت، فروم ها، آی آر سی و غیره هم هستن. همینطور کتاب و هر چیز دیگه. ولی یادتون باشه که شما قراره «چگونگی پیدا کردن جواب» رو یاد بگیرن و نه اینکه برین به سراغ حفظ کردن همه جواب ها!

مثلا در مثال قبلی اگر من بخوام به جای تعداد کلمات فقط تعداد خط ها رو ببینم، می دونم که دستوری دارم به اسم wc که احتمالا اینو داره پس باید بتونم man wc رو نگاه کنم و کشف کنم که چه سوییچی فقط تعداد خط ها رو بهم نشون می ده.

همه کار قبلا انجام شده

این هم بسیار مهمه! اگر شما دارین کاری می کنین که هیچ کس دیگه توی دنیا نکرده احتمالا باید مشغول کار خیلی خیلی خفنی باشین. قبلا آدم ها دستورها رو به هم چسبوندن، فاصله رو از یک متن حذف کردن، عکس ها رو کنار هم چیدن، با چند تا عکس یک تصویر متحرک ساختن، تعداد تکرار یک عبارت در یک جمله رو شمردن و … اگر هیچ ایده ای ندارین که کاری رو باید چطور انجام بدین، سرچ کنین. به راحتی کشف می شه. گنو/لینوکسی ها زیاد می نویسن.. در اصل جامعه با جامعه معنی داره. مشکلاتی که خودتون حل کردین رو هم یک جایی توی اینترنت بنویسین. کپی پیست نکنین چون هیچ ارزشی نداره و حتی اگر مدتی ده بیست نفر رو گول بزنه که حرفه ای هستین، در طولانی مدت باعث می شه خودتون هیچ چیز یاد نگیرین اما شدیدا توصیه می کنم یک جایی توی اینترنت کشفیات شخصی خودتون رو بنویسین تا به درد بقیه ای که سرچ می کنن هم بخوره.

خلاصه می کنم به اینکه همه کارها قبلا انجام شده و تقریبا هر چیزی رو سرچ کنین به جواب معقولی می رسین یا حداقل به راهنماهایی برای شروع.

از انگلیسی نترسین

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

اگر قراره لینوکس کار کنین باید بخشی از دنیا باشین و سرچ کنین و نظراتتون و سوال هاتون رو بنویسین. اونم با یک انگلیسی جهان که خیلی راحت تر از انگلیسی آمریکایی یا انگلستانی یا ایرلندی یا استرالیایی است. جملات ساده بدون کلمات عجیب غریب.