الجزء اﻷول من الموضوع, و الجزء الثاني.

تدعى الخدمات المختلفة المسؤولة عن الأعمال في نظام Linux بالسيرفرات (Servers). فهناك الـ Display Server (X.Org من أشهر و أكثر الـ Display Servers استخداماً و انتشاراً في أنظمة Unix-like), و الـ Sound Server (منها JACK و PulseAudio), و Print Server (مثل CUPS), و غيرهم. وظيفة السيرفر هو الوصل بين البرامج و النواة, و تنفيذ وظائف محددة. فيقدم السيرفر مجموعة موحدة من البروتوكولات للبرامج و يتولى التفاهم مع النواة أو البرامج الأخرى. من المصطلحات الأخرى المستخدمة في Linux و Unix-like مصطلح Daemon, و يقابلها في Windows ما يعرف بالـ Services. الـ Daemon هو برنامج يعمل في الخلفية بدون واجهة رسومية أو تدخل من المستخدم (عادة ً ما ينتهي اسمه بحرف d, مثل ntpd أو polkitd).

[caption id="attachment_130049" align="aligncenter" width="1024"]The Linux API (System Call Interface) Shmuel Csaba Otto Traian [CC BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0) or GFDL (http://www.gnu.org/copyleft/fdl.html)], via Wikimedia Commons[/caption]

عادة ً ما يسأل مستخدم Linux الحديث "أين C: و D:؟". في Linux لا يوجد ما يعرف بالـ Drive, و لكن يتبع نظام الشجرة (Tree system) المتبع في أنظمة Unix-like. هذا لا يعني أنه لا يوجد Partitions في Linux, و لكن يعني أن الـ Partitions يعبر عنها بما يدعى بـ Mount points, و هي مجلدات داخل المجلد الأساسي (الذي يدعى Root أو /). كلمة "مجلد" هنا تبسيط ليوافق ما يراه المستخدم في الـ File manager (كما أن مصطلح Directory (dir) يستخدم للحديث عن الـ Folders في أنظمة Unix-like). يمكن تخيل الأمر كشجرة لها جذع واحد, يتفرع منه فروع و أغصان. و يمكن للمستخدم استبدال أي فرع أو غصن بأي فرع أو غصن من شجرة أخرى.

Dolphin: /

في هذه الصورة نرى أن Root كأنها dir كبيرة, و في داخلها dir أخرى. هنا, /home و /boot موضوعان على Partitions منفصلة عن /. و لكن كما هو واضح من التسمية, فإنهما تحت root (/).

/home هو الـ dir الذي يحتفظ المستخدم فيه بملفاته الشخصية, و تخزن البرامج إعداداتها فيه. لذا يفضل وضعها على Partition منفصلة عن النظام. و هكذا يمكن للمستخدم تغيير توزيعته دون أن يخسر بياناته, أو إعدادات البرامج (و حتى الـ DE). يعبر عن /home/user بإشارة ~, و التي يمكن استخدامها كبديل لها (مثلاً mkdir ~/1, يقوم بإنشاء dir عنوانها 1 في /home/user). و user عنوانها يطابق اسم المستخدم (مثلاً /home/arabhardware).

bash: lsblk

أما بالنسبة للأقراص و الـ Partitions, فإن Linux يستخدم sda, sdb, sdc… للتعبير عنها (لأجهزة SCSI و SATA, أما IDE فتأخذ حرف hd). sda يعني جهاز التخزين (Storage Device) الأول (أي الـ HDD أو SSD الأول), و الثاني سيأخذ حرف b ليصير sdb, و هكذا. Storage Device تعني أي جهاز تخزين, و من ضمنها الـ Flash Drive. في الصورة يظهر أن هناك قرصاً واحداً, و هو مقسم لقسمين: sda1 و sda2. القسم الأول (sda1) مركب (mounted) على /boot. الـ sda2 عليه LVM (نوع من أدوات إدارة الأقسام المنطقية "Logical volume”), و مقسم إلى root, swap, و home. الـ swap هي منطقة على جهاز التخزين لاستخدامها كمخزن للبيانات التي على RAM في حال الحاجة الحالية لمساحة أكبر منها (مثلاً برنامج 3D ينجز أعمال Rendering, و لكن الـ RAM قاربت مساحتها المتاحة على الانتهاء, فتقوم النواة بترحيل جزء من البيانات التي عليها غير المستخدمة للتخزين مؤقتاً على القرص الصلب على سبيل المثال). يقابلها في Windows ما يعرف بالـ Page file. و يمكن في Linux أن تكون ملفاً أيضاً بدلاً من Partition, و مع تطور أحجام الـ RAM صار من الممكن استخدام النظام بدونها (إلا في حالات معينة, كتفعيل خاصية Hibernation).

يستخدم مصطلح root أيضاً للتعبير عن الـ Superuser. و الـ Superuser هو المستخدم صاحب الصلاحيات العليا و بإمكانه فعل أي شيء (و يقابله بشكل أبسط بكثير على Windows المستخدم Administrator). لا يجب استخدام النظام كـ root, لأن هذا يفتح المجال أمام الهجمات و يزيد من إمكانية إتلاف النظام. و يجب دائماً حماية root بكلمة سر قوية, و إنشاء مستخدم آخر عادي صاحب صلاحيات محدودة يكون هو المستخدم في العمليات العادية اليومية (يرمز لـ root بإشارة #, و للمستخدم العادي بـ $ في سطر الأوامر). يختص root بتثبيت و إزالة الحزم أو تحديث النظام على سبيل المثال.

bash: $ and #

هذا التقسيم للصلاحيات من أهم مبادئ الحماية و الأمان في أنظمة Unix-like, و منها Linux. و هو مبدأ Least privilege, و يعني تنفيذ المهمة بأقل صلاحيات ممكنة. فتصفح الإنترنت على سبيل المثال لا يحتاج إلى صلاحيات Superuser (يرمز له اختصاراً بـ su). إعطاء المهمة أو المستخدم أقل صلاحية ممكنة لإتمام العمل يحمي من الهجمات, ففي مثال متصفح الإنترنت, يقلل هذا من إمكانية اختراق الجهاز و زرع Malware يصل للمكونات المهمة عبر المتصفح. حين يحتاج المستخدم لتنفيذ أمر يتطلب صلاحيات أعلى يقوم بطلب Temporary privilege elevation, أي إعلاء مؤقت للصلاحيات. يتم هذا من خلال أدوات طورت لهذا الغرض (بدلاً من عمل Logout من المستخدم العادي للدخول كـ root), من أشهرها sudo (و قبلها كان أمر su -c يحل مكانها). يقوم sudo بإعطاء الأمر الصلاحية التي يحتاجها لإنجاز المهمة بشكل مؤقت, و لا يعطيه أكثر مما يحتاج.

يسبب هذا الإحباط لبعض المستخدمين الذين اعتادوا على و إزالة البرامج في Windows و تحديثه في المستخدم العادي. و لكن يجب على المستخدمين الصبر و التعود, و ألا يلجأوا إلى استخدام root كحساب أساسي أو إعطاء حسابهم صلاحيات عالية دائمة.

يقودنا هذا للحديث عن البرامج في Linux. توزع البرامج في معظم الحالات على شكل حزم (Packages), تثبت من خلال مدير الحزم (Package Manager). و تدير التوزيعات الكبيرة و الرئيسة مخازن حزم (تعرف بـ Repositories, اختصاراً repos), تحتوي على معظم البرامج التي يحتاجها المستخدم. لذا فإن المستخدم نادراً ما يحتاج الذهاب إلى الموقع لتنزيل البرنامج و تثبيته بشكل يدوي. طبعاً يمكن للمستخدم تثبيت برنامج بشكل يدوي بدون مدير الحزم, من خلال ما يعرف بالـ Compiling, أي أن يقوم ببناء البرنامج من خلال الـ Source code. كما تقوم أيضاً بعض التوزيعات باتباع هذا النظام (كـ Gentoo و Slackware), لأن بناء البرنامج على جهاز المستخدم حسب الإعدادات التي يضعها يجعل البرنامج مخصصاً أكثر لجهازه, و لكنه يأخذ وقتاً أطول بكثير من تثبيت الحزمة, المبنية مسبقاً.

تستخدم التوزيعات مدراء حزم مختلفة, فمثلاً يستخدم Debian المدير dpkg, و يستخدم Fedora و openSUSE (هذه التوزيعة مستقلة, و غير مبنية على توزيعة أخرى) المدير RPM. هناك برامج إدارة حزم أخرى مثل pacman على Arch. يستخدم dpkg حزم DEB, و يستخدم المدير RPM حزم RPM. لا يتعامل المستخدم عادة ً مع مدير الحزم مباشرة, بل يستخدم برامج Front-end للتعامل معه, مثل APT في Debian (و أغلب التوزيعات المبنية عليها, كـ Ubuntu, و Mint المبنية على الأخيرة), و DNF في Fedora (الذي استبدل YUM). هذه الـ Front-ends توسع وظيفة مدير الحزم (كحل الاعتمادات “Dependency resolution”), و تسهل التعامل معها. توجد Front-ends رسومية للعديد منها.

[caption id="attachment_130050" align="aligncenter" width="761"]apt-get install mediawiki By Debian project (Konsole terminal emulator from the KDE project) (Own work) [GPL (http://www.gnu.org/licenses/gpl.html)], via Wikimedia Commons[/caption][caption id="attachment_130051" align="aligncenter" width="645"]dnf upgrade By Thomei08 (Own work) [CC BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0)], via Wikimedia Commons[/caption]

سطر الأوامر من أهم الأدوات في Linux, و يمكن استخدام الكثير من البرامج فيه. سطر الأوامر أحد الأشياء التي تخيف المستخدمين المبتدئين, و تؤدي إلى ابتعادهم عن النظام. و لكن سطر الأوامر واسع الاستخدامات و متحرر من قيود الواجهة الرسومية, مما يسرع من الأداء و يخفف وزن البرنامج على الجهاز. يفضل المستخدمون المتقدمون بالعادة سطر الأوامر على الواجهة الرسومية, و لكن هذه المشكلة حلت بشكل كبير في التوزيعات الموجهة نحو المستخدمين المبتدئين التي توفر الكثير من الأدوات الرسومية. و لكن لا مفر من تعلم استخدام السطر (حتى لو لم تتعلم الأوامر), و هذا أمر سهل.

يدعى سطر الأوامر Shell. أشهر shell في أنظمة Unix و مشتقاته هي bash, و هي Command language كذلك (يمكن كتابة برنامج بها). هناك Shells أخرى مثل zsh و fish. و يدعى البرنامج الذي يسمح للمستخدم التعامل مع الـ shell بـ Terminal emulator (اختصاراً tty) أو Console.

البرامج على Linux مختلفة قليلاً عن MS Windows. للبرامج عادة ً اعتمادات (Dependencies), و هي برامج أو مكتبات (Libraries) يحتاجها البرنامج ليعمل. قد تكون هذه الاعتمادات لغة البرمجة (مثلاً لو كان البرنامج مكتوباً بـ Python 2, و لكنها غير مثبتة), أو أداة يحتاجها البرنامج لتنفيذ مهتمه (كأن يكون Renamer بواجهة رسومية, فيحتاج لبرنامج Renamer غير رسومي). يتولى الـ Package manager (أو الـ Front-end, كما في حالة RPM و dpkg) حل الاعتمادات عند تثبيت الحزم. الاعتمادات قد تتطلب نسخة محددة, أو نسخة أعلى من رقم معين, و قد تكون البرنامج فقط دون تحديد. في التوزيعات التي لا تستخدم Package managers أو المدير فيها غير ذكي (لا يستطيع حل الاعتمادات) يجب على المستخدم تثبيت كل الاعتمادات قبل تثبيت البرنامج. في Linux كثيراً ما تكون الواجهة الرسومية (GUI – Graphical User Interface) إضافة غير أساسية لبرنامج CLI (Command Line Interface), لذا فإن البرامج حجمها أصغر. المكتبة (Library) هي ملفات توفر وظائف من خلال Interface لمن يطلبها, و بهذا لا يحتاج البرنامج إلى تضمين تلك الوظائف في الكود مما يقلل من حجمه. و يستطيع أكثر من برنامج طلب تلك الوظائف. من أشهر مكتبات GNU (و مستخدمة في Linux) مكتبة glibc, للغة C بالأساس. تحمل المكتبات عادة ً اختصار lib في اسمها.

الملفات على Linux لا تحتاج إلى Extension في نهاية عنوانها لتعريفها. و من المعهود تخزين الملفات بدون Ext. في النهاية. على سبيل المثال, ليس للـ Binaries (البرنامج المجمع, من أمثلته على ويندوز ملفات exe) نهاية. كما أن الكثير من ملفات الإعدادات ليس لها نهاية في العنوان, مثل hosts أو fstab في /etc. ملفات الإعدادات هي ملفات Text عادية, و قد تضاف نهايات إلى العنوان لتعريفها ليس أكثر (مثل .conf). لا توجد الموانع لأسماء الملفات الموجودة في Windows, فيمكن إدارج علامة ? أو % في العنوان, و يمكن أن ينتهي العنوان بفراغ (أو أن يكون العنوان كله Space فقط). Linux الحديث يستخدم عادة ً UTF-8, و بالتالي تمنع فقط العناوين الممنوعة في UTF-8 (مما يعني أن / و \0 الممنوعان سابقاً يمكن وضعهم في عنوان الملف, و لكن يفضل تجنبهم). كما أن العناوين Case-sensitive, أي أن ملف a غير A. و يمكن أن يحمل نفس الملف عنوانين (عن طريق الـ Symbolic links). إخفاء الملفات في Linux سهل, فكل ما يتطلبه هو إضافة نقطة (.) في بداية العنوان.

الجزء الرابع.