إدارة الملفات والمجلدات 1

يوفر النظام أدوات قوية جداً للتعامل مع الملفات والمجلدات بكل سهولة.ولكن دعونا أولاً نتعرف علي بعض الادوات المهمة التي تساعدنا في التنقل داخل النظام.
الأداة اﻷولى:pwd وهي اختصاراً لـ (Print Working Directory) اي اعرض اسم ومكان المجلد الحالي .
مثال: pwd
النتيجة:/home/emad اي اننا بداخل مجلد اسمه emad موجود بداخل مجلد يسمى home بداخل الـ / اي الـ root (لا اقصد هنا المستخدم المسمى root ولكن المسار root “ساتحدث عن بنية النظام في درس لاحق فلا تقلق واكتفي بمعرفة اسمه الآن”)
اﻷداة الثانية:ls وهي اختصاراً لـ (List) اي اعرض الملفات والمجلدات الموجودة بداخل المجلد.الأداة لها العديد من الخيارات التي يمكن تمريرها لتعديل سلوك الأداة.الخيار (a) يجعل الأداة تقوم بعرض كافة الملفات والمجلدات بما فيها الملفات والمجلدات المخفية والتي يبدأ أسمها بـ (.)،الخيار (l) يجعل الأداة تعرض خصائص الملفات والمجلدات مثل الحجم والصلاحيات وملكية الملف او المجلد.طبعاً للأداة العديد من الخيارات المفيدة اﻷخرى ولكني لا استطيع ذكر كل الخيارات الخاصة بكل أداة لذا يمكنك اللجوء الي الـ man كما رأينا في الموضوع السابق.اذا اردت تمرير أكثر من خيار في نفس الوقت يمكنك ذلك عن طريق ذكر كل خيار منفصلاً او مجتمعاً.
مثال: الخيارات مجتمعة ls -al
مثال2:الخيارات منفصلة ls -a -l
مثال3: ls -al /home/emad/Downloads
هل لاحظت انه في المثال الثالث كلمة Downloads تبدأ بحرف كبير (Uppercase) ؟ نعم النظام حساس لحالة اﻷحرف فـ a تختلف عن A.
اﻷداة الثالثة:cd وهي اختصارأ لـ (Change Directory) وهي احدى الـ Built-in Commands التي تحدثنا عنها سابقاً ونستطيع من خلالها التنقل بداخل المجلدات فبكتابة cd /home/emad/Desktop تأخذنا الأداة الى هناك واذا كتبنا cd – تأخذ الاداة للمجلد السابق الذي اتينا منه (مثل زر Back الموجود بمتصفح الملفات ذو الواجهة الرسومية) اما اذا كتبنا cd .. فتأخذنا الاداة خطوة واحده الي الاعلي أي الي المجلد الذي يحوي المجلد الحالي (مثل زر Up الموجود بمتصفح الملفات ذو الواجهة الرسومية) اما اذا كتبتا cd فقط ستأخذنا اﻷداة لمجلد المنزل الخاص بالمستخدم الحالي.
قم بفتح الـ terminal (الطرفية) اﻵن وجرب اﻷدوات السابقة .هل أحسنت التعامل معها؟
اﻵن ننتقل للدرس (إدارة الملفات والمجلدات)
انتقل اﻵن الي مجلد/tmp حيث سيكون مسرح عملنا (يحوي هذا المجلد الملفات المؤقتة التي تُمسح بمجرد غلق النظام )

* إنشاء مجلد جديد اﻷداة (mkdir) :
مثال : mkdir test انشئنا مجلد جديد باسم test .
مثال2: mkdir /home/emad/Desktop/test2 انشئنا مجلد جديد باسم test2 علي سطح المكتب الخاص بالمستخدم emad.
مثال3: mkdir -p em1/em2/em3/em4 باستخدام الخيار (p) انشئنا سلسلة من المجلدات بداخل بعضها حيث em1 يحوي em2 الذي سيحوي em3 الذي سيحوي em4.
للمزيد عن اﻷداة راجع الـ man.

