كيفية استخدام الأوامر الأولية في لينكس

Init هو أصل كل العمليات. دوره الأساسي هو إنشاء العمليات من برنامج نصي مخزن في الملف / etc / inittab (انظر inittab (5)). عادةً ما يحتوي هذا الملف على إدخالات تؤدي إلى إنشاء spytn على كل سطر يمكن للمستخدمين تسجيل الدخول إليه. كما أنه يتحكم في العمليات الذاتية التي يتطلبها أي نظام معين.

مستويات التشغيل

مستوى التشغيل هو تكوين برنامج النظام الذي يسمح بوجود مجموعة محددة من العمليات فقط. يتم تعريف العمليات الناتجة عن init لكل من هذه المستويات في الملف / etc / inittab . يمكن أن يكون Init في واحد من ثمانية runlevels: 0-6 و S أو s . يتم تغيير مستوى التشغيل من خلال امتلاك مستخدم مميز لـ telinit ، والذي يرسل إشارات مناسبة إلى init ، لإخباره مستوى التشغيل المطلوب تغييره.

يتم حجز Runlevels 0 و 1 و 6 . يستخدم Runlevel 0 لوقف النظام ، ويستخدم مستوى التشغيل 6 لإعادة تشغيل النظام ، ويستخدم مستوى التشغيل 1 للحصول على النظام لأسفل في وضع المستخدم المفرد. ليس من المفترض استخدام Runlevel S بشكل مباشر ، ولكن أكثر للبرامج النصية التي يتم تنفيذها عند الدخول إلى مستوى التشغيل 1. لمزيد من المعلومات حول هذا الأمر ، انظر إلى manpages من أجل إيقاف التشغيل (8) و inittab (5).

Runlevels 7-9 هي أيضا صالحة ، على الرغم من عدم توثيقها حقا. وذلك لأن المتغيرات "التقليدية" يونيكس لا تستخدمها. في حال كنت فضوليا ، فإن سليلوز S و s هما في الواقع نفس الشيء. داخليا هم أسماء مستعارة لنفس مستوى التشغيل.

تمهيد

بعد استدعاء init كخطوة أخيرة من تسلسل تمهيد kernel ، فإنه يبحث عن الملف / etc / inittab لمعرفة ما إذا كان هناك إدخال من نوع initdefault (راجع inittab (5)). يحدد الإدخال initdefault مستوى التشغيل الأولي للنظام. إذا لم يكن هناك مثل هذا الإدخال (أو لا / etc / inittab على الإطلاق) ، يجب إدخال مستوى التشغيل في وحدة تحكم النظام.

يقوم Runlevel S أو s بإحضار النظام إلى وضع المستخدم الفردي ولا يتطلب ملف / etc / inittab . في وضع المستخدم المفرد ، يتم فتح shell root على / dev / console .

عند الدخول إلى وضع المستخدم المفرد ، يقرأ init حالات (2) ioctl لوحدة التحكم من /etc/ioctl.save . في حالة عدم وجود هذا الملف ، تهيئة init السطر في باود 9600 ومع إعدادات CLOCAL . عندما يترك init وضع مستخدم واحد ، فإنه يخزن إعدادات ioctl لوحدة التحكم في هذا الملف حتى يمكنه إعادة استخدامها في جلسة المستخدم المفرد التالية.

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

عند بدء عملية جديدة ، يقوم init أولاً بالتحقق من وجود الملف / etc / initscript . إذا كان كذلك ، فإنه يستخدم هذا البرنامج النصي لبدء العملية.

في كل مرة ينهي الطفل ، يسجل init الحقيقة والسبب في أنه مات في / var / run / utmp و / var / log / wtmp ، شريطة وجود هذه الملفات.

تغيير Runlevels

بعد أن تكون قد أنتجت جميع العمليات المحددة ، تنتظر init واحدة من عملياتها الأصلية للموت ، أو إشارة توليد الطاقة ، أو حتى يتم الإشارة إليها بواسطة telinit لتغيير مستوى تشغيل النظام. عند حدوث أحد الشروط الثلاثة المذكورة أعلاه ، فإنه يعيد فحص الملف / etc / inittab . يمكن إضافة الإدخالات الجديدة إلى هذا الملف في أي وقت. ومع ذلك ، init لا يزال ينتظر أحد الشروط الثلاثة المذكورة أعلاه تحدث. لتوفير استجابة فورية ، يمكن أن يقوم الأمر telinit Q أو q بتنبيه init لإعادة فحص ملف etc / inittab .

إذا لم يكن init في وضع المستخدم الفردي ويتلقى إشارة Powerfail (SIGPWR) ، فإنه يقرأ الملف / etc / powerstatus . ثم يبدأ الأمر بناء على محتويات هذا الملف:

فشل)

السلطة فشلت ، UPS توفر الطاقة. تنفيذ إدخالات powerwail و powerfail .

حسنا)

تمت استعادة الطاقة ، وتنفيذ إدخالات powerokwait .

منخفض)

الطاقة فشلت و UPS لديها بطارية منخفضة. تنفيذ إدخالات powerfailnow .

إذا لم يكن / etc / powerstatus موجودًا أو يحتوي على أي شيء آخر ، فالأحرف F أو O أو L ستعمل كما لو كانت قد قرأت الحرف F.

استخدام SIGPWR و / etc / powerstatus غير مشجع. يجب على أي شخص يرغب في التفاعل مع init أن يستخدم قناة التحكم / dev / initctl - انظر الكود المصدري لحزمة sysvinit لمزيد من الوثائق حول هذا.

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

Telinit

/ sbin / telinit مرتبط بـ / sbin / init . يستغرق وسيطة أحرف واحدة وإشارات init لتنفيذ الإجراء المناسب. تعمل الحجج التالية بمثابة توجيهات للتليفزيون :

0 أو 1 أو 2 أو 3 أو 4 أو 5 أو 6

اطلب من init التبديل إلى مستوى التشغيل المحدد.

أ ، ب ، ج

أخبر init بمعالجة مدخلات الملف / etc / inittab فقط التي تحتوي على مستوى التشغيل a أو b أو c .

س أو ف

اطلب من init إعادة فحص ملف etc / inittab .

ق أو ق

اطلب من init التبديل إلى وضع المستخدم الفردي.

يو أو

اطلب من init إعادة تنفيذ نفسه (الحفاظ على الحالة). لا إعادة فحص ملف / etc / inittab يحدث. يجب أن يكون مستوى التشغيل أحد Ss12345 ، وإلا سيتم تجاهل الطلب بصمت.

يمكن لـ telinit أيضًا أن تخبر init متى يجب الانتظار بين إرسال إشارات SIGTERM و SIGKILL. الافتراضي هو 5 ثوان ، ولكن هذا يمكن تغييره مع خيار -t ثانية .

يمكن استدعاء telinit فقط من قبل المستخدمين ذوي الامتيازات المناسبة.

يتحقق الشيك الثنائي init إذا كان init أو telinit بالنظر إلى معرف العملية الخاص به؛ رقم تعريف عملية init الحقيقي هو دائما 1 . من هذا يتبع ذلك بدلاً من استدعاء telinit يمكن أيضاً استخدام init بدلاً منه كاختصار.