From power up to bash prompt

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

1 المقدمة

1 المقدمة

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

أنني افترض ان عندك كمبيوتر يعمل بنظام لينوكس، وأن عندك بعض المعلومات الاساسية الخاصة باليونكس و عتاد الحهاز، فإن لم يكن فيمكنك البدء بقراءة Eric S. Raymond's The Unix and Internet Fundementals HOWTO وهو مستند قصير و سهل القراءة و يغطي الاساسيات.

الجزء الاساسي في هذا المستند هو كيف يقوم بتحميل نفسه، و لكنه ايضا يحاول ان يكون اكثر شمولا. فقد الحقت تمارين بكل فصل ، فإن اردت ان تقوم تقوم بحل هذه التمارين فإنك ستتعلم اكثر بكثير من مجرد القراءة.

وأنا ارجو ان بعض القراء سيقومون بممارسة افضل تمرين اعرفه لتعلم اللينوكس، وهو بناء نظام من المصدر البرمجي. جلامباتيستا فيكو، وهو فيلسوف ايطالي (1668-1744) قال "verum ipsum factum" وهو ما يعني "الفهم يأتي عن طريق الصنع". شكرا لألكس لهذا الاقتباس.

ان كنت تريد ان تبني نظامك، فأنا انصح ان تقرأ Gerard Beekmans' Linux From Scratch HOWTO LFS . إن LFS به تعليمات مفصلة لبناء نظام كامل قابل للإستخدام من المصدر البرمجي. و يمكنك على صفحة الويب الخاصة به ان تجد قائمة مراسلة للناس الذين يبنون انظمتهم بهذه الطريقة. هذه التعليمات كانت جزء من هذا المستند و لكنها انفصلت في مستند اخر "Building a Minimal Linux System from Source Code" و يمكن الحصول عليه من موقع From PowerUp to Bash Prompt. و منه ستتعلم منه كيف تبني نظاما كتمرين تعليمي.

الحزم هنا مقدمة بنفس الترتيب الذي تظهر به في تحميل النظام, هذا يعني انك اذا قمت بتثبيت الحزم بهذا الترتيب يمكنك اعادة التشغيل بعد كل مرة و رؤية النظام يقترب اكثر و اكثر من محث الباش، وهذا يعطي احساسا بالتقدم.

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

2 العتاد

2 العتاد

عندما يتم تشغيل جهازك يقوم بعمل اختبار ليتأكد من أن الأمور تجري في مسارها الصحيح. يسمى هذا اختبار بدأ التغشيل. و بعد هذا يقوم برنامج يسمى محمل مقطع قيام نظام التشغيل، و هو موجود في بيوس الروم ROM BIOS,يقوم هذا البرنامج بالبحث عن مقطع قيام نظام التشغيل مقطع قيام نظام التشغيل هو اول مقطع من القرص الصلب و يحتوي على برنامج صغير يمكنه من قيام نظام التشغيل يتم تحديد مقاطع قيام التشغيل برقم 0xAA55 = 43603 على بايت 0x1FE = 510 هذه هي اخر بايتين في المقطع هكذا يتمكن العتاد من تحديد غذا كان هذا المقطع مقطع قيام لنظام التشغيل ام لا.

يحتوي برنامج محمل مقطع قيام نظام التشغيل على قائمة بالاماكن التي سيبحث عن مقاطع قيام نظام التشغيل في جهازي القديم يتم البحث اولا في محرك الاقراص المرنه و من بعد ذلك في القرص الصلب الاولي و في الاجهزة الاحدث يمكن البحث ايضا على اسطوانات الليزر و اذا وجد اي مقطع قيام لنظام التشغيل يقوم بتحميله في الذاكرة و و يقوم بتمرير التحكم للبرنامج الذي سيقوم بتحميل نظام التشغيل في نظام اللينكس العادي هذا البرنامج هو اول مرحلة في ليلو lilo = Linux Loader و يوجد العديد من الطرق المختلفه ليتم قيام نظام التشغيل راجع دليل مستخدمي ليلو للحصول على عنوان الصفحة راجع قسم ليلو

من الواضح ان هناك العديد الذي يمكن ان يقال عما يفعله عتاد الجهاز لكن هذا ليس المكان المناسب لذكر كل هذا يمكنك مراجعه العديد من الكتب عن عتاد اجهزة الكمبيوتر

2-1 التنسيقات

يقوم الجهاز بتخزين بعض المعلموات عنه في CMOS الخاص به. يتضمن ذلك ماهي الأقراص و الذاكرة في النظام. يحتوي الBIOS الخاص بالجهاز على برنامج يتيح لك التعديل في هذه الإعدادات. تحقق من الرسائل التي ستظهر عند تشغيل الجهاز لتعرف كيفية الدخول إليها. على الجهاز الخاص بي أقوم بضغط رز delete قبل أن يقوم بقيام نظام التشغيل.

2.2 التمرين