*حذف مجلد او ملف اﻷداة (rmdir, rm):
(rmdir)تستخدم هذه اﻷداة لحذف مجلد فارغ.
مثال: rmdir test .
اذا لم يكن المجلد فارغاً ستظهر رسالة خطأ مثل تلك rmdir: failed to remove ‘em1/’: Directory not empty.
(rm) تستخدم هذه اﻷداة لحذف ملف او مجلد.
مثال:rm lec.txt لحذف ملف اسمه lec.txt.
مثال2: rm -r em1 باستخدام الخيار (r) نستطيع حذف مجلد ومحتوياته.
مثال3:rm -f protected.txt باستخدام الخيار (f) نجبره علي حذف الملف المسمي protected.txt
مثال4:rm -rv em1 بإضافة الخيار (v) سيعطينا معلومات عن الملفات التي يقوم بمسحها مثل شريط التقدم (Progress bar) في الواجهة الرسومية.
للمزيد راجع الـ man .

*إنشاء ملف جديد فارغ اﻷداة (touch):
مثال: touch life.txt انشئنا ملف جديد فارغ اسمه life.txt.

*نسخ ملف او مجلد الأداة (cp):
cp Source Destination
نسخ المصدر الجهة
مثال: cp life.txt /home/emad/Desktop قمنا هنا بنسخ الملف Life.txt الموجود بداخل المجلد الحالي الي سطح المكتب الخاص بالمستخدم emad.
مثال2: cp life.txt /home/emad/Desktop/new.txt قمنا هنا بنسخ الملف life.txt الموجود بداخل المجلد الحالي الي سطح المكتب الخاص بالمستخدم emad باسم جديد(new.txt) “هل رأيت القوة نسخ وإعادة تسمية بخطوة واحدة :D”
مثال3: cp /home/emad/Desktop/new.txt ./new2.txt قمنا بالعكس نسخنا الملف new.txt الموجود علي سطح المكتب الخاص بالمستخدم emad باسم جديد(new2.txt) (.) تعني الي هنا اي الي المجلد الحالي.
لنسخ مجلد نضيف الخيار ( r R)
مثال: cp -r em1 ~/Desktop (ملحوظة: استخدمت ~ بدلاً من /home/emad ).
للمزيد راجع الـ man.

*قص /نقل ملف او مجلد اﻷداة (mv):
مثال:mv life.txt /tmp/test قمنا بنقل الملف life.txt الي المجلد /tmp/test .
مثال2: mv /tmp/test/life.txt ~/Documents/read.txt قمنا بنقل الملف الي مجلد Documents باسم جديد(read.txt)
تستخدم اﻷداة (mv) لعمل وظيفة إضافية وهي إعادة التسمية
مثال:إعادة تسمية المجلد em1 الي try
mv em1 try

*إخفاء ملف او مجلد:
كل ما عليك فعله لإخفاء ملف او مجلد هو اضافة (.) في بداية اسمه
مثال:mv life.txt .life.txt.
ساكتفي بهذا اليوم ونكمل في الجزء الثاني ان شاء الله.لا تبخل علي بدعائك 😀

استخدام الـ bash

من الآن فصاعداً سأتحدث عن الـ bash كـ shell افتراضي لمعظم التوزيعات.

هل الـ bash صعب الاستخدام؟
معظم القادمين الجدد لجنو/لينكس يشعرون بالرهبة من تلك الشاشة السوداء استناداً علي معلومات خاطئة بانها صعبة جداً وانها موجهة للمتقدمين ،لذلك بدءاً من هذا الدرس لن نتحدث سوي عن هذه البيئة الغامضة بالنسبة للبعض.

شكل الـ bash:
اذا وصلت للـ bash بعد عملية الـ boot مباشرة او من خلال الـ terminal من داخل الواجهة/البيئة الرسومية -كما ذكرنا في درس سابق- فستجد شكله كالتالي emad@mybox ~ $  حيث (emad) اسم المستخدم و(mybox) اسم الكمبيوتر و(~) هي اسم المجلد الحالي الذي انا بداخله(مجلد المنزل) و($) تفيد بان المستخدم مستخدم عادي وليس root “مستخدم جذر” (سنتعرف علي المستخدمين في درس لاحق)

