4.3 نظرة تشريحية :لينكس تحت المجهر | كتاب لينكس الشامل | >> |
عند تشغيل الحاسوب يتم تشغيل BIOS نظام الإدخال والإخراج الأساسي يقوم بعد الرام وفحص الأشياء الأساسية. ثم يبحث ال BIOS عن برنامج الإقلاع بتسلسل معين يحدده برنامج إعداد ال BIOS وغالباً ما يكون القرص المرن فالمدمج فالصلب أو في الأجهزة الأكثر أماناً الصلب أولاً، ولكن أين وعن ماذا يبحث؟ في أول قطاع من كل قرص يوجد منطقة اسمها Boot record أي سجل الإقلاع يتم قراءة ذلك القطاع والتأكد من أنه يحمل توقيع ( يسمى Magic Num ) فإذا وجده وضع القطاع في الذاكرة ونفذه إذا لم يجده انتقل إلى القرص التالي وإذا لم يجده أبداً يطبع رسالة تفيد ذلك. بالنسبة للأقراص الصلبة فإن كل قسم منها يحتوي على مثل هذا السجل ولكن لا يتم قراءة أي منها لأن هناك سجل اضافي للقرص كاملاً يسمى جل الإقلاع المتسيد Master Boot Record وللاختصار MBR هو الذي يتم قراءته .
يمكنك أن تصل قرصين صلبين على الحزام الواحد بمقبس IDE على اللوحة الأم، ويوجد عادةً متسع على اللوحة الأم لوصل حزامين أي أنك تصل 4 أقراص باللوحة الواحدة (دون اضافات) تكون مقابس IDE مرقمة الرقم الأصغر يسمى primary أولي والتالي يسمى secondary ثانوي ، ولكن كيف تحديد أي القرصين المرتبطين مع الأولي يأتي أولاً؟ يتم اختيار ترتيب الأقراص المرتبطة على الحزام الواحد بطريقة فيزيائية باستعمال Jumper وهو قطعة معدنية مغلفة بعازل توضع في مكان محدد على القرص الصلب فتوصل دارات لتحدد فيما لو كان القرص سيد Master أم عبد Slave. تكون طريقة وضع ال Jumper مطبوعة على القرص نفسه وتحددها الشركة الصانعة.
في لينكس نسمي القرص الأولي السيد Primary Master باسم hda
والعبد الأولي Primary Slave باسم hdb
والسيد الثانوي hdc
والعبد الثانوي hdd
ونسمي القسم الأول من hda
باسم hda1
في كل مرة تشبك قرص أو تبدل قرص مكان قرص عليك الدخول على برنامج إعداد ال BIOS لتعريفه وبعض أنواع ال BIOS يمكن إعدادها بحيث تفحص نوع القرص تلقائياً في كل حالة اقلاع ولكن هذا يأخذ وقتاً على أي حال لينكس ليس بحاجة لل BIOS فهو يعرف الأقراص تلقائيا حتى لو لم يعرفها ال BIOS وبوقت أقل من ال BIOS ولكن هذا الإجراء لنظام ويندوز ، إذا لم تكن تتعامل معه ضع كل الأقراص عدا قرص لينكس غير موجودة في BIOS!!
القرص الذي يبحث في BIOS عن MBR هو Primary Master أي hda
فقط.
يحتوي ال MBR على برنامج صغير جدا ( محدود بحجم القطاع وهو 512 بايت) يسمى Boot loader وبالتحديد first stage boot loader
قد يكون برنامج ال boot-loader برنامج يسألك اي الأنظمة تريد أن تقلع مثل برنامج BootMagic الشهير وغيره ولكن في ويندوز أو دوس يكون غبي وغير تفاعلي لديه عنوان command.com و io.sys و msdos.sys يقوم يتحميلها وتنفيذها فقط دون أن يأخذ بعين الإعتبار الأقسام الأخرى والأنظمة الأخرى كما لا يمكنه تمرير أي معلومات للنظام لهذا نقول أن ويندوز ليس Multi-boot system وأكثر من ذلك فإن له العيوب التالية:
في لينكس فهناك برامج مثل lilo و grub و isolinux .
أولها LILO (أي LInux LOader) هو الأكثر انتشارا ويمكنه عمل
قائمة نصية أو رسومية بدقة 640 في 480 ب 16 لون BMPأو 320 في 200 لون PCX
يمكنه تحميل لينكس وتمرير معلومات له وتحميل ويندوز وعمل
بعض الخدع لويندوز مثل الإقلاع من قرص افتراضي (الدي أو الإي)
عن طريق اخفاء القرص الأساسي ( السي )
ولكن عند اجراء أي تعديل على أي من الملفات التي يستعملها مثل الصورة
فانه يتوجب عليك إعادة تركيبه بتنفيذ lilo
و أنت جذر ليجدد معلوماته
ويأخذ الاحداثيات الجديدة للملفات.
grub (أي Gnu ) وهو برنامج يهدف أولا للقضاء على lilo أو استبداله وثانياً إقلاع لينكس يوفر الكثير من المزايا اضافة لما يوفره lilo مثل الكذب على ويندوز باخفاء الأقسام وإمكانية تمرير معلومات ليس إلى لينكس فقط بل وإلى انظمة اخرى مثل OS/2 و شبيهات unix مثل BSD ويمكنه الدخول إلى أنظمة الملفات fat و ext3 و ext2 وغيرها أي لا ضرورة لإعادة تركيبه عند تعديل الصورة أو الملف الخيارات ويمتاز بأنه يستطيع إقلاع أنظمة غير موجودة في القائمة
isolinux يستخدم لإقلاع القرص المدمج أو برامج ال setup وهو غير شائع للحالات العادية
loadlin برنامج يعمل في ظل دوس ولا يعمل في ويندوز يستطيع وضع نواة لينكس في الذاكرة ثم ازالة كل شيء عدا ذلك ثم الاقلاع وهو يستعمل للذين لايريدون اعادة تقسيم القرص الصلب وتغيير ال boot loader ويأتي مع بعض التوزيعات مثل SOT
يمكن للينكس الإقلاع دون boot loader ولكن ستخسر امكانية تمرير بعض المعلومات له إذا أردت تجربة ذلك ضع قرص مرن ثم اكتب في لينكس الأمر التالي
bash# dd if=/boot/vmlinuz of=/dev/fd0 bs=1024
kernel panic : can't find root file system
النواة تكون عادة موجودة في مجلد boot وهي نوعان vmlinuz او bz2Image تبعا لطريقة الضغط المتبعة ملفات bz2 تستخدم للأنوية العملاقة التي تحتوي الكثير من التعريفات أو كل التعريفات عادة يكون الملف vmlinuz هو وصلة لإصدارة محدد من النواة مثلاً vmlinux-2.4.24 هذه أمثلة على بعض اسماء الأنوية
/boot/vmlinuz /boot/vmlinuz-2.4.18 /boot/vmlinuz-2.4.20-mdk-9 /boot/bz2Image /boot/bz2Image-2.4.18 /boot/bz2Image-2.4.20-ErrorMsg-3
بعد أن يحمل برامج الإقلاع boot loader النواة يمرر لها بعض الخيارت ثم ينفذ النواة وكل خيار لم يتم ذكره يستعمل القيم الإفتراضية لمعرفة القيم الإفتراضية أو تغيرها استعمل هذه الخمسة أوامر rdev و swapdev و ramsize و vidmodeو rootflags التي تعني
bash$ man rdev bash$ rdev /boot/vmlinuz
يستخدم قرص الرام لعمل rescue disk أو لإضافة تعريفات لأشياء ضرورية
قبل تحميل نظام الملفات الجذري
مثلا النواة في RedHat 8.0 لا تدعم ext3 والنظام الجذري هو ext3
فكيف يمكن أن يقرأ نظام الجذري الطريقة أنه يعمل صورة لقسم صغير من نوع ext2 المدعوم
من النواة ويوضع فيه ملف initrd أي قرص الرام الاستهلالي init ram disk يحتوي على تعريف ext3.
يمكن عمل initrd بواسطة mkinitrd أو يدوياً كما في عمل ram disk في الفصل التالي.
وعلى الرغم من كون initrd هو ram drive إلى أنها لا يمرر عن طريق
rdev
بل عن طريق برنامج الإقلاع lilo مثلاً مما يعني أن برنامج
هو المسؤول عن تحميله باستخدام ال BIOS لقراءة هذا الملف وتمريره للنواة.
بعد أن تضمه النواة على أنه الجذر يتم تنفيذ ملف linuxrc
الذي يفترض أن يحتوي على العمليات اللازمة لتمكين النواة
من رؤية النظام الجذري الحقيقي مثل تحميل تعريف ext3 عبر modprobe
في حالة أن النواة لا تحتوي تعريفاً مثبتاً فيها له
أو تحميل تعريف الإيثرنت و أخذ عنوان (عبر dhcp) تمهيداً
لضم نظام جذري عبر الشبكة NFS أو عمل losetup لإعداد
إلى ماذا يشير جهاز /dev/loop0
وما نوع التشفير
... وغيرها من الحالات الخاصة التي يكون النظام الجذر
غير جاهز/متوفر ويحتاج لإعداد معين قبل تحميله.
وبهذا يمكن الآن أن يقرأ نظام الملفات الجذري
فتقوم النواة بتحويل الدليل الجذر الحالي من initrd إلى الجذر
الذي مرر عبر خيار root من برنامج الإقلاع أو rdev.
ويتم ضم initrd إلى دليل /initrd
في البيئة الجديدة (يجب أن يكون موجوداً).
بالنسبة لقيام ريدهات بعمل initrd من أجل ext3 فأنا غير مقتنع بهذه الخزعبلات
لماذا لا يضعون تعريف ext3 داخل النواة ويريحونا من هذه اللفة الطويلة
خصوصاً وأنها لا تدعم أن يكون النظام الجذر reiserfs أو xfs
(أظن أن مبرر ريدهات هو دعمهم ل LVM و RAID ولكن لم أقتنع بكونهم لا يضعون النظام الوحيد{بإهمام ext2 } الذي يدعمون داخل النواة مباشرة)
أما الأشياء الأخرى التي يمكن تمريرها فهي كثيرة منها
root=/dev/hda7 | اعتبار أن القسم hda7 هو الدليل الجذر |
ro | للقراءة فقط لكي تتمكن من فحصه ثم يتحول إلى قراءة وكتابة |
rw | قراءة وكتابة |
load_ramdisk=1 | تفعيل قرص رام (اجعلها صفر لتثبيط هذا الخيار) |
prompt_ramdisk=1 | تعطيك فرصة لتبديل الأقراص وإدخال القرص الثاني عند عمل rescue disk |
ramdisk_size=4096 | تحديد حجم قرص رام بمقدار 4096 كيلوبايت |
ramdisk_start=400 | تحديد مكان قرص رام بمقدار 400 كيلوبايت عن بداية القرص المرن |
init=/bin/init | تمرر اسم البرنامج الذي سيتم تشغيله أولا |
mca-pentium | تحتاجه لجهاز IBM-95 Microchannle لأنه يحتوي على عيب صناعي يتم تلافيه بها |
panic=10 | إعادة تسغيل الجهاز تلقائيا بعد 10 ثواني من حدوث الخلل panic مثل طلبت منه أن يبوت على hda8 ولكن لايوجد hda8 |
quiet | يجعل الكيرنل لا تطبع شيء ، يمكن الإطلاع على الرسائل في ما بعد بأمر dmesg |
reboot=warm | تجعل لينكس يخبر ال BIOS بأن لا تعد الرام،وتفحص الأقراص.. عند اعادة التشغيل وهي عكس ال cold |
vga=ask | تجعل لينكس يسأل عن طور الشاشة المطلوب(عدد الأعمدة والأسطر) عند بدء التشغيل |
ram=64m | بعض BIOS القديمة توهم النظام بأن الرام أقل مما هي عليه نستعمل هذا الخيار لنحدد الحجم الحقيقي لذاكرة رام RAM، المثال 64ميغا-بايت |
hda=cyl,head,sec | في حال رغبتك في تمرير قيم مختلفة عن ما يتم فحصه لعدد قطاعات القرص ... |
sound=sound-driver | تمرير كرت الصوت وهو يستخدم لكروت non-PNP ISA وهي قديمة جدا |
idle=poll | تزيد من سرعة الجهاز واستهلاكه للكهرباء في حال استخدام أكثر من معالج SMS |
تعمل النواة على فحص كل شيء القرص الصلب والسي دي وكروت الشبكة
أو إذا كان هناك معلومة تم تمريرها عن طريق ال boot loader يستعملها ولا يفحص.
حتى الآن لم يعمل ضم mount للدليل الجذر.
ثم تبحث النواة عن صورة مضغوطة لنظام ملفات جذري على شكل قرص رام ram drive مدموج معها
(إن وجد وطلب منها ذلك)
ثم تضمه mount على أنه الدليل الجذر ويمكن عمل هذه الصورة
بعمل ملف بالحجم المطلوب باستعمال dd
ثم تحويله
إلى تهيئته ليحمل نظام ملفات mke2fs
أو
mkfs.minix
ثم ضمه ووضع الملفات المطلوبة
فيه ثم إزالة الضم وضغطه ثم دمجه مع النواة.
الطريقة التالية توضح كيفية عمل قرصص إنقاذ
يحتوي على bash فقط.
الطريقة التالية تعليمية فقط وغير عملية لعمل قرص إنقاذ كامل الأدوات هناك بديل جاهز عنها
إنتبه: هذه الطريقة لاتؤذي التوزيعة الموجدة ولكن الخطأ في طباعة الأوامر يقوم بذلك !!
bash$ su bash# dd if=/dev/zero of=~/fsImage bs=1024 count=4096 4096+0 records in 4096+0 records out bash# mkfs.minix ~/fsImage bash# mkdir /mnt/test bash# mount -o loop -t minix ~/fsImage /mnt/test bash# cd /mnt/test bash# mkdir bin usr tmp var proc sbin lib etc bash# cp /bin/bash /mnt/test/bin/ bash# cd /mnt/test/bin && ln -s bash init bash# cd /mnt/test/sbin && ln -s ../bin/init init
لاحظ أننا هنا عملنا وصلة من bash باسم init لهذا عندما تأتي النواة لتشغيله سيعمل سطر الأوامر bash ولن يسأل عن كلمة سر أو يعطيك أجهزة إفتراضية أو يتعامل مع CTRL+ALT+DEL لأنه باش وليس init
bash# ldd /bin/bash # انسخ كل المكتبات التي ظهرت bash# cp -avi /lib/libc.*so* /mnt/test/lib bash# cp -avi /lib/ld.so /mnt/test/lib bash# cp -avi /lib/libncurses.*so* /mnt/test/lib bash# umount /mnt/test bash# gzip -9 < ~/fsImage > ~/fsImage.gz
floppy.img
الذي سينتج من دمج
vmlinuz
مع ~/fsImage.gz
سيتسع على القرص
وأن النواة معدة كما ذكرنا لتأخذ قرص رام من نوع minix
ثم نفذ ما يلي
bash# dd if=/boot/vmlinuz-old-with-minix-support of=/dev/fd0 bs=1k 389+0 records in 389+0 records out bash# dd if=fsImage.gz of=/dev/fd0 bs=1k seek=400 bash# rdev /dev/fd0 /dev/fd0 bash# rdev -r /dev/fd0 `expr 16384+400`
/dev/fd0
ونحدد أنه على بعد 400 (الرقم 16384 يكافئ load_ramdisk=1
)
ويمكنك أن تعمل صورة لقرص مرن مثل المحترفين(كتلك التي تأتي
مع أقراص توزيعتك في حال لم يقلع القرص المدمج) بكل بساطة
ضع ~/floppy.img
مكان /dev/fd0
واجعل سطر rdev كما يلي
rdev ~/floppy.img /dev/fd0
.
أما عمل قرصي إقلاع أحدهما النواة والآخر هو قرص رام(لأن قرص واحد لا يكفي) فيكون
bash# dd if=/boot/vmlinuz-big-new of=/dev/fd0 bs=1k #ضع لاصق "القرص الأول" ثم ضع قرص آخر bash# dd if=fsImage.gz of=/dev/fd0 bs=1k bash# rdev /dev/fd0 /dev/fd0 #ضع لاصق "القرص الثاني"؛ bash# rdev -r /dev/fd0 49152
load_ramdisk=1,prompt_ramdisk=1
لاحظ أن الحجم هو 4 ميغا غالبا لا تكفي لوضع الأدوات الأساسية(مثل initوshوls..) ولا حتى المكتبات لذا استعمل برنامج besybox وهو برنامج واحد يقوم بوظيفة الكثير من البرامج المعروفة ويتم ذلك بعمل وصلات منه بأسماء مختلفة فعند تنفيذه باسم ls يقوم بعمل ls !! وهكذا نوفر مساحة تلك البرامج
ملاحظة : لا تخلط بينه وبين initrd لأنه في حالة ramdisk يكون ال root=/dev/ram
ويتم قراءته بواسطة النواة kernel وبإعدادات rdev أما في حالة initrd يكون الجذر عادياً root=/dev/hda7 أي القرص مثلاً.
وقبل عمل Mount له يتم تحميل initrd والتعريفات المطلوبة.
في حالة ramdisk يتم تنفيذ init أما في حالة initrd يتم تنفيذ linuxrc.
وعادة ما يكون initrd موجود في /boot/initrd-ver
باختصار ال initrd يكون موجود على مكان في ال root-file-sytem اما الآخر فيكون هو ال root-file-system
نعود للحديث عن إقلاع نظام لينكس، وكنا قد وصلنا إلى أنه يبحث عن قرص رام ram disk فإذا لم يجده أو طلبت منه أن لا يبحث عنه يتم عمل mount لنظام الملفات الجذر ويفضل أن يكون ro أي read only لعمل فحص له إذا كان بحاجة لذلك وهذا ضروري إلا إذا كنا نتحدث عن ram disk موجود على rescue disk فهو يكون rw أي read and write والسبب في كونه يجب أن يكون ro لأن نظام لينكس متعدد المهام فإذا كان النظام للقراءة والكتابة والنظام يفحص ربما يكون هناك برنامج يكتب في الملف الذي يفحص الآن مما يؤدي إلى حدوث أخطاء.
الآن تبحث النواة عن برنامج init الموجود في bin أو sbin
أي /bin/init
أو /sbin/init
ويتم تمرير كل شي لم تفهم النواة من المعلومات التي مررت إليها عن طريق برنامج الإقلاع
boot loader وهي غالباً عن رقم المستوى run level وهو رقم من 1إلى 5 .
المستوى صفر وستة يستخدمان لإغلاق الجهاز أو إعادة تشغيله
root=/dev/hda7 ro 2
فإن النواة ستفهم كل شيء عدا 2 فترسل إلى init رقم 2
يقوم برامج init بقراءة الملف inittab الموجود في etc
أي /etc/inittab
يمكنك أن تقرأ كتيب هذا الملف بكتابة الأمر
man inittab
كل سطر (عدا التعليقات) تكون على الصيغة
[ID]:[RUNLEVEL]:[ACTION]:[COMMAND]
معرّف(لا معنى له) فرقم مستويات التشغيل فمحدد لمتى أو كيف ينفذ الأمر
(يحدد معنى السطر كله)
يمكن أن تكون نفذه مرة عند الإقلاع (بغض النظر عن المستوى) sysinit
أو نفذه وانتظر حتى ينتهي عند عند دخول/خروج المستوى wait
نفذه عند إغلاق الجهاز shutdown أو عند الضغط على ctrlaltdel
أو عند انقطاع الكهرباء powerfail أو عودتها powerokwait
أو نفذها مرة واحدة once أو أعد تشغيلها كلما انتهت respown
ثم الأمر. ويفصل بينهم نقطتين رأسيتين ‘:‘ منها
سطر يشير إلى رقم المستوى التلقائي default run level
ليتم استعماله في حال لم تمرر النواة رقم وهو سطر يبدو مثل
id:5:initdefault:
يوجد في ملف inittab أسماء برامج نصوص الاستهلال initializeing scripts والتي تسمى نصوص الإقلاع Boot scripts ويقوم باستدعائها ملف يحدده سطر يشبه
si::sysinit:/etc/rc.d/rc.sysinit
unicode_start /usr/lib/kbd/consolefonts/LatArCyrHeb16.pcf.gz
/etc/rc.d/rc.S
: طور المستخدم الوحيد
/etc/rc.d/rc.M
: الطور متعدد المستخدمين
/etc/rc.d/rc.X
: الطور الرسومي
/etc/rc.d/rc
يتم تمرير
رقم المستوى له وعلى ضوئه يتصرف
l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6
/sbin/telinit
ونمرر لها الرقم
يعمل أحد نصوص الإقلاع على تشغيل mount -a
الذي بدوره يقرأ الملف fstab (اي file systems table)
أي /etc/fstab
وهو بالصيغة التالية
# device | mount-point | type | options | dump pass |
/dev/hda7 | / | ext3 | defaults,errors=remount-ro | 0 1 |
/dev/hda1 | /mnt/win_c | vfat | defaults,umask=0 | 0 0 |
/dev/fd0 | /mnt/floppy | auto | defaults,noauto,user | 0 0 |
/dev/cdrom | /mnt/cdrom | iso9660 | defaults,noauto,ro,user | 0 0 |
proc | /proc | proc | defaults | 0 0 |
/dev/hda8 | none | swap | sw | 0 0 |
bash$ man fstab bash$ man mount bash$ mount bash$ cat /proc/mounts bash# su root password : bash# fdisk -l bash# cat /proc/partitions bash# mkdir /mnt/win_c bash# mount /dev/hda1 /mntt/win_c -t auto bash# exit
fdisk -l
تعرض الأقسام الموجودة
وأن الملف /proc/partitions
قلنا أن الملف rc يقوم بتشغيل أو إيقاف كل المراقبات daemons المطلوبة
في ذلك المستوى ويتم ذلك فعلياً من خلال نصوص الملفات (shell scripts)
الموجدة في المجلد المقابل لرقم مستوى التشغيل مثلاً
/etc/rc.d/rc2.d/
(طبعا استبدل 2 بأي رقم آخر)
فيوقف تلك التي تبدأ ب K (اختصار ل‘KILL‘) ويشغل تلك التي
تبدأ ب S (اختصار ل‘START‘)
مثلاً في مستوى 0 أو 6 (إغلاق الجهاز وإعادة تشغيله) كل الملفات تبدأ ب K
أما في 5 تكون كلها تبدأ ب S.
والتي يسمح بتنفيذها(أي أنها تحمل إذن التنفيذ) تسمى هذه الملفات خدمات service
وهما عبارة عن رابط إلى ملف نصي تنفيذي موجود في
/etc/rc.d/init.d/
مثلاً /etc/rc.d/init.d/random
والرابط يكون
/etc/rc.d/rc2.d/S51random
الرقم 51 من أجل التحكم في ترتيب تشغيلها.
يقبل هذا البرنامج معاملاً مثل start و stop و restart و status
فإذا كان مطلوباً أن يوقفه يمرر له stop وإذا كان مطلوباً
أن يشغله يمرر له start
# part of simple rc # take runlevel from argument 1 runlevel=$1 # distro links "/etc/rc$runlevel.d/" to "/etc/rc.d/rc$runlevel.d/" # like /etc/rc.d/rc2.d/ & /etc/rc2.d/ for i in /etc/rc$runlevel.d/K* do [ -x $i ] && $i stop done for i in /etc/rc$runlevel.d/S* do [ -x $i ] && $i start done
[ -x $i ]
تعني افحص هل الملف قابل للتنفيذ
(هل يسمح لي بتشغيله)
إذا نجح الفحص عندها نفذ ما بعد ‘&&‘
الملفات في توزيعتك أكثر تعقيداً لأنها تستعمل وظائف
خاصة لتجميل وترجمة الرسائل. هذه الوظائف موجودة في ملف اسمه
/etc/init.d/functions
مثل وظيفة لطباعة [OK]
بالأخضر عند النجاح و
[Fail]
بالأحمر عند الفشل
وربما في ماندريك المعرب [فشل]
بدلاً من كتابتها في كل ملف.
في العادة تعمل هذه النصوص على إيقاف المراقب من خلال kill
أو تقوم بعملية الإلغاء المناسب مثلاً umount
وللتشغيل تعمل على استدعاء المراقبات daemon مثل talkd أو بعمليات
تفعيل مناسبة مثل mount أو إضافة تعريف module بواسطة insmod أو modprobe .
في الحقيقة تسميته تعريف غير دقيقة لأن module قد يكون طريقة تشفير مثلاً.
التعريفات موجودة في دليل /lim/modules
ثم إصدار النواة uname -r
حيث تجد ملفات o أو ko في الأنوية 2.6 لتشغيل التعريف
modprobe foo
حيث foo اسم التعريف دون الدليل ودون o
لعرض التعريفات الحالية lsmod
و rmmod foo
لإزالة تعريف foo.
لمعرفة وصف لتعريف معين modinfo -d foo
ولمعرفة ما يأخذ من معاملات modinfo -p foo
أما insmod فهي طريقة قديمة لما يقوم به modprobe.
وتأتي كل توزيعة ببرنامج رسومي تفاعلي يعمل على تفعيل/تثبيط كل واحدة
من هذه الخدمات ولكن الفكرة بسيطة كل ما عليك هو عمل
رابط للملف في مجلد كل مستوى التشغيل 2-5 يبدأ اسمه ب S ورقم
مثلاً ln -s /etc/init.d/gpm /etc/rc2.d/S57gpm
ثم إعطاء الإذن بالتنفيذ بكتابة chmod +x /etc/init.d/gpm
للتفعيل. أو منع التنفيذ بكتابة
chmod -x /etc/init.d/gpm
للتثبيط .
مثلاً إذا كنت تريد تشغيل الخدمة gpm في مستوى 2 دون مستوى 5
كل ما عليك هو تغيير اسم من /etc/rc.d/rc5.d/S57gpm
إلى /etc/rc.d/rc5.d/K17gpm
والتأكد من وجود الأول في rc2.d (أختلاف الرقم هو لأن من يشغل أخيراً يغلق أولاً)
يمكن القيام بهذه العملية ببساطة باستعمال الأداة
chkconfig
مثلاً لتفعيل خدمات gpm في المستوى 2 و 3 اكتب
chkconfig --level 23 gpm on
ولتثبيطه في المستويات الباقية
chkconfig --level 01456 gpm off
.
ولتشغيل أي من هذه الخدمات يدوياً (أي دون إعادة الإقلاع) يمكننا بدل
أن نكتب اسم الملف في المجلد /etc/rc.d/init.d/
متبوعاً بالمعامل المناسب الذي غالباً ما يكون
start
و stop
و resart
و state
ولكن يمكنك استعمال الأداة service
متبوعة باسم الخدمة ثم المعامل مثلاً لتشغيل gpm
اكتب service gpm start
.
يلاحظ وجود وصلة باسم /etc/rc1.d
لتشير إلى /etc/rc.d/rc1.d
... إلى آخر الستة مستويات تشغيل ،
كما ونجد وصلة باسم /etc/init.d
تشير إلى /etc/rc.d/init.d
هذه الوصلات موجودة للتوافق بين التوزيعات
حيث قد تكون الوصلات في توزيعة هي الأدلة في أخرى .
ومن الأمثلة على الخدمات services برنامج لتفحص بطارية الجهاز المحمول
وإدارة الطاقة apm وآخر من أجل تعريف الصوت alsa
وآخر من أجل الماوس في ال console (اسمه gpm) وبرامج تعريب ال console (اسمه acon)
ثم يتم تشغيل عدد من الطرفيات الوهمية VT (أي Virtual Terminal) وهي شاشات من منفصلة يتم التنقل بينها ب ctrl+alt+Fn ( و Fn هي F1 F2 F3 ...) يتحكم في عددها مجموعة من الأسطر في ملف inittab وهذا مثال
1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6
/sbin/mingetty tty1
فهي اسم البرنامج الذي سينفذ، أما respawn تعني أنه إذا أُغلق هذا البرنامج
فإن init سوف يقوم بتشغيله مرة اخرى
إن ttyN (مثل tty1 ) عبارة عن الجهاز الذي يمثل ال VT لتفهم ذلك جرب الأوامر التالية
Press ctrl+alt+F1 and login bash$ echo "Hello Ali" Hello Ali bash$ echo "Hello Ali" >> /dev/tty2 Nothing printed , press ctrl+alt+F2 ,and woo
قلنا أن هناك عدد من الطرفيات VT تشغل برنامج getty وعادة يكون mingetty مهمتها عرض رسالة ترحيبية
(
وهي موجودة في ملف
/etc/issue
ويمكنها أن تحتوي ألوان
لا تتعب نفسك في تغيرها لأن هناك بعض الأسطر في rc.sysinit تعيدها إلى ما كانت عليه
والسبب طبعاً أن هذه الرسالة في غالب تحتوي اسم
وإصدار النواة والتي قد تتغير لهذا تقوم نصوص الإقلاع بإعادة
تكوين هذا الملف
)
ثم تسأل المستخدم
عن اسم الدخول و كلمة السر ثم التحقق من أن الكلمة صحيحة وتشغيل البرنامج الافتراضي
وهو عادة مفسر لغة bash الذي تستخدمه لإدخال الأوامر
، طبعا يبدأ من الدليل البيت home folder و الملف الذي يتحكم في ذلك هو passwd قد تجد فيه شيئا كهذا
root:x:0:0::/root:/bin/bash operator:x:11:0:operator:/root:/bin/bash shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt myname:x:1000:100:mygroup:/home/myname:/bin/bash
أنا لا أتحدث هنا عن الدخول من الواجهة الرسومية X وإنما الدخول إلى runlevel 2 أو الضغط على ctrl+alt+Fn
bash$ passwd LOGIN
600
وأن يكون مملوك للمستخدم الجذر (المجموعة غير مهمة)
bash# ls -l /etc/passwd -rw-r--r-- 1 root root 30 FEB 2003 passwd bash# chmod 600 /etc/passwd bash# chown root:root /etc/passwd ls -l /etc/passwd -rw------- 1 root root 30 FEB 2003 passwd
عند كل الدخول إلى bash يتم تنفيذ الملفات التالية
/etc/profile /etc/profile.d/*.sh (only exectable) ~/.bashrc
export PATH=/bin:/usr/bin:/sbin:/usr/sbin:. alias ls="ls --color -F -h" alias df="df -h" alias cp="cp -i"
وبمجرد تشغيل getty من هنا وقبل أن تدخل اسمك تعمل الشاشة$الرسومية من هناك هذا إذا كنا في runlevel 5 وذلك لأن ملف inittab به سطر يشبه (السطر من slackware)
x:5:respawn:/etc/rc.d/rc.X
if [ -x /usr/bin/gdm ] /usr/bin/gdm elseif [ -x /usr/bin/kdm ] /usr/bin/kdm elseif [ -x /usr/bin/xdm ] /usr/bin/xdm else echo "error blah blah" fi
ينفذ startx الملف ~/.xinitrc
أو /etc/X11/xinitrc
أما xdm
فالملف الخاص به هو /etc/X11/Xsession
أو /etc/X11/xinit/xinitrc
و Xclients
في برنامج تركيب توزيعة ريدهات 7.x
تظهر صورة بِطريق قبل دخول إكس ؟! أيضاً في توزيعة ماندريك
منذ 8.2 (وربما قبل) عند إقلاع التوزيعة وأثناء تحميل الخدمات تجد خلفية
زرقاء رسومية ومؤشر progress bar رسومي حتى قبل دخول إكس وبعد الخروج منه!
وفي الكثير من Live CD's تجد في سطر الأوامر الحقيقي console
يوجد ظل بِطريق كما أن هناك عدد كبير من الأسطر!
هذا بواسطة frame buffer device وكأي جهاز آخر يمكن تعريفة بواسطة
module موجود في دليل video اكتب ls /lib/module/`uname -r`/kernel/video
يمكن إضافته بواسطة modprobe. وربما تجد تعريف عام vesa موجود ضمن النواة
(دون الحاجة ل modprobe)
يتم تفعيله بتمرير vga=0301
إلى النواة عبر برنامج الإقلاع
lilo أو grub. قد تحتاج تمرير video=XXXX
لتحميل تعريف غير القياسي. الرقم 0311 بالست-عشري
(يدل عليه وجود الصفر)
هنا هو لتحديد الكثافة النقطية
لتكون 640x480x16
و يمكن أن نستعمل العشري 785.
هذا جدول بالست-عشري
Colours 640x400 640x480 800x600 1024x768 1152x864 1280x1024 1600x1200 --------+-------------------------------------------------------------- 4 bits | ? ? 0302 ? ? ? ? 8 bits | 0300 0301 0303 0305 0161 0307 031C 15 bits | ? 0310 0313 0316 0162 0319 031D 16 bits | ? 0311 0314 0317 0163 031A 031E 24 bits | ? 0312 0315 0318 ? 031B 031F 32 bits | ? ? ? ? 0164 ?
fbset -i
والخيار x لعرض معلومات عن التزامن (تلزم في إكس)
لإختيار أحد الأطوار يكفي ذكر اسمه (موجودين في /etc/fb.modes
)
مثلاً fbset 800x600@65
.
الخيار g متبوع بالأبعاد والأبعاد الافتراضية والعمق اللوني (بت) مثل
fbset -g 800 600 800 600 16
الخيار move متبوع بأحد الإتجاهات right أو left أو up أو down
ثم بالخيار step لتحديد المقدار من أجل تحريك الجزء المرئي لتوسيطه.
الخيار accel متبوع ب true أو false لتفعيل أو تثبيط التسريع.
إذا كان هناك أكثر من بطاقة عرض حدد أيها بالخيار fb متبوعاً بالجهاز مثلاً
fbset -i -fb /dev/fd0
انظر كتيبات fbset(1) fb.modes(5) fbdev(4)
<< السابق | كتاب لينكس الشامل | التالي >> |