ورود به دنیای گنو/لینوکس/نسخه چاپی
فصل ۱
خوشآمدید
قبل از عنوان هر مطلبی لازم میدانم ورود شما را به دنیای بسیار زیبا و صد البته مهیج گنو/لینوکس تبریک بگویم... تصمیم بر این است این کتاب، کتاب جامعی حول بحث های لینوکسی باشد و سعی خواهد شد که با گفتاری ساده و تجربی زمینه ورود شما خواننده عزیز به دنیای گنو/لینوکس و استفاده از آن مهیا شود.
مروری بر تاریخچه نرمافزارهای آزاد و گنو/لینوکس
تاریخچهٔ نرمافزارهای آزاد[۱] جزئی جداییناپذیر از مفهوم نرمافزار است زیرا در ابتدا تمامی نرمافزارها، آزاد بودند و بعدها مفهوم نرمافزارهای اختصاصی به وجود آمد. دربارهٔ تفکیک این دو مفهوم از یکدیگر و شرح تمایز آنها کمی جلوتر بهطور مفصل بحث خواهد شد. قبل از بررسی مفاهیم، فلسفه و سیاستها، لازم میدانم در این بین تعریفی از کد منبع داشته باشم.
هنگامی که یک نرمافزار جهت یک کاربردی خاص تهیه میشود آن برنامه کاربردی توسط یکی از زبانهای برنامهنویسی نزدیک به زبان انسان نوشته میشود. کد برنامهٔ نوشته شده با این زبانها که به آن کد منبع گفته میشود توسط کامپایلر و لینکر به کدهای صفرویک تبدیل میشود که قابل فهم و اجرا برای ماشین است.
تا اواسط دههٔ شصت میلادی نرمافزارها به صورت آزاد و مجانی به همراه کامپیوترها ارائه میشد و سود تولیدکنندگان تنها از راه سختافزار بود. کدهای منبع نیز آزادانه در اختیار برنامهنویسان بود، اما از سال ۱۹۶۵ شرکت آیبیام[۲] از ارائه برخی از کدهای منبع سیستمعاملهای خود جلوگیری کرد و بعدها برنامهنویسان برای کسب درآمد از نرمافزار با عقد قراردادهایی حق امتیاز انتقال نرمافزار را از یک کاربر به کاربر دیگر محدود کردند که ما امروز با بسیاری از نمونههای آن روبه رو هستیم. رفته رفته کدهای منبع به سریترین اسرار تجاری شرکتها و سرمایه شرکتهای تجاری بدل شد.
بدین شکل استفادهٔ آزادانه از کدهای منبع میسر نبود، نرمافزارها پشت درهای بسته تولید و توسعه پیدا میکردند و توسعهدهندگان نیز به دلیل قراردادهای مربوط به عدم افشای اطلاعات نمیتوانستند کدهای خود را در اختیار دیگران قرار دهند. با این روند با مواجهشدن مشکلات نرمافزاری و یا داشتن نیازهای خاص باید به تولید کنندگان مراجعه میشد که این یعنی کسب درآمد و کنترل کامل جامعهٔ کاربران از سوی شرکتها(!) در اوایل دههٔ ۸۰ میلادی در آزمایشگاه هوش مصنوعی دانشگاه امآیتی[۳] شرکتی با نام سیمبولیک تأسیس گردید. این شرکت کدی را که آزادانه در اختیار عموم قرار داشت اختصاصی اعلام کرد و فرهنگ اشتراک نرمافزار را که ریشه در همان دانشگاه داشت را محو کرد.
در سال ۱۹۸۳ ریچارد استالمن به دلیل نارضایتی از وضع موجود کار خود را در امآیتی رها کرد و یک پروژهٔ متنباز و آزاد را به نام گنو آغاز کرد. GNU مخفف بازگشتی GNU is not Unix است. این پروژه امکان ایجاد یک سیستمعامل مبتنی بر یونیکس را فراهم میکرد، دلیل انتخاب یونیکس در ساختار و امنیت بی همتا بود اما به دلیل قیمت بیسار گزاف آن هیچ کاربر خانگی قادر به تهیه و استفاده از آن نبود.
هدف استالمن به اشتراکگذاری نرمافزار بود و همکاری آزادانه برنامهنویسان مانند اوایل دههٔ ۷۰ بود که در این بین همه چیز به نفع کاربر پایان میافت. به عقیدهٔ طراح گنو هر کس باید آزادانه و بدون محدودیت بتواند از یک نرمافزار استفاده کند، آزادی در حیطه نرمافزار در ادامه مفصلاً شرح داده خواهد شد.
این تفکر توسط استالمن و همفکرانش در بنیاد نرمافزارهای آزاد[۴] که بدین منظور توسط استالمن تأسیس شد تا به امروز سرسختانه پیگیری میشود. استالمن مجوز عمومی گنو معروف به GPL را برای مقابله با سیاست نرمافزارهای اختصاصی و تضمین آزادی نرمافزار تدوین کرد، این بدین معنی است که هر نرمافزاری تحت این مجوز انتشار میابد باید ۴ آزادی اساسی را رعایت کند که در ادامه شرح داده میشود.
تا سال ۱۹۹۱ بسیاری از بخشهای گنو همچون کتابخانهها، کامپایلرها و ... کامل شده بود اما هنوز کمبود یک بخش اساسی به نام هسته برای نکمیل یک سیستمعامل منطبق با یونیکس حس میشد. هر چند پروژه موسوم به گنو هرد[۵] که بازنویسی کل هستهٔ یونیکس به صورت کاملاً شئگرا بود پیش میرفت اما تا کاملشدن آن زمان زیادی باقی بود.
در در ۲۵ آگوست ۱۹۹۱، یک دانشجوی سال دوم کامپیونر دانشگاه هلسینکی به نام لینوس توروالدز اعلام کرد که یک هستهٔ آزمایشی کوچک شبیه به مینیکس[۶] اندرو تننبام نوشتهاست که بر روی پردازندههای ۳۸۶ کار میکرد. (مینیکس یک هسته کوچک آموزشی بود که در دانشگاهها توسط دانشجویان مورد برسی قرار میگرفت و هر کس که کتاب سیستمعامل تاننباوم این پروفسور هلندی را داشت به ۱۲۰۰۰ خط کد C و اسمبلی آن نیز دسترسی داشت...) هستهٔ کوچک توروادز بعدها لینوکس نام گرفت. لینوکس نسخهٔ ۰٫۰۱ در اواسط سپتامبر ۱۹۹۱ منتشر شد و نسخهٔ ۰٫۰۲ در پنجم اکتبر، تا دسامبر، لینوکس به نسخه ۰٫۱۰ رسید و در نهایت با راهیافتن به بنیاد نرمافزارهای آزاد و کار کردن توسعه دهندگان گنو بر روی آن لینوکس تحت مجوز GPL قرار گرفت و در قلب پروژه گنو به عنوان هسته قرار گرفت و سیسستم عامل آزاد و متن باز گنو/لینوکس منتشر شد.
باز هم تاکید میشود که لینوکس هستهٔ سیستمعامل است که وظیفه کنترل سختافزار و ارتباط با آن را بر عهده دارد و به خودی خود سیستمعامل قلمداد نمیشود. نکته اینجاست که کاربران به اختصار گنو/لینوکس را لینوکس میخوانند. در صورت علاقه میتوانید مطالب بیشتری در این زمینه در مقالهٔ بحث نامگذاری گنو/لینوکس در ویکیپدیای فارسی مطالعه کنید.
بررسی مفاهیم و فلسفه نرمافزارهای آزاد
نرمافزار آزاد، آزادی انسان را در حیطهٔ استفاده، توسعه، توزیع و تکثیر به رسمیت میشناسد. در یک نگاه کلی از حیث آزادی، نرمافزار به دو طبقهٔ آزاد و غیر آزاد تقسیم میشوند، عموماً از نرمافزار غیر آزاد با عنوان نرمافزار مالکیتی نیز یاد میشود.
در نرمافزار مالکیتی کد منبع در دسترس عموم قرار ندارد و بهعنوان اسرار تجاری آن شرکت حفظ میشود همچنین با توسعهدهندگان آن نرمافزار قراردادی مبنی بر حفظ این اسرار بسته میشود و همچنین هر فرد یا شرکتی که نرمافزار را تهیه میکند بر اساس قوانین کپی و مجوز آن محصول معمولاً حق فقط یک نصب به ازای هر خرید را دارد. این بدان معنی است که خریدار آن محصول، حق تکثیر و توزیع را ندارد همچنین با بستهبودن کد آن یعنی در دسترسنبودن کد منبع، فرد امکان اطلاع از چگونگی کارکرد سیستم را دارا نیست و بر اساس سیاستهای تولیدکننده محصول، کاربر به یک مصرفکننده تبدیل میشود. مفاهیم آزادی در حیطهٔ نرمافزار تطبیق و شباهت جالبی به آزادی انسان در دیگر حوزهها دارد.
همانطور که پیش تر نیز اشاره شد در مقابل نرمافزار مالکیتی نرمافزار آزاد وجود دارند که چهار آزادی اساسی را به ارمغان میآورند، باید به این مسئله توجه کافی داشت که کلمهٔ Free در اینگونه نرمافزار به معنی مجانیبودن آن نیست و این برداشت اشتباه به دلیل وجود یک کلمهٔ Free برای دو مفهوم آزادی و مجانی در فرهنگ لغت انگلیسی است. ممکن است شما بتوانید یک نرمافزار آزاد را به صورت مجانی نیز تهیه کنید اما الزاماً همیشه اینطور نیست و گاهی پیش میآید برای استفاده از اینگونه نرمافزار پولی نیز بپردازید اما اغلب این نرمافزارها به صورت رایگان نیز قابل دانلود است. آزادی در نرمافزار آزاد به شرح زیر است:
- اجرای آزاد:
- کاربر بتواند برنامه را به هر قصدی اجرا کند.
- مطالعه و تغییر نرمافزار:
- بررسی چگونگی کارکرد نرمافزار و در صورت لزوم تغییر آن که پیش شرط آن دسترسی به کد منبع است.
- توزیع:
- حق کپی و توزیع اصل یا نسخه تغییر یافته نرمافزار به تعداد نامحدود.
- انتشار:
- انتشار نسخه تغییر یافته نرمافزار برای استفادهٔ عموم، که البته این انتشار نیز باید بر پایه نرمافزار آزاد باشد.
این آزادیها به ترتیب از صفر شمرده میشوند، هر نرمافزاری که تحت مجوزهای نرمافزار آزاد منتشر میشود باید این آزادیها را شامل شود و این حقوق را رعایت کند. جالب اینجاست که نرمافزاری که فقط کد منبع آنها در دسترس باشد نیز در زمرهٔ نرمافزار آزاد قرار نمیگیرد بلکه باید تمامی آزادیهای ذکر شده را رعایت کند. همانطور که پیشتر نیز اشاره شد معروفترین مجوز نرمافزار آزاد جیپیال[۷] است اما علاوه بر این مجوزهای دیگری نیز وجود دارند همچون جیافدیال[۸] که مکمل جیپیال است. به این مجوزها کپیلفت[۹] نیز گفته میشود که در نقطهٔ مقابل سیاستهای کپیرایت[۱۰] قرار دارد.
تعیینکنندهٔ سیاست این آزادیها بنیاد نرمافزار آزاد است و البته در راس آن ریچارد استالمن که پایهگذار بنیاد نرمافزار آزاد است.
در این بین پیشگامان متنباز[۱۱] نیز با رهبری اریک ریموند وجود دارد که ظرافتها و حساسیتهای نرمافزار آزاد را ندارد این فلسفه کمتر به مسائل اخلاقی تاکید دارد و ایجاد یک نرمافزار قابل اطمینان و بازمتن را دنبال میکند ولو در این بین سود شرکتهای تجاری در میان باشد. میتوان گفت این ریموند بود که حضور شرکتهای تجاری را در این خیل عظیم اضافه کرد که باعث پدیدآمدن نسخههای تجاری نرمافزار بازمتن شد.
هرچند در فلسفه و سیاستها این دو با هم متفاوت هستند اما یک هدف و دیدگاه مشترک دارند که آن هم مقابله با نرمافزار مالکیتی و مجوزهای آن است؛ میتوان این دو جنبش را دو حزب با یک جهتگیری دانست.
در نهایت به صورت خلاصه از نرمافزار آزاد میتوان با عنوان فرهنگ به اشتراکگذاری نرمافزار یاد کرد.
مفهوم توزیع
و اما توزیع چیست؟
همانطور که میدانید، سیستمعامل گنو/لینوکس یک سیستمعامل کاملاً آزاد و رایگان است. گنو/لینوکس را هر کس میتواند جمعآوری کرده و به نام خودش به رایگان عرضه کرده و به فروش برساند. علت چیست؟ سسیستمعامل گنو/لینوکس از بخشهای بسیار زیادی تشکیلشده که هر بخش آن توسط عده ای خاص توسعه مییابد که هر یک در سمتی از جهان قرار دارند. البته این نکته نقطه قوت آن به شمار میرود.
در صورتی که شما به عنوان یک کاربر بخواهید یک گنو/لینوکس داشته باشید، باید تمام این قطعات را جداگانه جمع آوری کرده و پس از کامپایل استفاده نمایید. درصد کمی از مردم این امکان و توانایی را دارند بنابراین افراد و شرکت هایی اقدام به جمع آوری این قطعات مجزا و قرار دادن آنها کنار هم کردهاند و به علاوه برای این مجموعه برنامههای نصب، مدیریت سیستم و مدیریت بستههای نرم افزاری نوشتهاند تا کار نصب و مدیریت سیستم را برای کاربران آسان کنند. به این مجموعهها که توسط افراد و شرکتها گردآوری شدهاست، توزیع[۱۲] گفته میشود که با نامهای مختلف و بستهبندی و پشتیبانیهای گوناگون در قالب تجاری و غیر تجاری در دسترس عموم قرار میگیرد.
یکی از سوالاتی که اغلب توسط کاربرانی که مایل به مهاجرت به سیستم عامل گنو/لینوکس هستند مطرح میشود، انتخاب توزیع است. چرا انواع مختلفی از گنو/لینوکس وجود دارد؟! کدام یک مناسبتر است؟
پاسخ این جا است، هر یک از توزیعهای گنو/لینوکس دارای ویژگیهای خاصی است که آن را از دیگر توزیعها متمایز میکند. مثلاً ممکن است برنامههای نصب آنها با هم تفاوت داشته باشند، البته اصول نصب در همه گنو/لینوکسها یکسان است اما ممکن است ابزارهای گرافیکی مدیریت و نصب در آنها متفاوت باشد.
ممکن است نسخه ی برنامههایی که با یک توزیع خاص ارائه میشوند جدیدتر یا قدیمی تر باشند، محل فایلهای پیکربندی آنها متفاوت باشد، پوسته و رابط کاربری آنها متفاوت باشد و یا به طور کل برای انجام امور خاصی طراحی شده باشند. به طور مثال ممکن است یک توزیع مخصوص سرویسدهنده یا ایستگاه کاری، کامپیوترهای قدیمی، مدیریت شبکه و دیوار آتش، نابینایان و ... باشد.
بنابراین هر فرد یا گروهی میتواند توزیع مخصوص خود را ارائه نماید. توزیعها به دو صورت تجاری و رایگان ارائه میشوند یعنی در ازای دریافت یا استفاده از خدمات پشتیبانی برخی از آنها باید پول پرداخت شود و برخی از آنها رایگان هستند. البته شما میتوانید یک توزیع گنو/لینوکس را چه رایگان و چه تجاری به تعداد نامحدود کپی و توزیع نمایید، همچنین اکثر توزیعهای غیر تجاری و برخی از توزیع هایتجاری بهصورت رایگان از سایتهای مربوطه قابل دانلود هستند.
شما میتوانید بر روی توزیعها مطالعه و برسی کنید و نحوه عملکرد آنها را به خوبی درک کنید زیرا در دنیای گنو/لینوکس هیچ مسئله پنهانی وجود ندارد، هیچ چیز از دید کاربر مخفی نیست. کاربران حتی به راحتی از حفرههای امنیتی سیستم توسط توسعهدهندگان با خبر میشوند که در این امر توزیع دبیان بی همتاست. شما هم میتوانید تا توزیع خود را ایجاد و حتی منتشر کنید همانطور که بومیسازی گنو/لینوکس را در اغلب ملل و حتی کشور عزیزمان ایران نیز شاهد بودهایم. بهترین راهنما برای اینکار کتاب LFSیا Linux From Scratch است. (اسامی برخی از توزیعهای فارسی: گنو/لینوکس شریف، شبدیکس، پارسیکیس و سیستم عامل ملی)، این مفهوم آزادی در گنو/لینوکس است و این فرهنگی است به نام نرمافزار آزاد، که اغلب از این دنیای بزرگ در اطرافشان بیخبرند.
در صورتی که گنو/لینوکس را به خوبی فرا بگیرید، مهم نیست از چه توزیعی استفاده کنید چون این امر تا حدی بستگی به سلیقه فرد دارد هر چند در انتخاب توزیع باید نوع کاربرد آن را در نظر بگیرید. این نکته حائز اهمیت است که همه توزیعها ذاتا شبه به یکدیگر هستند و در جزئیات با هم متفاوتند، این موضوع به این معنی است که تمام اموری که در یک توزیع انجام میدهید در دیگر توزیعها هم قابل انجام است ولؤ با اندکی تفاوت...
شما نیز میتوانید با استفاده و امتحان توزیعهای مختلف توزیع مورد علاقه خود را بیا بید. در ادامه نام چند توزیع محبوب آمدهاست.
- پرطرفدارترین نسخهٔ لینوکس برای حرفهایهای Linux/Unixو System Administratorهاست که تجاری نیست و توسط کاربرهای خود اداره میشود. کمی جلوتر درباره برتریهای دبیان مفصلاً بحث خواهد شد.
- هم بهعنوان کارساز و هم بهعنوان ایستگاه کاری با تنطیم بستههای نرمافزاری قابل استفادهاست و همچنین یکی از توزیعهای پرفروش و البته تجاری. (تجاریبودن توزیعها به معنی وجود یک شرکت سازنده و سیاستهای آن مجموعهٔ پشت توزیع است)
- با نصب و کاربری ساده برای تازه کارها مبتنی بر دبیان.
- منتخب بهترین لینوکس سال توسط مردم، مبتنی بر دبیان.
- توزیعی محبوب با کاربری ساده مبتنی بر توریع اسلکور.
توریع ساینتیفیک لینوکس[۱۸]
- درست شده توسط آزمایشگاه فرمی و سرن، مبتنی بر ردهت انترپرایز لینوکس ولی برخلاف آن، کاملاً رایگان.
علاوه بر این توزیعهای بسیاری وجود دارند که هر یک طرفدار و کاربران خود را دارند. در DistroWatch.com میتوانید فهرست توزیعهای مختلف را ببینید و آنها را دریافت کنید.
توزیع دبیان
در این کتاب به برسی مفاهیم گنو/لینوکس تحت توزیع دبیان پرداخته میشود. و اما دلیل انتخاب دبیان؟! چرا دبیان را انتخاب کنیم؟
پروژهٔ دبیان کمی پس از تولد گنو/لینوکس، در آگوست ۱۹۹۳ توسط یان مورداک[۱۹] آغاز شد و هم اکنون توسط گروهی داوطلب از کاربران خودش اداره میشود. این گروه با تمام توان سعی دارند سیستمعاملی کاملاً آزاد تولید کنند که در این امر نیز بسیار موفق بودهاند. هر چند به نیاز برخی کاربران خود که نیازمند استفاده از نرمافزارهای غیر آزاد هستند احترام گذاشته و این بستههای نرمافزاری را در مخازنی جدا ارائه میدهند، دبیان یک توزیع آزاد واقعی است و امنیت و استواری آن مثالزدنی و بیهمتا است. برخی دیگر از دلایل انتخاب دبیان عبارتند از:
بسیاری از موسسات و ادارات کشورهای مختلف از دبیان استفاده میکنند که فهرست آنها در این نشانی: www.debian.org/users قابل مشاهدهاست.
پستهای الکترونیکی که به فهرست پستی دبیان ارسال میشود در کوتاه ترین زمان پاسخ دادخ میشوند. برای مشاهده و عضویت در این فهرستها میتوانید به این نشانی: www.debian.org/MailingLists مراجعه کنید.
دبیان دارای یکی از بهترین سیستم مدیریت بستههای نرمافزاری است، این قابلیت به تنهایی برتری دبیان را در برابر دیگر توزیعها اثبات میکند. با این ابزار تنومند که APT نام دارد مشکل وابستگی[۲۰]های بستههای نرمافزاری که در توزیعهای مبتنی بر ردهت (RPM) دیده میشود کاملاً حل شدهاست.
با وجود APT انجام ارتقاهای نرمافزاری بسیار تسهیل یافته بهطوری که با یک فرمان میتوان سیستمعامل را به نسخهٔ جدیدتر ارتقا داد. دبیان مفهوم یک بار نصب برای همیشه را عملی میکند. در مورد APT در فصول آینده مفصلاً بحث خواهد شد.
پایداری سیستمهای دبیان بیهمتاست، سیستمهای دبیان ماهها بدون نیاز به راهاندازی مجدد کار میکنند و دلیل متوقفشدن آن قطع برق یا ارتقاهای سختافزاری است.
پیگیری اشکالات نرمافزارها و حفرههای امنیتی دبیان از نشانی bugs.debian.org برای عموم آزاد و قابل دسترس است. دبیان حتی اشکالات موجود را از دید کاربر پنهان نمیسارد بلکه با گزارش اشکالات میتوانید به برطرفسازی آن توسط تیم توسعه دبیان سرعت ببخشید.
دبیان دارای امکانات رمزنگاری برای نشتهای امن، صدها ابزار توسعهٔ نرمافزار و زبانهای برنامهنویسی است و در نهایت مسیر دبیان توسط نیاز کاربران خود و فلسفهٔ نرمافزارهای آزاد مشخص و هدایت میشود.
این موارد برخی از دلایل انتخاب دبیان در بین توزیعهای گنو/لینوکس بود اما در مقایسه با دیگر سیستمعاملها همچون ویندوز میتوان صدها برتری و مزیت ذکر کرد که از حوصلهٔ این کتاب خارج است.
آشنایی با مفاهیم اولیه در گنو/لینوکس
در این بخش سعی دارم، تعاریف کلی و مفاهیم مقدماتی، که هر کاربر تازه وارد به دنیای گنو/لینوکس در ابتدا با آنها برخورد و تعامل خواهد داشت را به طور خلاصه شرح دهم. آشنایی با این مفاهیم میتواند تا حد زیادی راهنمای کاربرانی باشد که از سیستمعاملهای دیگر مانند مایکروسافت ویندوز به گنو/لینوکس مهاجرت میکنند.
هستهٔ لینوکس
هستهٔ لینوکس بخش مرکزی تشکیل دهنده سیستم عامل گنو/لینوکس است. بخشی که به طور مستقیم با سخت افزار سیستم شما در ارتباط بوده و امکان استفاده از قابلیتهای سخت افزار را برای کاربر فراهم میکند. هسته لینوکس نخستین بار توسط لینوس توروالدز دانشجوی فنلاندی در سال ۱۹۹۱ منتشر شد و همچنان توسط برنامه نویسان بسیاری و البته در راس آنها توروالدز با سرعت توسعه میابد.
ابزارهای گنو
ابزارهای ایجاد شده توسط پروژه گنو هستند که با ترکیب هسته لینوکس تشکیل یک سیستم عامل کامل موسوم به گنو/لینوکس را میدهند. برخی از این ابزارها عبارتند از کتابخانهٔ زبان C، مجموعه کامپایلرهای GCC، ویرایشگر متن، پوسته فرمان یا مفسر خط فرمان، رابط کاربری و... این ابزارها توسط پروژه گنو که در سال ۱۹۸۳ توسط ریچارد استالمن آغازشد، و همچنان نیز با قدرت توسعه پیدا میکنند.
پوسته فرمان
پوسته فرمان یا خط فرمان مهم ترین ویژگی مشترک بین سیستم عاملهای سازگار با یونیکس و البته گنو/لینوکس است. پوسته فرمان توسط ابزارهایی موسوم به مفسر خط فرمان کنترل میشوند. در گنو/لینوکس مفسر پیشگزیده خط فرمان Bash است که از ابزارهای توسعه یافته توسط پروژه گنو است. میتوان گفت با وجود خط فرمان قدرتمند و قابل انعطاف گنو/لینوکس تمامی کارهایی را که با استفاده از ابزارهای گرافیکی انجام میدهید، از طریق پوسته فرمان نیز قابل انجام هستند. کاربران حرفهای ترجیح میدهند بسیاری از کارهای خود را از طریق پوسته فرمان انجام دهند. زیراامکانات پوسته فرمان آنها را قادر میسازد تا این کارها را سریعتر و راحت تر انجام دهند.
محیط X
محیط X یا X Window ایجاد کننده زیرساختهای لازم برای برنامههای با رابط کاربری گرافیکی و میزکارهای مختلف است. مثلا این X است که نحوه کشیدن پنجرهها برروی صفحه نمایش و یا عملیات ماوس را بر روی پنجرهها در سطوح پایین کنترل میکند. با استفاده از امکانات X است که میزکارهای مختلف مانند GNOME و KDE میتوانند کار کنند. X برای نخستین بار در سال ۱۹۸۴ در دانشگاه MIT ایجاد شد. توزیعهای جدید گنو/لینوکس از سیستم X.Org که نواده سیستم X اولیهاست استفاده میکنند.
میزکارهای گرافیکی
همانطور که اشاره شد، میزکارهای گرافیکی رابطهای کاربری هستند که از آن برای تعامل گرافیکی با سیستم استفاده میشود. تعداد زیادی میزکار گرافیکی برای گنو/لینوکس وجود دارد که مهمترین آنها عبارتند از GNOME، KDE، xFCE و IceWM.
ساختار فایل سیستم
سیستم فایل هر کامپیوتر، امکان ذخیره سازی فایلها و اطلاعات را روی آن فراهم میسازد. میتوان گفت تا قبل از اینکه سیستم عامل، سیستم فایل را روی هر نوع ابزار ذخیره سازی مانند فلاپی دیسکها، دیسکهای سخت، درایوهای CD-ROM، درایوهای Zip و ... تشکیل ندهد آن ابزار قابل استفاده نیست. و یا به طور مثال وقتی میخواهید فایل یا سندی را بر روی سیستم ذخیره کنید این سیستم فایل است که تعیین میکند آن فایل کجا و چگونه ذخیره شود... بر خلاف مایکروسافت ویندوز که تنها از دو نوع فایل سیستم NTFS , FAT پشتیبانی میکند، سیستمفایلهای گوناگونی برای سیستم عاملهای مبتنی بر یونیکس و گنو/لینوکس ارائه شدهاند که برخی از آنها عبارتند ext4 ،ext3 ،ext2 ،jfs ،xfs ،ReiserFS و... این سیستم فایلها در جزئیات فنی دارای تفاوتهایی با هم هستند ولی از نظر ساختاری کهایجاد میکنند مشابه بوده و تفاوت چندانی باهم ندارند. در دنیای یونیکس و گنو/لینوکس، ساختار پیادهسازی سیستم فایل همانند یک درخت وارونه دارای شاخههای گوناگون است. مفهوم درایوهایی مانند C، D که در سیستم عاملهایی مانند داس و ویندوز با آنها برخورد داشتهاید، دراینجا کاملاً بیمعنی هستند. تمامی پارتیشنها در محلهایی در زیر شاخههایی درخت متصل (Mount) میشوند. در بالاترین بخش این درخت ریشه یا / قرار دارد و شاخههای بعدی در زیر ریشه ایجاد شدهاند. اکنون به برسی برخی از دایرکتوری و یا شاخههای مهم در گنو/لینوکس میپردازیم، لازم به ذکر است هر یک از شاخهها میتوانند در صورت نیاز در پارتیشنهای جداگانهای متصل شوند.
- /bin
- در این شاخه، دستورات سیستم عامل که برای تمام کاربران قابل دستیابی هستند قرار میگیرند.
- /boot
- این شاخه که میتواند در یک پارتیشن جداگانه قرار گرفته و به پوشهٔ boot متصل شده شود، حاوی برنامه راه انداز بوت سیستمعامل و فایلهای پیکربندی مدیر بوت است. دو مدیر بوت محبوب در گنو/لینوکس گراب و لیلو نام دارند که مدیر بوت پیش فرض در دبیان گراب است. مدیر بوت غالباً در ابتدایی ترین قسمت دیسک سخت، یعنی سکتور صفرم مینشیند و عملکرد آن بر خلاف مدیر بوت مایکروسافت ویندوز بدین شکل است که به صورت کاملاً هوشمندانه تمامی سیستم عاملهای نصب شده بر روی سیستم را شناسایی میکند و با انتخاب یکی از آنها فایلهای راه انداز آن سیستمعامل را یافته و سیستم را بارگذاری میکند.
- /dev
- محل قرارگیری فایلهای دسترسی ابزارهای سخت افزاری است. هر وسیله (Device) سیستم، تمام پورتها، پارتیشنها، سختافزارها و... در اینجا دارای حداقل یک فایل هستند. برای مثال فایل /dev/fd نشان دهنده فلاپی درایو سیستم است. بسیاری از برنامههای کاربردی و حتی خود کاربر نیز میتوانند از این فایلهای دسترسی برای خواندن و نوشتن دادهها بر روی ابزار مورد نظرشان استفاده کنند. مثلاً یک برنامه کاربردی فایل /dev/cdrom را باز کرده و در آن مینویسد، در حقیقت اطلاعات روی دیسکی که درون درایو قرار دارد، نوشته خواهد شد و /dev/cdrom تنها یک فایل دسترسی است که میتواند در یک دایرکتوری و یا نقطه اتصال، متصل شود. لازم به ذکر است که همه چیز در دنیای گنو/لینوکس یک فایل است و به همه متعلقات سیستم اعم از سرویسهای سیستمی، سخت افزارها، درگاهها، سرویسهای مختص سرویس دهنده، فایلهای پیکربندی... به دید یک فایل نگاه میشود و این استراتژی لینوکسی کاربر را قادر میسازد تا در بدترین شرایط تنها با یک ویرایشگر ساده متن، گنو/لینوکس خود را تعمیر و یا تنظیم کند. البته نهراسید تمامی این امور در محیط گرافیکی نیز قابل انجام است.
- /etc
- در این شاخه فایلهای پیکربندی سرویس دهنده، برنامههای نصب شده برروی سیستم و برخی فایلهای سیستمی دیگر قرارمیگیرند. به طور مثال فایل پیکربندی سرویس دهنده وب آپاچی در سیستمهای مبتنی بر دبیان در /etc/apache/http.conf قرار دارد.
- /home
- در این شاخه دایرکتوریهای خانگی کاربران سیستم و اطلاعات آنها قرار میگیرد، یعنی به ازای هر کاربر یک داریکتوری به نام کاربر در این شاخه ساخته میشود که میتواند اطلاعات خود را در آنجا نگهداری کند. با تنطیم ساختار مجوزهای دسترسی تنها خود کاربر است که به این دایرکتوری و محتویات آن دسترسی دارد و دیگر کاربران مجاز به دسترسی نخواهند بود. بهتر است این شاخه در یک پارتیشن جداگانه قرار گرفته و متصل شود زیرا این کار حفاظت از دادههای کاربران را بالاتر خواهد برد و ضمنا در صورت نیاز به فرمت و نصب مجدد سیستم، اطلاعات کاربران و تنظیمات شخصی آنها دست نخورده باقی خواهند ماندو پس از نصب مجدد، اطلاعات آنها بدون هیچ گونه تغیری قابل دسترس است.
- /lib
- این شاخه همانطور که از نام آن نیز پیداست، محل قرارگیری فایلهای کتابخانهای برنامهها است. این کتابخانهها توسط برنامههای کاربردی و ابزارهای برنامه نویسی به کار گرفته میشوند.
- /mnt
- این شاخه محل اتصال سنتی و موقتی دستگاههایی مانند Flash Memory ،Camera ،CD-ROM ... است که کاربر موقتاً میخواهد آن را به سیستم فایل متصل کند، همچنین پارتیشنهای دیسک سخت و اشتراکات شبکه را نیز میتوانید در این شاخه متصل نمایید. البته برای استفاده از این دستگاهها و مسیرها نیازی به انجام این مراحل نیست زیرا گنو/لینوکس در هربار بارگذاری با اجرای دستور mount -a به صورت خودکار تمامی این وسیلهها را در نقاط مشخص متصل میکند. کاربرد این شاخه همانطور که گفته شد برای زمانی است که کاربر نیاز به محلی برای اتصال موقت وسیلهای داشته باشد.
- /media
- این شاخه مسیر پیش فرض اتصال برخی از دستگاهها مانند Flash Memory ،Camera ... است که گنو/لینوکس به صورت خودکار آنها را متصل میکند. البته در توزیعهای مختلف کمی تفاوت در این موارد یافت میشود، برای حل اینگونه تفاوتها استانداردی با نام FHS تدوین و منتشر شد تا شرکتهای سازنده توزیعهای مختلف گنو/لینوکس با رعایت این نکات همگام شوند. این استاندارد باعث میشود وطیفه و کاربرد هر شاخه مشخص و واضح شود، نرم افزارها راحت تر مسیر فایلهای مهم و مورد نیاز خود را بیابند و... توزیع دبیان کاملا با این استاندارد منطبق و همسو است. به طور مثال در سیستمهای مبتنی بر دبیان بنا به استاندارد، درایوهای Floppy و CD-ROM در شاخههای Floppy و CD-Rom که در زیر ریشه قرار دارند، متصل میشوند. اتصال و برداشتن اتصال پارتیشنها و درایوها با استفاده از دستور mount صورت میگیرد که در بخشهای آتی آن را فرا خواهید گرفت.
- /proc
- این شاخه یک سیستم فایل مجازی است که برخی اطلاعات مربوط به سیستم و هسته از آن قابل دستیابی است. مثلاً فایل version در این شاخهٔ حاوی اطلاعاتی مانند نام توزیع و مشخصات هسته سیستم عامل مانند نسخهٔ آن و ... است.
- /sbin
- دستورات و برنامههای مدیریتی سیستم در این شاخه قرار میگیرند و مخصوص کاربر یا کاربر ریشهٔ Super User) roo) است. یعنی فقط کاربر ریشه به این دستورات دسترسی دارد. مفاهیم کاربر ریشه و سطح دسترسی آن به سیستم در ادامه مفصلاً برسی خواهد شد.
- /tmp
- محل قرارگیری برخی فایلهای موقتی برنامههای کاربردی است.
- /usr
- بسیاری از برنامههای کاربردی در این شاخه نصب میشوند، همچنین برخی دستورات و برنامههای مدیریتی نیز در مسیرهای /usr/bin و /usr/sbin قرار میگیرند.
- /var
- این شاخه که معمولا در کامپیوترهای سرویس دهنده در یک پارتیشن جداگانه قرار میگیرد، مخصوص برنامه سرویس دهندههایی مانند وب، ،Telnet،FTP بانکهای اطلاعاتی و... است. به طور مثال فایلهای مربوط به یک وب سایت در /var/www قرار میگیرند. به دلیل این که در برخی از حملات DOS دیسک سخت سیستم با فایلهای اضافه پر میشود، این شاخه را در یک پارتیشن جداگانه قرار میدهند که در صورت حمله و پرشدن احتمالی دیسک سخت، کل سیستم عامل دچار وقفه نگردد و آسیب به همان قسمت محدود شود. همانطور که بالاتر نیز ذکر شد تمامی شاخههایی که توضیح داده شد میتوانند در پارتیشنهای جداگانه قرار داده شوند، اما این امر الزامی نیست.
پارتیشنها
در سیستم فایل سیستم عاملهای مبتنی بر گنو/لینوکس و یونیکس، دیسکهای سخت میتوانند پارتیشنهای متعددی داشته باشند. در این صورت هر پارتیشن دارای یک نقطه اتصال یا mount pointاست که در آن نقطه به درخت سیستم فایل متصل میشود. اما در این بین لازم میدانم شما را با نحوه نام گذاری دیسکهای سخت و پارتیشن آنها در گنو/لینوکس آشنا کنم.
روند نام گذاری بدین شکل است که دیسکهای سخت SATA با نام sd و IDE نیز با نام hd نام گذاری و شناخته میشود، اولین دیسک سخت شناخته شده با پسوند a، دومین دیسک با پسوند b و دیگر دیسکها به همین ترتیب با حروف انگلیسی شناخته میشوند. پارتیشنهای هر دیسک نیز با ترتیب عددی شناخته میشود که فایلهای دسترسی آن در شاخه dev قرار میگیرد. به طور مثال sda1 یعنی پارتیشن اول از دیسک اول که از نوع SATA است و به همین شکل sdb3یعنی پارتیشن سوم از دیسک دوم... این روند به همین شکل با نام hd برای دیسکهای IDE است. با خروجی دستور mount میتوان از پارتیشنهای متصل به سیستم، نوع فایل سیستم آن، محل اتصال آن و... اطلاع حاصل نمود.
پارتیشن swap
در روند نصب گنو/لینوکس، پارتیشنی به نام swap ساخته میشود. این پارتیشن که جایی متصل نمیشود، به نوعی حافطه مجازی سیستم است یعنی فایل سیستم آن فضایی شبیه به فضای سلولهای RAM را پیاده سازی میکند و هنگامی که گنو/لینوکس با کمبود حافظه مواجه شود و نیاز به تخصیص حافظه بیشتر برای برنامههای کاربردی وجود داشته باشد، از فضای swap میتواند بعنوان حافظه مجازی استفاده کند... پیشنهاد میشود حجم آنرا برابر یا دو برابر حافظه سیستم خود تعیین نمایید. به طور مثال یکی از کاربردهای swap در Hibernation است، در مایکروسافت ویندوز از این فناوری با عنوان Virtual memory نام برده میشود.
مفاهیم مجوزهای دسترسی
برخلاف مایکروسافت ویندوز که تنها یک سیستم چند وظیفهای است، گنو/ لینوکس مانند یونیکس از ابتدا به صورت یک سیستم چند وظیفهای و چند کاربره طراحی و پیاده سازی شدهاست و هر کاربر سیستم دارای حساب کاربری مجزایی برای استفاده از سیستم است. یکی از پارامترهای امنیتی سیستم مجوزهای دسترسی است که بر روی فایلها و پوشهها اعمال میشوند. بر اساس این مجوزها، فایلها و پوشهها هرکدام دارای مالکی هستند که این مالکیت در قالب کاربر، گروه کاربری و سایر کاربران مصداق پیدا میکند. مجوزها نیز به سه دسته خواندن، نوشتن و اجرا تقسیم میشوند که به ترتیب برابر با مقدار عددی ۴، ۲، ۱ است. برای هر فایل یا پوشه امکان تخصیص هر کدام از این سه حالت به گروههای سه گانه کاربر، گروه کاربری و سایر کاربران وجود دارد... در ادامه با مفاهیم سطوح دسترسی بیشتر آشنا خواهید شد.
فایلهای پیکربندی
همانطور که میدانید یکی از مزیتهای سیستم عامل گنو/لینوکس و سیستم عاملهای خانواده یونیکس در این است که تنظیمات برنامههای کاربردی و سرویس دهندههای مختلف در فایلهای متنی ساده ذخیره میشوند. به این فایلهای متنی ساده فایلهای پیکربندی (Configuration Files) اطلاق میگردد. بنابراین در هر شرایطی با یک ویرایشگر متنی ساده نیز میتوان اشکالت ایجاد شده در تنظیمات را برطرف کرد و یا تنظیمات جدید را به سرعت و سادگی اضافه نمود. برای کاربران حرفهای انجام برخی از تنظیمات بر روی فایلهای پیکربندی ساده تر و سریعتر از استفاده از ابزارهای مدیریتی گرافیکی است.
کتابخانه (Library)
برنامههای کاربردی برای پیاده سازی بخشی از عملکردهای خود از توابعی استفاده میکنند که در برنامههای دیگری گنجانده شدهاند. به طور مثال یک نرم افزار کاربردی برای ایجاد رابط کاربری خود از توابعی که برنامهٔ pyGTK در اختیار قرار میدهد استفاده میکند. به این گونه توابعی که برنامههای کاربردی دیگر از آنها برای ایجاد و پیاده سازی بخشی از امکانات خود استفاده میکنند، کتابخانه گفته میشود. وجود این کتابخانهها فرایند برنامهنویسی را بسیار تسهیل میبخشد. برای مثال، برنامه نویسی که مایل به نوشتن نرم افزاری است، سعی خود را بر ایجاد عملکردهای خاص آن نرم افزار معطوف میکند و نه بر ساخت توابعی که مثلا پنجره را در محیط گرافیکی رسم میکنند، یا دگمهها را بر روی پنجره میسازد و...