كيف نستخدم الـ bash ؟
الـ bash ماهو الا بيئة عمل نصيةتسمح للبرمجيات الاخرى بالعمل من داخلها.هذه البرمجيات صممت بالاساس لتعمل في بيئة العمل النصية وليس الرسومية فعلي سبيل المثال نحن نستخدم متصفح الملفات في بيئة العمل الرسومية لعرض محتوى المجلدات عن طريق استخدام الفأرة والضغطات المفردة والمزدوجة ،اما في بيئة العمل النصية لا نستطيع فعل ذلك :(،فنستخدم أداة مصممة للعمل في البيئة النصية دون الحاجة لإستخدام الفأرة والضغطات مثل أداة ls فبدلاً من فتح مدير الملفات -بغض النظر عن اسمه- واستخدام الفأرة في تحديد المجلد والضغط المزدوج لفتحه وعرض محتوياته نكتب ls folder_name فتعرض لنا اﻷداة محتويات المجلد .

كيف أعرف اسماء الاوامر المستخدمة؟
في الحقيقة استخدام كلمة أوامر ليست دقيقة بالكامل حيث ان معظم الادوات التي نستخدمها في تلك البيئة ماهي الا برامج صغيرة اما كلمة أوامر فنستطيع اطلاقها علي بعض البرمجيات الصغيرة المدمجه بداخل الـ bash فهي تسمي built-in commands مثل “history” لمعرفة المزيد عن هذا يمكنك مراجعة الرابط التالي http://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html .

لازلت لا أعرف كيف لي ان أعرف اسماء الادوات المناسبة لمهمة معينه؟حسناً الموضوع ليس الا تراكم معرفي فخلال هذه السلسلة من الدروس إن شاء الله سنتعرف علي قدر ليس بالقليل من الادوات التي تساعدك في انجاز معظم المهام التي تريد كمستخدم متوسط/متقدم كما تستطيع اجراء بحث علي الانترنت او التوثيقات الخاصة بالتوزيعات للاستزاده.

طريقة عمل الادوات في الـ bash:
غالباً ما تتبع الادوات نفس النمط في طريقة عملها حيث تكون علي الشكل التالي:
tooloption/s parameter/s
اي اسم الاداة ثم مسافه ثم شرطة ثم الخيار/الاختيارات (اذا كانت متاحه) ثم مسافه ثم معامل/معاملات (اذا كانت متاحه).مثال للتوضيح:
استخدام أداة ls لعرض محتويات مجلد
ls /home
استخدمنا اسم الاداة(ls) ثم مسافه ثم المعامل (اسم المجلد /home) .تلاحظ هنا اننا لم نستخدم اي خيار (option) !تتيح لك بعض الادوات استخدام خيارات او لا حسب حاجتك وهناك ادوات تجبرك علي وضع خيار/خيارات وهناك ايضاً بعض الادوات التي لا تتوفر بها اي خيارات.مثال اخر ls -a /home تلاحظ هنا اننا استخدام الخيار (a) حيث يتيح لك هذا الخيار عرض كافة المجلدات والملفات حتي المخفية منها.
كيف اعرف اذا كانت الاداة توفر خيارات ام لا وهل يجب علي حفظ كل الخيارات التي توفرها أداة معينة؟
الاجابة بسيطة “جلب المساعدة” يوفر لك النظام أدوات مساعدة عظيمة مثل أداة man وهي اختصار لكلمة manual اي دليل الاستخدام حيث لا يتطلب منك الامر سوي كتابة man ثم اسم الاداة التي تريد جلب معلومات عنها .مثال man ls سيعرض لك محتويات دليل الاستخدام الخاص بالاداة حيث يحتوي علي اسم الاداة ،طريقة أستخدامها ،الخيارات المتاحة ان وجدت وامثلة علي طريقة الاستخدام ثم اسم الشخص الذي كتب هذا الدليل.اعتقد الان ان اجابةالشق الثاني من السؤال اصبحت بديهية (لا تحتاج لحفظ الخيارات التي توفرها كل اداة حيث يمكنك الرجوع دائما للدليل ومعرفتها).في الحقيقة ليس الـ man هو أداة المساعدة الوحيدة المتوفرة بالنظام فهناك ايضاً أداة whatis لمعرفة وظيفة أداة معينه ،وأداة info التي تشبهه أداة man الا انها توفر معلومات أكثر تفصيلاً كما يمكننا كتابة اسم الاداة مباشرة متبوعة بـ (–help) مثال ls –help او اختصاراً ls -h مع العلم ان هذا الاختصار غير متاح في كل الادوات ولا يحبذ استخدامه .
ملحوظة:عند تثبيت برامج جديدة فانها تضيف ملفات دليل المستخدم الخاصة بها للـ man والـ info بشكل تلقائي.الا بعض الاستثناءات .
هناك ايضاً ملفات التوثيق والموجودة في المجلد التالي usr/share/doc والتي توفر معلومات قيمه عن الادوات.

هل اذا كتبت اسم اي أداة بداخل الـ bash ستعمل مباشرة؟
لا،يجب ان يكون المجلد الذي يحتوي علي الملف التنفيذي الخاص بالاداة معرف في الـ PATH variable (المتغيير الذي يحتوي اسماء المجلدات التي بداخلها الملفات التنفيذية)الخاص بالـ bash والموجود بداخل ملف etc/profile او ملف ~/.bash_prpofile   (لا تقلق سنتعرف في دروس لاحقة علي هذه الملفات وطريقة عملها وطريقة تعديلها) لعرض الـ PATH variable نكتب التالي : echo $PATH
سيكون الناتج كالتالي :/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
نلاحظ ان اسماء المجلدات التي تحتوي علي البرامج التي يستطيع المستخدم استخدامها مكتوبة بجانب بعضها ومفصولة باستخدام علامة (:) . مرة أخري لا تقلق من هذا الجزء سنتعرف عليه في دروس لاحقة.

كيف تعرف مكان أداة معينه؟
يمكنك كتابة which ثم اسم الاداة .مثال:
emad@mybox ~ $ which ls
/bin/ls

ساكتفي بهذا ونكمل في درس قادم ان شاء الله.

الـ shell الجزء الثاني (الـ bash)

كما ذكرت في التدوينة السابقة أن الـ bash هو اشهر الـ shells “الصدفات” المتوفرة علي أنظمة جنو/لينكس ويكاد يكون الـ shell الافتراضي علي أغلب التوزيعات.يتسم بالقوة والمرونة ويفضله اغلب مشرفي النظم علي الواجهة الرسومية.يوفر الـ bash بيئة عمل نصية خصبة تسمح للعديد والعديد من الادوات بالعمل بكفاءة دون استهلاك قدر كبير من الموارد .
كيف نصل للـ shell؟ اذا كانت التوزيعة التي تستخدمها معدة للاقلاع مباشرة الي بيئة العمل النصية فأنت الان أمام الـ shell وفي هذه الحالة يصنف الـ shell علي انه Interactive login-shell ،اما اذا كانت التوزيعة التي تستخدمها معدة للأقلاع مباشرة الي بيئة العمل الرسومية فيجب ان تستخدم احد برامج Terminal emulation “محاكي الطرفية” مثل Gnome-terminal او Konsole للوصول للـ shell وفي هذه الحالة يصنف الـ shell علي انه Interactive non-login shell (لاتقلق اذا كانت هذه المصطلحات غريبة عليك بعض الشيئ سأوضحها لاحقاً).
ماهو الـ shell الذي سيظهر امامي بعد الاقلاع؟هل هو الـ bash ام sh ام csh ام ماذا؟يتوقف هذا علي الاعدادات الموجودة بداخل ملف etc/passwd في الحقل الاخير امام اسم كل مستخدم كالتالي:
emad:x:1000:1000:emad,,,:/home/emad:/bin/bash
home:x:1001:1001::/home/home:/bin/sh
وهذه الاعدادات يتم اختيارها عند إنشاء المستخدم اما اذا لم تُحدد عند إنشاء المستخدم فيتم وضعها افتراضياً طبقاً للاعدادات العامة الموجودة بداخل ملف etc/default/useradd.
هل استطيع تغيير الـ shell الافتراضي للمستخدم؟ نعم تستطيع عن طريق أداة chsh ،فإذا اردت جعل الـ shell الافتراضي لك zsh علي سبيل المثال فعليك استخدام الصيغة التالية chsh -s /bin/zsh اما اذا اردت فعل نفس الشيئ لمستخدم آخر فيجب ان تمتلك صلاحيات root لفعل ذلك بالصيغة التالية sudo chsh -s /bin/zsh username .
اتمني ان يكون كل شيئ واضح حتي الان 😀
الان دعونا نعود لمصطلحي Interactive login shell و Interactive non-login shell ماذا نعني بذلك ؟دعونا نفصلها ببساطة شديدة
Interactive : تعني تفاعلي ،اي ان الـ shell ينتظر توجيه الاوامر من المستخدم عن طريق لوحة المفاتيح مباشرة.
login-shell : اي ان المستخدم وصل للـ shell مباشرة بعد عملية الاقلاع.
non-login shell : اي ان المستخدم وصل للـ shell بشكل غير مباشر عن طريق Xsession “جلسة عمل رسومية” باستخدام احد محاكيات الطرفية مثل Gnome-terminal.
ساكتفي بهذا اليوم واكمل معكم غداً ان شاء الله.اتمني ان اكون وُفقت في ايصال المعلومة.

الـ Shell

الـ Shell
بيئة عمل نصية تتيح للمستخدم التواصل مع باقي اجزاء النظام من خلال استخدام برمجيات نصية مثل برنامج ls لعرض محتويات مجلد ما او برنامج vim لتحرير الملفات النصية …الخ.
هناك عدة انواع من الـ shell مثل bash ,csh, sh, zsh والنوع الاكثر استخدام هو bash
sh : تم تطويره في السبعينيات لاستخدامه علي أنظمة Unix.
bash : وهو اختصاراً لـ “Bourne-Again Shell” وهو نسخة مطورة من الـ sh وهو الاكثر شيوعاً علي أنظمة Linux ويكاد يكون أفتراضياً علي كافة التوزيعات.
csh : تم تطويره من أجل FreeBSD ويستخدم صيغة كتابة تشبه صيغة كتابة لغة الـ C.
zsh : وهو نسخه محسنة من الـ bash.
الـ bash shell هو بيئة العمل المفضلة لمديري نظم Linux لما يوفره من قوة ومرونة منقطعة النظير وهو البيئة الافتراضية علي معظم التوزيعات الموجهة للخوادم “Servers” لانه لا يستهلك قدر كبير من موارد الجهاز مثل الواجهة الرسومية.
معظم مستخدمي التوزيعات الموجهة للاستخدام المنزلي يفضلوا الواجهة الرسومية ولكن ذلك لا يحرمهم من قوة الـ bash لانهم ببساطة يستطيعوا الوصول له من داخل الواجهة الرسومية عن طريق ما يسمي بالـ Terminals اي الطرفيات من خلال برمجيات مختلفه توفرها التوزيعات مثل برنامج Gnome-terminal او Konsole .
بعد التعرف علي الـ shell دعونا نعرف كيف يعمل !
بعد ان تنتهي عملية الـ boot “اقلاع النظام -تحميل الـ kernel بتوجيه من الـ grub-” يتم تحميل الـ shell الافتراضي للمستخدم ولمعرفة ماهو نوع الـ shell الذي تستخدمه اكتب التالي echo $SHELL او افتح الطرفية “terminal” اذا كنت داخل الواجهة الرسومية واكتب نفس الامر.لعرض انواع الـ shell المختلفة التي توفرها لك التوزيعة التي تستخدمها اكتب التالي بداخل الطرفية cat /etc/shells .
اذا وجدت انك تستخدم الـ bash وتريد ان تستخدم الـ sh علي سبيل المثال فكل ماعليك فعله هو ان تكتب sh وذا اردت العودة مرة اخري للـ bash اكتب exit.
الـ linux قادر علي تشغيل أكثر من shell session اي اكثر من جلسة عمل وكل session تستطيع تشغيل برنامج واحد فقط “سنري في دروس لاحقة ان شاء الله كيفية ادارة العمليات” ويمكننا التنقل بين الـ sessions عن طريق الضغط علي مفاتيح Alt+fX من لوحة المفاتيح (حيث X تعني رقم) فعلي سبيل المثال لو ضغطت علي Alt+f3 سينقلني الـ session اخري وهكذا كل session تسمي tty فاذا كتبت tty في الـ shell سوف يعطيك رقم الـ tty الحالي اما الـ session عن طريق الـ terminal بداخل الواجهة الرسومية فلا نسميها tty بل pts .اذا كنت بداخل الواجهة الرسومية واردت الانتقال الي shell tty فلا نستعمل Alt+fX بل نستخدم Ctrl+Alt+FX واذا اردت العودة للواجهة الرسومية مرة اخري فاضغط Ctrl+Alt+F7 او Ctrl+Alt+F8.
الي موضوع قادم باذن الله ………

مقدمه عن نظام تشغيل جنو/لينكس

سأحاول بإذن الله في هذا الموضوع عرض فكره عامة عن نظام جنو/لينكس، نعم هذا هو اسمه وليس لينكس ولكنك ستجدني في الكثير من الاحيان اشير له بأسم لينكس فقط اختصاراً.
ماهو اللينكس ؟ هو نواة نظام تشغيل(kernel) برمجت بداية بيد الطالب لينوس تورفالدز عام 1991الذي اطلق الكود المصدري لنواته علي الانترنت بشكل مجاني فتوالت عليه الاقتراحات والتعديلات والاضافات علي كوده حتي صار الكود المصدري اليوم مكون من ملايين السطور البرمجية.لمعرفة المزيد عن تاريخ لينكس يرجي الاطلاع علي الرابط التالي:http://ar.wikipedia.org/wiki/%D9%84%D9%8A%D9%86%D9%83%D8%B3
مهلاً ماذا تعني النواة؟
النواة هي قلب نظام التشغيل تشبه “محرك السيارة” حيث انها المسئولة عن إدارة العتاد الصلب مثل اللوحة الام والقرص الصلب والذاكرة ومنافذ الـ USB ومخارج الصوت والشاشة ..الخ. تعتمد نواة لينكس في عملها علي مايسمي بالـ Modules اي الوحدات وهي قابله للازالة والتركيب ولتقريب الصورة تخيل معي جهاز يأتي معه مجموعة من الوحدات او القطع اذا قمت بتركيب وحدة ما من الوحدات المرفقة فأنها تضيف امكانية او وظيفة جديدة للجهاز واذا اردت الاستغناء عن هذه الوظيفة فكل ما عليك فعله هو ازالة هذه الوحدة -اتمني ان تكون الصورة قد اتضحت- تأتي النواة محمله مسبقاً بالعديد من الوحدات مثل وحدات التعريفات للقطع المختلفة لذلك تجد انك لست في حاجه لتعريف معظم القطع الموجودة بجهازك الا تلك القطع التي لا تريد الشركات المنتجة لها توفير التعريف بشكل مفتوح حتي يتم دمجه بالنواة ولكن لا تقلق فهذه التعريفات قد تجدها علي الموقع الرسمي للشركة المنتجة او يقوم مجتمع المصادر المفتوحة بتطوير تعريف حر لها.وهناك ايضاً وحدات تضيف امكانيات للنواة مثل دعم التشفير او دعم الاتصال الشبكي …الخ.
حتي الان ليس لدينا نظام تشغيل متكامل يؤدي وظائفه، لذا حان وقت دمج ادوات مشروع جنو الحرة بالنواة لينتج عنهما نظام جنو/لينكس . للمزيد حول مشروع جنو يمكنك الاطلاع علي الرابط التالي:http://ar.wikipedia.org/wiki/%D9%85%D8%B4%D8%B1%D9%88%D8%B9_%D8%AC%D9%86%D9%88
اصبح لدينا الان نظام تشغيل متكامل فدعونا نتعرف عليه من قرب ،
النواة Kernel :إدارة العتاد الصلب.
Shell : بيئة عمل نصية تتيح للمستخدم توجيه النواة من خلال استخدام برمجيات نصية مثل ls لعرض محتويات مجلد ما او vim لتحرير الملفات النصية …الخ.هناك عدة انواع من الـ shell مثل bash ,csh, sh, zsh والنوع الاكثر استخدام هو bash.
GUI : بيئة عمل رسومية تتيح للمستخدم توجيه النواة من خلال استخدام برمجيات رسومية مثل برامج تحرير الصور وتشغيل الوسائط ومجموعة البرامج المكتبية.هناك العديد من البيئات الرسومية المتكامله التي تأتي ببرامج افتراضية تتيح للمستخدم اداء مهامه ببساطة مثل Gnome ,KDE ,Unity ,Openbox ,Fluxbox ,XFCE ,LXDE, Mate, Cinnamon ..الخ.وحتي تعمل هذه البيئات لابد من وجود بنية تحتية تسمح لها بالعمل فوق الـ shell فكان اول نظام جيد ظهر هو Xorg server ثم ظهر بعد ذلك الـ Wayland والـ Mir وبدون احد هذه البرمجيات لا يمكنك تشغيل بيئة سطح المكتب الرسومية.
البرمجيات Software:وهي الادوات التي تساعد المستخدم في اداء مهامه مثل برنامج تشغيل الملفات الصوتية او عرض ملفات الفيديو او تحرير الملفات النصية…الخ.تتوافر البرمجيات الحره بشكل كبير مجاناً فنجد ان البرنامج الواحد له العديد من البدائل مما يعطي مساحة أكبر في اختيار البرنامج المناسب.تعتمد التوزيعات المختلفة علي الانترنت في توفير البرامج من خلال مايسمي بالمستودعات وهي خوادم علي شبكة الانترنت بها اﻵف البرمحيات الحرة وكل ماعلي المستخدم فعله هو فتح مركز البرمجيات Software center واختيار البرنامج ليتم تحميله وتثبيته بشكل مباشر، اي تشبه الـ Store الموجود علي نظام اندرويد في الهاتف الجوال.

بعد التعرف علي المكونات الاساسية لنظام التشغيل جنو/لينكس دعونا نتعرف علي بعض المصطلحات ،

التوزيعة:هي عملية جمع اجزاء نظام التشغيل من خلال الاختيار بين بدائل المكونات التي ذكرت بالاعلي مثل اختيار اصدار معين من النواة واختيار احد انواع الـ Shell واخيار احدي بيئات سطح المكتب الرسومية ثم جمع هذه المكونات معاً في اسطوانة لينتج مايسمي بالتوزيعة اي ياختصار التوزيعة هي احدي نكهات نظام جنو/لينكس .اشهر التوزيعات هي debian redhat Slackware وقد بني علي هذه التوزيعات العديد من التوزيعات الاخري مثل ابونتو التي بنيت علي ديبيان او فيدورا التي بنيت علي ريدهات.
الحزم Packages:هي البرمجية بمكوناتها ومعلومات الاعتماديات مضغوطة بشكل يسمح للتوزيعة بتثبيتها بسهوله وهناك العديد من صور الحزم واشهرها deb و rpm.
الاعتماديات Dependencies : تعتمد البرمجيات الحرة علي فكرة الاعتماديات حيث اذا اراد المطور بناء برنامج لاداء وظيفة ما ووجد اثناء عملية التطوير انه يحتاج لكتابة قدر كبير من الكود لجعل البرنامج يؤدي شيئ معين وكان هناك من سبقه بكتابة هذا الكود فلماذا يهدر وقته ومجهودة لكتابته مره اخري فيلجأ لتضمين هذا الكود الذي سبق وكتبه احدهم وتم حفظه بداخل مايسمي بالمكتبة من خلال الاشارة له داخل الكود البرمجي ولكنه لا يقوم بتضمين الكود الفعلي للمكتبة بداخل برنامجه وانما يكتفي بالاشارة بأنه حتي يعمل برنامجي لابد من وجود هذه المكتبة علي النظام وعلي المستخدم ان يقوم بتثبيت هذه الاعتماديات يدوياً قبل تثبيت هذا البرنامج،ولكن عملية تثبيت الاعتماديات بشكل يدوي عمليه مرهقه لذا يقوم المتطوعين بأخذ الكود المصدري وتحويله لحزمه Package تحتوي علي الكود المصدري ومعلومات وصفية لما يحتاجه هذا البرنامج من اعتماديات حتي يعمل بشكل صحيح ويتولي مدير الحزم Package managerبالتوزيعة تثبيت هذه الاعتماديات بشكل آلي دون تدخل من المستخدم.ولكن لماذا لايقوم المطور بتضمين هذه المكتبات بداخل البرنامج حتي لانضطر لتثبيتها ؟هناك العديد من الاسباب مثل الحفاظ علي الحجم الصغير للبرنامج وايضاً من المحتمل ان يعتمد اكثر من برنامج علي هذه المكتبة فلماذا نضيف نفس المكتبة مراراً وتكراراً وايضاً من الممكن ان يقوم مطور المكتبة بتحسين مكتبته واطلاق اصدار افضل فلماذا يحرم نفسه من الاصدار المطور ويظل مع الاصدار القديم المدمج مع برنامجه !!
مدير الحزم Package manager : هو المسئول عن ادارة عمليات تثبيت وحذف الحزم ويختلف تبعاً للتوزيعة فهناك مدير الحزم الديبيانية dpkg أو apt وهناك مدير حزم ريدهات yum …الخ.
-الاختلافات الجوهرية بين التوزيعات من وجهة نظري الشخصية هي مدير الحزم .