من أفضل الطرق للتعلم عن عتاد أجهزة الكمبيوتر هو تركيب جهاز من قطع مستعمله. استخدم قطع 386 على الأقل لكي تتمكن من تشغيل لينوكس عليه بسهولة. لن يكلف هذا الكثير حاول أن تقوم بالبحث فقد تجد قطع مستعمله بأسعار رخيصه. قم بفتح صورة القرص بواسطة محرر هكس hex. هذا الملف عبارة عن 512 بايت فقط لا غير بالتحديد مقطع واحد فقط. قم بإيجاد الرقم السحري 0xAA55. قم بعمل نفس الشئ بالنسبة لمقطع قيام نظام التشغيل من قرص قيام مرن أو على جهازك الخاص. يمكنك استخدام أمر dd لتقوم بنسخه لملف: dd if=/dev/fd0 of=boot.sector كن حذرا لتضع ملف الإدخال if (input file) و ملف الإخراج of (output file( في أماكنهم الصحيحه! تحقق من المصدر البرمجي لمحمل نظام التشغيل لليلو.

2-3 المزيد من المعلومات

* The Unix and Internet Fundamentals HOWTO by Eric S. Raymond, especially section 3, What happens when you switch on a computer? * The first chapter of The LILO User's Guide gives an excellent explanation of PC disk partitions and booting. See section LILO for a URL. * The NEW Peter Norton Programmer's Guide to the IBM PC & PS/2, by Peter Norton and Richard Wilton, Microsoft Press 1988 There is a newer Norton book, which looks good, but I can't afford it right now! * One of the many books available on upgrading PC's

  • The Unix and Internet Fundamentals HOWTO

بواسطة Eric S. Raymond, خاصة القسم الثالث What happens when you switch on a computer? الفصل الأول من دليل مستخدمي ليلو لـ IBM PC & PS/2 بواسطة Peter Norton و Richard Wilton

3 ليلو

3. Lilo (Linux Loader محمل اللينوكس)

عندما يبدأ الكمبيوتر فى تحميل مقطع قيام نظام التشغيل على نظام لينوكس عادى, فأنه يبدأ فى تحميل جزء من lilo يسمى "المرحلة الأولى من محمل نظام التشغيل". هذا البرنامج الصغير مهمته الوحيدة فى الحياة هى تحميل و تنفيذ "المرحلة الثانية من محمل نظام التشغيل".

تعطيك المرحلة الثانية لتحميل نظام التشغيل محث للأوامر (إذا تم تثبيته بهذه الطريقة) و تحمل نظام التشغيل الذى تختاره.

عندما يقوم نظامك و يبدأ فى العمل, و تشغل lilo فانك فعليا تشغل "مثبت المتناظرات". فيقرأ ملف الإعدادات /etc/lilo.conf و يكتب محملات نظام التشغيل, و المعلومات الخاصة بأنظمة التشغيل الذى يستطيع تحميلها على القرص الصلب.

توجد طرق مختلفة لإعداد نظامك للقيام. ما قمت بشرحه الآن هو أوضح الطرق و أكثرها "طبيعية", على الأقل بالنسبة لنظام نظام تشغيله الأساسى هو اللينوكس. يقوم دليل مستخدمى Lilo بشرح أمثلة عديدة "لمبادئ قيام نظام التشغيل". هذه الأمثلة تستحق القراءة و التجربة.

3.1 الإعدادت

ملف إعدادات lilo هو /etc/lil.conf. يوجد صفحة فى دليل المستخدم )man page( خاصة به: اكتب man lilo.conf فى غلاف لترى الصفحة. الشئ الأساسى فى lilo.conf هو وجود مدخل لكل شىء معد للقيام فى lilo. لمدخل خاص باللينوكس, هذا يتضمن مكان النواة, و أى قسم فى القرص الصلب يلحقه كأنه نظام الملفات الأصلى. لأنظمة تشغيل أخرى, المعلومة الأساسية هى أى قسم نبدأ قيام نظام التشغيل منه.

3.2 تدريبات

خطر: انتبه فى هذه التدريبات. فمن السهولة الاخطاء فى شئ و تخريب سجل قيام نظام التشغيل الرئيسى فتجعل نظامك لا يصلح للاستخدام. تأكد من وجود قرص انقاذ صالح معك, و أنك تعرفة كيفية استخدامه لأصلاح كل شئ مرة أخرى. انظر بالأسفل رابط tomsrtbt, قرص الأنقاذ الذى استخدمه و انصح به. أحسن احتياط هو استخدام جهاز غير مهم.

اضبط lilo على قرص مرن. لا يهم إذا كان لا يوجد شئ عدا النواة - ستحصل على "ذعر فى النواة" عندما تكون النواة مستعدة لتحميل init و لكنك على الأقل ستعرف أن lilo يعمل.

إذا رغبت يمكنك الأستمرار و معرفة ما مقدار النظام الذى يمكنك و وضعه على القرص المرن. غالبا هذا هو ثانى أحسن نشاط لينوكس تعليمى موجود. انظر دليل قرص قيام جهاز التشغيل (Bootdisk HOWTO) الرابط بالأسفل, و tomsrbt (الرابط بالأسفل) للتلميحات. اجعل lilo يحمل unios (انظر جزء تدريبات العتاد للحصول على الرابط). و كتحدى أكبر, حاول عمل هذا على قرص مرن.

اعمل حلقة للتحميل. اجعل lilo فى سجل قيام نظام التشغيل الرئيسى يقوم بتحميل lilo فى احد مقاطع قيام نظام التشغيل الأولية, و اجعل هذا يقوم بتحميل lilo فى سجل قيام نظام التشغيل الرئيسى... أو يمكن استخدام سجل قيام نظام التشغيل الرئيسى و الأربع مقاطع الأولية الخاصة بقيام نظام التشغيل كلها لعمل حلقة من خمس نقاط. استمتع!

3.3 المزيد من المعلومات

  • صفحة lilo فى دليل المستخدم (man page)
  • تحتوى حزمة lilo على دليل مستخدمى lilo lilo-u-21.ps.gz (أو اصدارة أحدث). و قد تكون هذه الوثيقة عندك بالفعل. انظر فى /usr/doc/lilo أو ما شابه. اصدارة البوستسكريبت أحسن من النص العادى, بما أنها تحتوى على رسوم توضيحية و جداول.
  • tomsrbt أظرف قرص مرن فردى للينوكس
  • دليل قرص قيام جهاز التشغيل (Bootdisk HOWTO)

4 نواة اللينوكس

4- نواة اللينوكس

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

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

لو جمعت النواة الخاصه بك, فد تلاحظ أن هناك العديد من ألاختيارات لأجل أدوات (modem, sound card ...etc) معينه.

و أن النواة تدير ملفات النظام, ألاتصلات, و ألشبكات.

بمجرد أن النواة تحملت, أول شيء تفعله هو البحث عن البرنامج init لتنفيذه.

4.1 الإعداد

معظم الإعدادات للنواة تتم بمجرد بنائها, باستخدام menuconfig, أو xconfig في usr/src/linux/ (أو أي مكان تجده فيها). يمكنك أعادة النمط للفديو, ملفات النظام الجذري, ذاكرة الوصول العشوائيه بأستخدام rdev. براميترات يمكن تمريرها إلي النواة عن طريق الlilo. يمكنك تمريرها للنواة من lilo.conf أو محث الlilo. مثل لو تريد أستخدام hda3 كملفات النظام الجذري عوضا عن hda2 , يمكنك كتابة

LILO: linux root=/dev/hda3

لو أنك تبني نظامك من المصادر, يمكنك جعل حياتك أسهل بصنع نواة منليثيه. أذن لا يوجد داعي لنسخ وحدات النواة الي النظام المستهدف.

ملاحظه: أن ملف system.map يستخدم بمسجّل النواة للتحديد أسماء الوحدات التي تولد رسائل(fix me)

4.2 تدريبات

فكر في هذا: أن dev/hda3/ ملف من نوع خاص الذي يوصف قسم من القرص الصلب. لكنه يسكن في ملفات النظام مثل أي ملف أخر. النواة تريد معرفة أي قسم من القرص الصلب تريد إلحاقه كملفات النظام الجذري - لأنها لا تحتوي علي ملفات النظام الجذري بعد. فكيف يمكن قرائه dev/hda3/ لتعرف اي قسم تلحقه؟

لو لم تبني النواة الخاصه نكز أقرأ كل المساعدة المتوافره لكل أختيار.

أنظر الي أي مدي يمكنك أن تصنع نواة صغيرة و تظل تعمل. يمكنك تعمل المزيد عن طريق ترك ألاشياء الخاطئه!

أقراء ``The Linux Kernel'' (الموقع في ألاسفل) كلما تفعل ذلك, أبحث عن المصادر البرمجيه التي تشير اليه.الكتاب يشير الي اصدار النواة 2.0.33 الذي يعد قديم. قد تكون سهله أذا أنزلت ألاصدار القديم من النواة و أقرأ المصدر الخاص بها. أنه مذهل (fixme)

هاك! أنظر أن كان بأمكانك أظهار بعض الرسائل الجديدة.

4.3 المزيد من المعلومات

  • /usr/src/linux/README و محتويات /usr/src/linux/Documentaion/ (قد يكون في مكان أخر)
  • /usr/src/linux/README
  • المساعدة الموجودة عندما تعد النواة بأستخدام menuconfig أو make xconfig
  • The Linux Kernel (دلائل LDP الى ألاخره)
  • المصادر البرمجيه, أنظر بناء الحد الأدني لنظام اللينوكس من المصادر البرمجيه انظر الموقع.

5 مكتبة الجنو للسي

-5مكتبة الجنو للسي

الشئ الثاني الذي يحدث عندما يبدا جهازك هو انه يتم تحميل و تشغيل الاينت init و مع ذلك اينت init تقريبا يشبه جميع البرامج..حيث يستخدم الدوال من المكاتب و ربما قد تكون رايت مثال لبرنامج سي مثل هذا : main() { printf("Hello World!\n"); }

البرنامج لا يحتوي على تعريف للprintf .. اذا من اين اتت ؟ اتت من مكتبات السي المعياريه..على نظام جنو/لينوكس هي glibc اذا قمت بتجميعه compile تحت فيجوال ++C , اذا فهي تاتي من تطيبق مايكروسوفت لنفس الدوال المعياريه هناك مليارات من هذه الدوال المعياريه , للرياضيات , عباره برمجيه , ايام/اوقات تخصيص الذاكره و على هذا المنوال كل شئ على اليونكس ( بالاضافه للينوكس ) اما مكتوبه بلغة السي او عليك ان تبذل مجهودا كي يظهر و كانه كتبو بلغة السي على اساس ان كل شئ يستخدم هذه الدوال اذا نظرت في lib/ على نظام الينوكس على جهازك فانك سوف ترى العديد من الملفات تسمى libsomething.so او libsomething.so الخ. هم عباره عن المكتبات لهذه الدوال. ال Glibc هو فقط تطبيق الجنو لهذه الدوال هناك طريقتين البرامج من خلالها يمكن ان تستخدم هذه الدوال.اذا قمت بتوصيل برنامج بشكل دائم statically , مكتبة هذه الدوال تنسخ في ملفات التشغيل EXCUTABLE التي يتم انشائها CREATED , و هذا هو سبب وجود مكتبات libsomething.a لكن ان قمت بتوصيل برنامج بشكل متغير ( غير دائم ) statically " و هذا هو الطبيعي default " اذا فهذه الحاله و اثناء تغشيل البرنامج و يحتاج الى كود مكتبي , فانه يتم استدعائه من ملف ْْْlibsomething.so الامر 1dd هو صديقك عندما تريد تحديد اي المكتبات لتغشيل برناج محدد.على سبيل المثال , هنا توجد المكتبات التي يستخدمها ال bash : libtermcap.so.2 => /lib/libtermcap.so.2 (0x40019000) libc.so.6 => /lib/libc.so.6 (0x4001d000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

: " التعديل " 5.1

بعض الدوال في المكتبات تعتمد على موقعك على سبيل المثال في استراليا نكتب التواريخ على شكل : dd/mm/yy , بينما الامريكان يكتبون mm/dd/yy . و هناك برنامج ياتي مع توزيع ال glibc و يسمى localedef و الذي يجعلك قادر على تظبيط هذه التعديلات

5.2 التدريبات :

استخدم ldd لتعثر على المكتبات التي تفضلها تطبيقاتك استخدم ldd لتعثر على المكتبات التي تستخدمها init

قم بعمل مكتبه تجريبيه "toy library " تحوي فقط واحده او اثنتان من الدوال.البرنامج ar يستخدم لانشائهم , صفحة ال man لبرنامج ال ar قد تكون بدايه جيده للتحقق كيف يتم <<<---- اكتب , جمع و وصل البرنامج الذي يستخدم هذه المكتبه

5.3 للمزيد من العملومات :

كود المصدر , طالع Building a Minimal Linux System from Source Code for urls // >>--

6 Init

6 Init (إختصار Initialize و تعنى االإبتداء)

سنتكلم فقط عن طريقة النظام V من الInit التى تستخدمها معظم نظم لينوكس و يوجد بدائل . فى الحقيقة يمكنك وضع أى برنامج تحب فى (sbin/init/) و ستقوم نواة النظام بتشغيله عندما تنتهى من التحميل.

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

توجد قصة كاملة و معقدة حول تبديل مراحل التشغيل و لكن سأتجاوز ذلك تقريبا و أتكلم فقط عن بدء تشغيل النظام.

ال init يقرأ ملف إسمه /etc/inittab , و الذى يخبره ماذا يفعل . عادة أول شىء يقوم به هو تشغيل سكريبت بدء. البرنامج الذى يقوم بتشغيل هذا السكريبت هو برنامج bash ,و نفس البرنامج الذى يعطيك محث الأوامر . على نظم ديبيان , سكريبت البدء هو /etc/init.d/rcS و على الريد هات هو /etc/rc.d/rc.sysinit هذا هو المكان حيث يتم التحقق من و تحميل ملفات , و ضبط الساعة و إتاحة تشغيل الذاكرة الإفتراضية , و تعيين اسم الجهاز (hostname) و ما إلا ذلك .

بعد ذلك يبدأ تحميل سكريبت آخر لكى يبدأ مستوى التشغيل التلقائى. وهذا يعنى عملية تحميل مجموعة من الأنظمة الفرعية. وتوجد مجموعة من المجلدات وهى /etc/rc.d/rc0.d, /etc/rc.d/rc1.d, ..., /etc/rc.d/rc6.dفى نظام الريدهات أو /etc/rc0.d, /etc/rc1.d, ..., /etc/rc6.d فى نظام الديبيان والتى نناتظر مستويات التشغيل المختلفة. لو كنا سنستخدم مستوى التشغيل الثالث على نظام ديبيان سيقوم السكريبت بتشغيل السكريبتات الموجوده فى /etc/rc3.d التى بتدأ بحرف الـ S كأول حرف من كلمة Start. وهذه السكريبتات هى مجرد روابط للسكريبتات الموجودة فى مجلد آخر يسمى غالبا init.d.

وبذلك قام init بتحميل مستوى للتشغيل المطلوب، ويبحث فى مجلد عن السكريبتات التى تبدأ بحرف الـ S. قد تجد S10syslog أولاً. وهذه الأرقام تخبر سكريبت مستوى التشغيل بأى ترتيب يبدأ بتحميلهم. وفى حالة S10syslog يتم تشغيله أولاً نظرا لعدم وجود سكريبتات تبدأ بـ S00 ... S09. ولكن S10syslog هو فى الحقيقة رابط لـ /etc/init.d/syslog: وهو سكريبت لبداية وإيقاف مسجل النظام System logger. ونظراً لأن الرابط يبدأ بالحرف S فإن سكريبت مستوى التشغيل يقوم بتشغيل سكريبت syslog بإعطايه متغير "start" وتوجد روابط مناظرة تبدأ بالحرف K كأول حرف من كلمة Kill والذى يحدد ما يتم إغلاقه وبأى ترتيب عند ترك مستوى التشغيل.

ولتغيير ما تبدأه الأنظمة الفرعية تلقائيا، يجب عليك ضبط هذه الروابط مجلد rcN.d. حيث تعبر الـ N عن رقم مستوى التشغيل المعد تلقائيا فى الـ inittab الخاص بك.

وأخر ما يقوم به init هو بداية بعض برامج getty's. ويطلق عليهم "respawned"، وتعنى أنه إذا توقفت هذه البرامج يقوم الـ init بإعادة تشغيلها مرة أخرى. أغلب الإصدارات تكون لديها بست طرفيات افتراضية. ولكنك قد تحتاج لأقل من هذاالعدد لكى توفر من استخدامك للذاكرة، وقد تحتاج أكثر من هذا العدد لترك العديد من الأشياء تعمل في نفس الوقت وتنتقل بينها عندما تحتاج أى منها. قد تحتاج أيضاً إلى تشغيل تشغيل برنامج getty للحصول على شاشة نصوص طرفية، أو شاشة اتصال بجهازك عن طريق المودم. فى هذه الحالة ستحتاج إلى إعادة تحرير ملف inittab.

6.1 التنسيق

يعد /etc/initiab هو ملف التنسيق للمستوى الأعلى من init. ومجلدات rcN.d، حيث N=0,1,...,6 تحدد أى من ملفات النظام الفراعية يتم تحميلها. وفى مكان ما فى السكريبتات التى يتم تشغيلها بواسطة init، يوجد أمر mount -a. وهذا يعنى تحميل ملفات النظام التى من المفترض أن يتم تحميلها. لو أردت تغيير ما يتم تحميله وأين عند بدء التشغيل فهذا هو الملف الذي تحتاج إلى إعادة تحريره . و هناك صفحة لدليل المستخدم ل fstab .

6.2 تمارين

حاول إيجاد مجلد rcN.d لمستوى التشغيل التلقائى لجهازك و استخدم أمر ls -l لترى ما تشير إليه الملفات غير عدد ال getty التى يتم تشغيلها على جهازك قم بإزالة أى نظم فرعية لا تحتاجها من مستوى التشغيل التلقائى الخاص بك

قم بتجهيز قرص مرن بإستخدام lilo , و نواة و برنامج موصول بشكل ثابت من نوع hello program يسمى /sbin/init و راقبه يحمل ةو يقول hello

راقب جيدا بينما يقوم جهازك ببدء التشغيل و قم بتسجيل بعض الملاحظات عما يحدث أو قم بطباعة جزء من رسائل log/var/log/messages الخاصة بجهازك من وقت بداية التشغيل . ثم بداية من inittab يتحرك خلال كل السكريبتات و يلاحظ كل جزء من الكود يؤدى اى وظيفة . كما يمكنك وضع رسائل بدء تشغيل إضافية مثل echo "Hello, I am rc.sysinit"

هذا تدريب جيد فى تعلم كتابة السكريبتات ل bash shell . بعض السكريبتات معقدة بعض الشىء . فيستحسن الإحتفاظ بمرجع جيد لل bash فى متناول يدك.

6.3 المزيد من المعلومات

يوجد دليل المستخدم (man page) ل init و fstab . اكتب inittab man إلى صدفة (shell) حتى تراها.

7 نظام الملفات

نظام الملفات

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

في الجزء السابق,ذكرت ان سكربتات الـinit تقوم بفحص و إلحاق لنظام الملفات و الاوامر التي تقوم بذلك هي fsck و mount على الترتيب.

ان القرص الصلب هو عبارة عن مساحة كبيرة حيث تستطيع ان تكتب احاد و اصفار عليه .

نظام الملفات بفرض بعض الهيكلة على ذلك ويجعله يشبه الملفات داخل مجلدات و هذة المجلدات بداخل مجلدات اخرى و هكذا . كل ملف يمثل عن طريق inode (عقدة إالكترونية) ,التي تخبرك ملف من هذا , و متى انشئ, و اين تجد محتويات الملف, و المجلدات ايضا تمثل بـ inode لكن هذة الـ inode تخبر اين تجد الـ inode الخاصة بالملفات الموجوده في هذا المجلد و اذا كان النظام يريد مثلا قراءةhome/greg/bigboobs.jpeg/ فإنه يقوم اولا بإجاد الـ inode للـدليل الاصلي / في الـsuperblock , وبعد ذلك يبحث عن الت inode للدليل home/ في وجود محتويات الـ / ثم البحث عن الـ inode للدليل greg في وجود محتويات home/ثم البحث عن الـ inode لملف bigboobs.jepg التي ستخبرة اي بلوك من القرص يقوم بقراءته.

اذا اضفنا بعض المعلومات او البيانات لنهاية ملف قد يكون تم اضافة تلك البيانات الي الملف قبل ان تقوم بعمل تحديث للـinode حتى تعلم ان البلوك الجديد ينتمي الي هذا الاملف و بالعكس .

إذا حدث انقطاع في التيار الكهربائي فجأة فان نظام الملفات سيعطب. ان هذاة الامور يقوم امر fsck بعمل تحديد للعطب و اصلاحه,ان امر mount يأخذ نظام الملفات الموجود على الجهاز ويضيفه الي التسلسل الهرمي الذي تراة عندما تشغل نظامك.

عادة النواة تحمل نظام الملفات للقراءة فقط, لكن الامرmount يقوم بتحميل نظام الملفات للقراءة و الكتابة بعد ان يقوم امر fsck بعمل الفحص و التأكد انه سليم.

نظام التشغيل لينكس يدعم العديد من انوع الملفات الاخرى من نظام الملفات msdos , vfat, minix والي ذلك...

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

نوع مختلف تماما من نظم الملفات يتم الحاقة في الدليل proc/ , انه في الحقيقة عرض للاشياء الموجودة في النواة,هناك دليل لكل عملية تجري في نظام و اسم المجلد يكون على رقم العمليه التي تجري .

هناك ايضا ملفات مثل interrupt وmeminfo التي تخبرك كيف تعمل وتستخدم العتاد,تستطيع ان تتعلم الكثير بتفصح الـproc/ .

الاعدادات :

هناك براميترات للامر mke2fs التي تنشئ نظام الملفات ext2 هذا الامر يتحكم في حجم البلوك و عدد الـinode والي ذلك , انظر في صفحة دليل المستخدم لامر mke2fs للتفاصيل.

ما يتم الحاقفي نظام ملفاتك يتم التحكم به في etc/fstab/ ولها ايضا صفحة دليل مستخدم انظر بها للتفاصيل .

تمارين:

قم بأنشاء نظام ملفات صغير و قم بعرضة على نظام ترير النصوص hex على النظام الرقمي بقاعدة 16 وبـinode محددة والبلوكاتالعليا و محتويات الملفات .

اعتقد ان هناك ادوات التي تسهللك رؤية النظام بطريقة مصورة أعثر على واحد و جربة و ارسل الي و اخبرني عنه . افحص نظام الملفات ext2 في المصدر النواة .

معلومات اضافية:

الفصل التاسع من كتاب IDP نواة اللينكس عرض ممتاز لملفات النظام تستطيع ان تجدة في

www.Mirror.aarnet.edu.au/linux/LDP/LDP

ان امر mount جزء من حزمة util-لينكس هناك رابطة في بناء نظام لينكس صغير من كود المصدر وهي:

www.netspace.net.au/~gok/power2bash

صفحة دليل المستخدم للاوامرmount , fstab, fsck, mke2fs, proc . إن الملف doucumentation/proc.txt/ المصدر البرمجي لينكس يقوم بشرح /proc

ادوات نظام الملفات ext2 ,الصفحة الرئيسيه له هي:

www.mit.edu/tytse/www/linux/esfsprogs.html

وهناك ايضا مستند يعرض ext2fs رغم انه قديم وليس قابل للقراءة كما في الفصل التاسع نواة اللينكس.

هناك وصلة اخرى لنظام الملفات يونكس القياسي وهذة تقوم بشرح ماذا و اين يجب ان يذهب الي نظام الملفات يونكس و لماذا يجب ان يذهب الي هذا المكان كما انها تقول لك الحد الادنى للمتطلبات من محتويات /bin و /sbin وما الي ذلك و هذا مرجع جيد اذا كنت تريد ان تنشئ نظام صغير متكامل و هي:

www.Tsx-ll.mit.edu/pub/linux/docs/linux-standards/fsstnd

8 العفاريت

برامج الخدمات الخلفية - العفاريت (Deamons)

و هى برامج (العفريت) التى تدور فى الخلفية و تستجيب للأحداث الخارجية (مثل : الفارة و لوحة المفاتيح)

إذا حاولت تشغيل أمر ps aux سترى شيء كالأتى:

USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND root 2 0.0 0.0 0 0 ? SW 07:37 0:00 (kflushd) root 3 0.0 0.0 0 0 ? SW 07:37 0:00 (kupdate) root 4 0.0 0.0 0 0 ? SW 07:37 0:00 (kpiod) root 5 0.0 0.0 0 0 ? SW 07:37 0:00 (kswapd) root 52 0.0 10.7 1552 716 ? S 07:38 0:01 syslogd -m 0 root 54 0.0 7.1 1276 480 ? S 07:38 0:00 klogd root 56 0.3 17.3 2232 1156 1 S 07:38 0:13 -bash root 57 0.0 7.1 1272 480 2 S 07:38 0:01 /sbin/agetty 38400 tt root 64 0.1 7.2 1272 484 S1 S 08:16 0:01 /sbin/agetty -L ttyS1 root 70 0.0 10.6 1472 708 1 R Sep 11 0:01 ps aux

و هذا عبارة عن قائمة بالعمليات الجارى تنفيذها على النظام . المعلومات تأتى من نظام الملفات /proc التى ذكرناها فى الفقرة السابقة . لاحظ إن ال init هو العملية رقم واحد . العمليات رقم 2 و 3 و 4 و 5 هم kflushd, kupdate, kpiod and kswapd على الترتيب . على الرغم من هذا يوجد شيء غريب هنا : لاحظ أن فى كل من أعمدة حجم التخزين الإفتراضى و و أعمدة حجم التخزين الحقيقى , تحتوى على أصفار . كيف لعملية ألا تستخدم ذاكرة ؟

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

يوجد أقواس حول المداخل فى عمود الأوامر لأن نظام الملفات /proc لا يحتوى على معلومات سطر الأوامر لهذه العمليات .

إذن , لأى غرض تستخدم برامج الخدمات الخلفية (Deamons) ؟ - الإصدارات السابقة من هذا المستند إحتوت على طلب للمساعدة , حيث أنى لا أعلم الكثير عن برامج الخدمات الخلفية (Deamons) . القصة القصيرة القادمة تم تجميعها من مختلف الردود لهذا الطلب , التى أمتن لها كثيرا . أرحب الحلول و المراجع و التصحيحات الإضافية.

الإدخال و الإخراج تتم عن طريق مناطق تخزين مؤقت (Buffer) فى الذاكرة . هذا يتيح للأشياء أن تنفذ أسرع . ما تكتبه البرامج يمكن حفظها فى الذاكرة قى (Buffer) ثم كتابتها على القرص فى قطع أكثر فعالية . يتولى هذا العمل كل من daemons kflushd and kupdate : kupdate يتم تنفيذه دوريا كل 5 ثوان للتحقق من وجود Buffers تم الكتابة عليها . إذا وجد , يحضر kflushd لكتابتهم على القرص .

العمليات عادة لا تجد ما تفعله , و هؤلاء الذين يتم تنفيذهم غالبا لا يكون هناك داعى لوجود الكود و البيانات الخاصة بهم فى الذاكرة . هذا يعنى أنه يمكنك أن تستغل ذاكرة جهازك بشكل أفضل ., عن طريق تبديل الأجزاء الغير مستخدمة من البرامج التى يتم تنفيذها و نقلها إلى قسم الذاكرة الإفتراضية (Swap Partition) من القوس السابق . تحريك هذه البيانات من و إلى الذاكرة حسب الحاجة يتم عن طريق kpiod and kswapd . كل ثانية ( أو ما إلى ذلك) kswapd يصحو للتحقق من حالة الذاكرة و ما إذا كان هناك شىinit script (/etc/rc.sysinit or /etc/rc.d/rc.sysinit)ء على القرص يجب إستدعاؤه للذاكرة و ما إذا كان هناك ذاكرة خالية كافية و يتم إستدعاء kpiod .

قد يكون أيضا هناك kapmd daemon تعمل على النظام إذا كنت قد نسقت إدارة الطاقة (Power Managemnet) أوتوماتيكيا فى النواة.

8.1 التنسيق :

تحديث البرنامج يسمح لك بتنسيق kflushd and kswapd . جرب update -h لمزيد من المعلومات.

يتم فتح مساحة الذاكرة الإفتراضية عن طريق swapon و غلقها عن طريق swapoff . سكريبت ال etc/rc.sysinit or /etc/rc.d/rc.sys) init) عادة ينادى swapon عند بداية النظام . علمت أن swapoff مفيد لحفظ الطاقة على الأجهزة المحمولة .

8.2 تمارين :

نفذ update -d لاحظ الحماقات فى السطر الأخير حول threshold for buffer fratricide . الأن يوجد مبدأ مخادع . إذهب إستثمر.

غير المجلد الحالى إلى /proc/sys/vm و إستخدم cat أمر لفتح الملفات هناك . أنظر ما يمكنك أن تفعل.

8.3 لمزيد من المعلومات :

المصدر البرمجى لنواة اللينوكس , إذا كانت لديك الشجاعة الكافية , كود ال kswapd موجود فى linux/mm/vmscan.c و kflushd and kupdate فى linux/fs/buffer.c .

9 مخزن سجلات النظام

9. مخزن سجلات النظام

يقوم Init بتشغيل برامج الخدمات الخلفية syslogd و klogd ، يتم التعامل مع رسائل النواة من قبل klogd بينما يقوم syslogd بالتعامل مع الرسائل من باقي العمليات. السجل الرئيسي موجود في /var/log/messages. هذا المكان هو الأنسب للبحث عن أدلة في حال حدوث أي خطأ في النظام

9.1 التنسيق

يقوم الملف /etc/syslog.conf بتحديد أي رسائل سيتم وضعها في أي مكان. يتم تعريف الرسائل عن طريق الخدمه التي تأتي منها و مستوى أهميتها. يحتوي ملف التنسيقات على سطور تشير هذه إلى أن الرساله من الخدمه أ ذات الأهمية ب ستذهب إلى الملف د لاحظ: يحتاج Syslog وجود ملف /etc/services. يقوم ملف الخدمات بتحديد المنافذ. لست متأكدا اذاكان syslog بحاجه لتحديد منفذ ليقوم بتخزين السجلات عن بعد أو ما اذا كان التخزين محليا يتم عن طريق منفذ أو إذا كان سيستخدم /etc/services لتحويل أسماء الخدمات التي ادخلتها /etc/syslog.conf إلى أرقام منافذ.

9.2 تمارين

ألقي نظره على نظام السجلات في نظامك. حاول إيجاد رساله لم تستطع فهمها، و حاول معرفه ماذا تعنيه. أرسل كل رسائل سجلاتك إلى tty (أعده إلى الوضع الطبيعي عندما تنتهي)

9.3 لمزيد من المعلومات

Australian sysklogd Mirror

10 Getty و Login

10- Getty و Login

ان Getty هو البرنامج الذي يتيح لك الدخول عن طريق جهاز تسلسلي، مثل المحطة الطرفية الإفتراضية او المحطة الطرفية النصية او مودم. انه يعرض محث الدخول, وعندما تدخل اسم المستخدم، فإن getty يسلمه الي login الذي يسأل عن كلمة السر، يتأكد منها ثم يعرض لك الغلاف (shell).

هناك العديد من الاصدارات المتاحة ل getty بعد التوزيعات مثل ريدهات تستخدم اصدار صغير جدا يدعى mingetty و الذي يعمل فقط مع المحطة الطرفية الإفتراضية

برنامج login هو جزء من حزمة util-linux, والتي تحتوي على اصدار getty يدعى agetty و هو اصدار جيد. هذه الحزمة تحتوي ايضا على mkswap, fdisk, passwd, kill, setterm, mount, swapon, rdev, renice, more و بعض البرامج الأخرى.

10.1 تنسيقات الرسالة التي تظهر في اعلى الشاشة والتي تحتوي على محث الدخول, تأتي من /etc/issue, اصدارات getty تبدأ عادة من /etc/inittab . و login يتأكد من تفاصيل المستخدم من /etc/passwd ، اما إذا كان لديك تظليل لكلمات السر فهو يتأكد من /etc/shadow.

10.2 تمارين انشئ ملف /etc/passwd باليد. كلمات السر يمكن ان تترك فارغة, و تغير باستخدام برنامج passwd عندما يتم الدخول الى النظام. راجع صفحة دليل المستخدم لتعاليم استخدام هذا البرنامج, و يمكنك استخدام man 5 passwd لمطالعة صفحة الدليل الخاصة بملف passwd بدلا من تلك الخاصة بالبرنامج.

11 باش

11. باش

إذا أعطيت عملية الدخول اسم مستخدم و كلمة سر صحيحين سيقوم بالتحقق في /etc/passwd ليرى أي حساب غلاف سيقوم بإعطاءه لك. في معظم الحالات في نظام لينوكس سيكون هذا باش bash. وظيفة باش هي قرائة أوامرك و التحقق من تنفيذها، ببساطه هو واجهة للمستخدم و مترجم للغة البرمجة.

كواجهة للمستخدم يقوم بقرائة أومرك و يقوم بتنفيذها إذا كانت داخليه مثل cd أو يقوم بالبحث عن البرنامج الذي سيقوم بتنفيذها إذا كانت أوامر خارجية مثل startx. و يقوم أيضا بعمل بعض الوظائف مثل حفظ تاريخ للأوامر و مثل إكمال أسماء الملفات.

د رأينا باش من قبل كمترجم للغة برمجة. السكربتات التي يشغلها init لبدأ النظام هي عادة سكربتات للغلاف و يتم تنفيذها بواسطه باش. وجود لغة برمجة مع ملحقات النظام العادية متوفرة في سطر الأوامر يوفر تشكيلة قوية، إذا كنت على دراية بما تقوم بفعله. مثلا (smug mode on) قد احتجت لتطبيق مجموعة من الترقيعات لمجلد من المصادر البرمجية من فتره. لقد قمت بهذا بواسطة الأمر التالي:

for f in /home/greg/sh-utils-1.16*.patch; do patch -p0 < $f; done;

يقوم هذا بالبحث في مجلدي الرئيسي عن الملفات التي تبدأ بـsh-utils-1.16 و تنتهي بـ.patch و من ثم يأخذ كل من هؤلاء بدورهم و يقوم بتعيين المتغير f لهم و يقوم بتنفيذ الأمر بين do و done. في هذه الحاله يوجد 11 ملف ترقيعه.

11.1 التنسيق

يتحكم ملف /etc/profile في طريقة عمل باش في النظام كله. ما سوف تضعه هنا سوف يؤثر على كل مستخدمي باش على النظام. سيقوم بعمل أشياء مثل إضافة مجلدات إلى PATH و تحديد متغير مجلد البريد.

التهيئة الافتراضية للوحة المفاتيح توفر العديد لتطلبه. في الحقيقه يقوم readline بالتعامل مع هذا. و هو حزمة مستقله تقوم بالتعامل مع واجهة سطر الأوامر ، بتوفير تاريخ للأوامر و توفير إكمال لأسماء الملفات، و بالإضافة لبعض المميزات المتقدمة. و هو مجمع افتراضيا بداخل باش.يتم تنسيق readline بواسطة الملف.inputrc في مجلدك الرئيسي، يمكن استخدام متغير INPUTRC لتخطي هذا في باش. مثلا في ريد هات 6 تم تحديد INPUTRC لـ /etc/inputrc في /etc/profile. معنى هذا أن زر التراجع و الخذف و زر home و end سوف تعمل بشكل جيد للجميع.

بمجرد قيام باش بقراءة ملف تنسيقات النظام بكامله سوف يبحث عن ملف تنسيقاتك الشخصي. سيقوم بالتحقق في مجلدك الرئيسي للبحث عن .bash_profile, .bash_login و .profile. و يقوم بتشغيل أولواحد منهم سيجده. إذا أردت تغيير طريقة تصرف باش بالنسبة لك فقط بدون التأثير على الآخرين على النظام قم بذلك من هنا. مثلا يوجد العديد من التطبيقات التي تستخدم متغيرات معينه ليتحكم في طريقة عمله. يوجد لدي قيمة المتغير EDITOR محدده إلى vi لكي أستطيع استخدام vi في Midnight Commander ( مدير ملفات ممتاز لسطر الأوامر) بدلا من محرره.

11.2 التمارين

أساسيات باش سهلة التعلم و لكن لا تتوقف عند هذا الحد يوجد عمق هائل له. حاول التعود على محاولة الحصول على طرق أفضل لأداء أي شئ.

إقرأ سكربتات الغلاف، ابحث عن أشياء لا يمكنك فهمها.

11.3 لمزيد من المعلومات

يوجد مع هذا ``Bash Reference Manual'' و لكنه كبير و عميق. يوجد كتاب O'Rielly عن الباش، لست متأكد من جودته ليس لدي علم عن أي دروس مجانيه حديثه عن الباش، إذا كان لديك برجاء إرسالها إلي. المصدر البرمجي، راجع Building a Minimal Linux System from Source Code للحصول على وصلات

12 الأوامر

12. الأوامر

يتم أداء معظم العمليات في الباش بواسطة الاوامر مثل cp. معظم هذه الاوامر هي برامج صغيره بالرغم من أن البعض مثل cd مبنية بداخل الغلاف

تأتي الأموار في حزم، معظمها من منظمة البرمجيات الحرة GNU. بدلا من أن أضع الاومر هنا سوف أرشدك لـ Linux From Scratch HOWTO. يوجد بها قائمة حديثه بالحزم التي تأتي مع نظام لينوكس و مع ارشادات لكيفية استخدامهم.

13 الخاتمة

13.الخاتمه

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