أرشيف التصنيف: مقالات

الـ 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 …الخ.
-الاختلافات الجوهرية بين التوزيعات من وجهة نظري الشخصية هي مدير الحزم .