در این آموزش قصد بر این است تا نکاتی پیرامون ضرورت استفاده از خط فرمان لینوکس، شرح داده شود. همچنین سعی بر این بوده تا وارد مسائل تخصصی نشده و توضیحات مربوطه، جنبه عامهپسند و تازهکارپسند داشته باشند! دلایل ضرورت استفاده از خط فرمان، با ذکر و تشریح چندین مثال کاربردی، کوششی بر افزودن شفافیت و وضوح بیشتر منظور مورد نظر بوده است.
ناگفته نماند که در این آموزش قرار بر این بود که ترفندهای اساسی استفاده از خط فرمان نیز ذکر شود؛ اما متأسفانه به جهت طولانی شدن این مطلب مجبور شدم آموزش ترفندهای خط فرمانی رو به جلسه بعدی موکول کنم!
اجازه بدید در همین ابتدای کار به زبون خودم توضیحی کوتاه راجع به خط فرمان لینوکس بدم! درواقع خط فرمان (Command Line) در لینوکس به بخش یا به تعبیری به محیطی اطلاق میشه که از طریق اون میتوان با تایپ دستورات (فرمانها) و فشردن کلید اینتر در انتهای هر دستور (برای اجرای آن!) سیستم را مدیریت کرد. با انبوهی توهین و اغماض، میتوان خط فرمان لینوکس رو به نوعی، گونه پیشرفته CMD در محیط ویندوز دانست! درواقع این تشبیه بیشتر برای جاافتادن مطلب زده شده و مطمئناً قدرت فوقالعاده خط فرمان لینوکس در قیاس با CMD ویندوز، مقایسهای در اندازه سطح سواد یک دکتر در مقابل سواد یک کودک ۷ ساله اول ابتدایی است. (و مطمئناً بیش از آن)
چرا خط فرمان؟
اولین سؤالی که برای مهاجرین پیش میاد، همین سواله؛ واقعاً چرا باید از خط فرمان استفاده کنیم؟ دلایل زیادی برای این سؤال وجود داره؛ اما از منظر بنده ۴ علت اصلی وجود داره که به شکلی غیررسمی و بر پایه نظری کاملاً شخصی! از قرار زیر است:
الف) چندکاربره بودن (MultiUser) لینوکس
ب) قدرت و سرعت بیشتر خط فرمان نسبت به محیط گرافیکی (GUI)
ج) متن باز بودن (Open Source) لینوکس
د) وابستگیهای سلسله مراتبی لازمه برای نصب ابزارهای لینوکسی
اجازه بدید موارد فوق رو با ذکر مثال توضیح بدم.
مثال ۱: همانطور که میدونید سیستمعامل گنو/ لینوکس با همه چیز مانند فایل رفتار میکند. این امر باعث میشه که بتوان برای هر چیزی حق دسترسی (Permission) تعریف کرد. درواقع یکی از عمدهترین دلایل امنیت بالای لینوکس، همین امر است. فرض کنید کاربری داریم با شناسه (نام کاربری) User1 و این کاربر به فلان فایل دسترسی داشته باشه و بنا به تعریف اون دسترسی؛ میتونه یا اون فایل رو اجرا کنه؛ یعنی بخونه (Read)، و یا اینکه تغییرش بده؛ یعنی بنویسه (Write) و بسته به سطح دسترسی، در اصل این مجوزها، متفاوته. خب حال فرض کنید ما با نام کاربری User1 وارد محیط گرافیکی شدیم و نیاز داریم که فایلی رو تغییر بدیم. اما User1 اجازه تغییر این فایل رو نداره و اصطلاحاً پرمیژن Write برای حق دسترسی ایشون غیرفعاله و این اجازه صادر نشده. چاره چیه؟ Log Out و ورود دوباره با یوزری که دسترسی لازمه رو داره؟! آیا این یه کم سخت و ظالمانه نیست؟!
لینوکس اینجاست که با خط فرمان مشکل شما رو حل خواهد کرد. خیلی راحت و بدون خروج از محیط گرافیکیتون و با همان User1 میتونید در خط فرمان تغییر یوزر بدید و عملیات لازمه رو انجامش بدید. اینکه میگن لینوکس چندکاربره است؛ همینجا مشخص میشه. درواقع شما هم با کاربر User1 و هم با کاربری دیگر (بر فرض مثال root) بطور همزمان وارد شده (Log in) و از سیستم استفاده کردهاید.
مثال ۲: چندین ماه پیش سایت سیتو مسابقهای رو برگزار کرد تحت عنوان «چرا گنو/لینوکس را دوست دارم؟» که اگر اشتباه نکنم جناب «مجید کمالی» در وبلاگشون نوشته بودند که چون با خط فرمان میتونم۱۰۰۰ فایل rar دارای پسورد رو در یک حرکت Extract کنم. با توجه به این مثال متوجه خواهیم شد که کارهای بسیاری هست که در محیط گرافیکی ممکنه ساعتها وقت بگیرند ولی در خط فرمان، شاید به دقیقه هم نکشند. و به جرأت میتونم بگم که بسیاری از کارهاست که فقط و فقط از طریق خط فرمان قابل انجامه.
مثال ۳: همه این رو شنیدیم که سیستمعامل گنو/ لینوکس و همچنین اکثر نرمافزارهاش اوپنسورس (متنباز) هست. اما این یعنی چی؟ دوستانی که برنامهنویسی کردهاند، میدونند که یک برنامه حداقل دارای دو فایل تحت عنوان «فایل منبع» (Source Code File) و «فایل اجرایی» است. فایل منبع (سورس برنامه) محلی است که برنامهنویس کدها و دستورات رو در اون مینویسه و به عبارتی پشت صحنهای برای تولید یک برنامه است که توسط کارگردان آن، یعنی برنامهنویس مدیریت میشه؛ و قبل از تدوین قانون اوپنسورس، اکثر اوقات این فایل در اختیار مصرفکننده (کاربر) قرار نمیگرفت و فقط برنامهنویس به آن دسترسی داشت. و اما فایل اجرایی، فایلی است که جهت استفاده و معمولاً پس از دریافت هزینهای در اختیار کاربر قرار میگیره. مثل تمام نرمافزارهایی که در بازار وجود داره (چه ویندوزی و چه لینوکسی!) در گذشته فایل سورس در اختیار کاربر قرار نمیگرفت، اما در دنیای اوپنسورس کاربر حق داره فایل سورس رو داشته باشه و اگر قدرت برنامهنویسی داشت، اون رو به دلخواه خودش تغییر بده و فایل اجرایی رو مجدد منتشر (کامپایل) کنه. برای کامپایل (Compile) سورس یک برنامه، شما تنها راهی که دارید؛ استفاده از خط فرمان لینوکسه.
مثال ۴: فرض کنید شما میخواهید نرمافزاری رو روی سیستم عامل لینوکس خودتون نصب کنید. برای این کار شما دو راه دارید:
نصب استاتیک: در این شیوه فایل برنامه مورد نظر رو از اینترنت دانلود کرده و با دابل کلیک کردن بر روی آن به روش سنتی (روش ویندوزی!) اون نرمافزار رو نصب میکنید.
نصب پویا (Dynamic): در این شیوه نصب، همانطور که در آموزشهای قبلی نیز به آن اشاره شده بود؛ از طریق فرمانی شبیه به عبارت sudo apt-get install PackageName به کمک خط فرمان نصب و استفاده میکنید.
قبل از ذکر تفاوت این دو روش اجازه میخوام توضیحی کوتاه راجع به ساختار نرمافزاری لینوکس عرض کنم. نمیخوام زیاد تخصصی حرف بزنم و سعی خواهم کرد عمومیت مطلب رو حفظ کنم. لینوکس از بخشی به نام هسته (Kernel) و در کنار اون ابزارهای بسیاری که به این هسته به زبان خودمونی متصل شدهاند؛ تشکیل شده که بخشی از این ابزارها، همان نرمافزارهای ما هستند. درواقع ما در لینوکس و اوپنسورس داریم لگوبازی میکنیم. فلان نرمافزار یک تکه از لگو است که سوار بر هسته میشه! حال این قضیه برای خود نرمافزار هم صدق میکنه. یعنی یک نرمافزار هم به تکههای لگوی دیگری، تحت عنوان «کتابخانه» (Library) نیاز داره. فرض کنید این وابستگی در چندین و چند سطح تعمیم پیدا کنه. یعنی شما نهایتاً نیاز خواهید داشت که تمام تکههای لگوی یک نرمافزار یعنی کتابخانهها (Libraryها) را که اون نرمافزار به آن اصطلاحاً وابستگی (dependency) داره و همینطور تکههای لگوی دیگری که به تبع آن فلان کتابخانه به آن نیاز داره، میبایست بر روی سیستم نصب شوند. منظورم تسلسل نیازمندیها است.
نتیجتاً به نظر شما یک نرمافزار میبایست استاتیک نصب شود یا دینامیک؟! عرض خواهم کرد!
در نصب بسته استاتیک تمامی dependencyها بصورت یکجا در قالب یک فایل نصبی جهت استفاده سنتی در نصب نرمافزار در اختیار شما قرار داده خواهد شد. یعنی شما با نصب این فایل تمامی کتابخانههای لازمه رو به همراه آن نصب خواهید کرد. خب! اشکال این کجاست؟! نصب کتابخانههای تکراری در درازمدت! درواقع کتابخانهها و وابستگیهای بیشماری ممکنه مکرراً نصب شده باشند بطوریکه بسیاری در نرمافزارهای شما مشترکند. این مسأله باعث میشه که در درازمدت فضای زیادی از هارد شما بی علت پر بشه و حتی در اجرای نرمافزارها، سیستم با شما به کندی برخورد کنه! اما در نصب پویا، خط فرمان dependencyها رو ابتدا چک کرده و در صورت تکراری بودن آن قطعه از لگو، آن را نصب نخواهد کرد و کتابخانهای را نصب خواهد کرد که قبلاً بر روی سیستم وجود نداشته و نصب نشده. در اصل خط فرمان از تکرار مکررات و پایین آمدن سرعت سیستم و از پر کردن بی علت فضای هارد، جلوگیری خواهد کرد.
جمعبندی
امیدوارم مثالها در بیان این نکته که همین خط فرمان لینوکس است که آن را تا این حد در بین سیستمهای عامل قدرتمند ساخته، به اندازه کافی واضح بوده باشند و درنهایت به ذکر این جمله بسنده میکنم که:
«تمامی راهها در لینوکس، به خط فرمان ختم میشوند.»