مضى على الشبكة و يوم من العطاء.

تمهيد : الوحدة الثالثة والمدير التنفيذي !

الحالة
مغلق و غير مفتوح للمزيد من الردود.

الطاييرالطايير is verified member.

.:: اداري سابق ::.
.:: اداري سابق ::.

firefox
linux

السمعة:

1725541104913.webp


course-logo_magic-Unit-3.webp


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

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



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

ثم انتقلنا الى آلية التمهيد والاقلاع الى هذا النظام وفهمنا هذه المراحل الأساسية وهي :

بدأ الـ Firmware : BIOS الذي بدره يقوم بالبحث عن Bootloader وتشغيله ----> بدأ الـ Bootloader الذي بدوره يقوم باعداد الـ Kernel و تحميله ----> تحميل الـ Kernel الذي بدوره يقوم بتشغيل أول عمليه الـ init ----> بدأ عمل الـ init والتحكم في جميع جوانب الجهاز


فالـ init process يمكنك اعتباره المدير التنفيذي الذي يدير لك كل المهام نيابة عنك بناءاً على قراراتك وتوجهاتك

فبعد تشغيل الـ init يقوم بدوره بالتالي :

يقوم الـ init بتشغيل المهام الاساسية مثل الـ Network و الـ Bluetooth وهكذا --> ثم يقوم بتشغيل الـ Display manager --> الذي بدوره يقوم بتشغيل الـ Display Server --> الذي يقوم بدوره ببدأ جلسة الـ Desktop Environment --> وهنا يبدأ عمل الـ GUI أو الواجهة الرسومية المعتادة


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

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


وقبل أن نبدأ يجب التركيز على مفهومين أساسين (يجب دائماً أخذهم في الإعتبار) :

١. كمدير لنظام لينكس فلك كامل السيطرة على جميع جوانب ووظائف وعمليات النظام .
٢. يمكنك السيطرة على جميع الجوانب لأن جميع العمليات على النظام تكون مربوطة بملفات في العموم وملفات التكوين أو الـ Config Files .




اختصاراً ... أنك المتحكم الأول والأخير في كل العمليات التي يقوم بها النظام من أصغرها لأكبرها وبمقدورك التحكم بها من خلال الملفات النصية بطرق مختلفة


ذكرنا منذ قليل بأن الـ init هو المدير التنفيذي للنظام وانك كصاحب النظام لك كامل السيطرة على هذا النظام

فهنا يأتي السؤال الأهم .... كيف يمكنني التحكم والسيطرة على مدير النظام ؟!


تمتاز أنظمة التشغيل المستوحاة من يونكس بكونها تعتمد على عمليات منفصلة، تسمى "الأشباح" (Daemons) و "الخدمات" (Services)، وهي عمليات تعمل في الخلفية دون تدخل مباشر من المستخدم لتوفير وظائف محددة للنظام. هذه العمليات تشمل إدارة الموارد والمهام، وتشغيل التطبيقات الأساسية المهمة لإدارة مهام النظام المختلفة. حيث تلعب هذه العمليات دورًا حيويًا في توفير الخدمات الأساسية للنظام، مثل إدارة الشبكات (الإنترنت، البلوتوث)، وتشغيل التطبيقات (خوادم الويب، قواعد البيانات)، وغيرها . تخيلها كموظفين يعملون في الخلفية على تنفيذ وظائف محدده روتينية لضمان سير عمل النظام بسلاسة .

ودور الـ init او مدير الخدمات : هو برنامج يشبه "رئيس الموظفين" الذي يتولى إدارة هذه الأشباح Daemons . فهو من يقوم ببدء تشغيلها عند بدء تشغيل النظام، وإيقافها عند إيقاف النظام، وإعادة تشغيلها إذا توقفت فجأة. كما أنه يسمح لك بتشغيل أو إيقاف خدمات معينة حسب الحاجة .

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

يمكن التحكم في الخدمات و إدارتها بطريقتين رئيسيتين: الأولى عن طريق كتابة أوامر مباشرة في سطر الأوامر، والثانية باستخدام برامج مخصصة مع ملفات تكوين خاصة بها. الطريقة الأولى تمثل المعايير القديمة مثل SysVinit المعروف أيضًا باسم System V أو مجرد SysV بينما تعتمد الطريقة الثانية على أنظمة حديثة مثل systemd و Upstart. على الرغم من أن SysVinit كان النظام الأكثر شيوعًا في السابق، إلا أن systemd أصبح هو النظام المهيمن في معظم توزيعات لينكس الحديثة. يعتبر مدير الخدمات هو أول برنامج يبدأ العمل عند تشغيل النظام، لذلك يحمل دائمًا (PID) الرقم التعريفي 1

فمثلاً في نظام يستخدم systemd كمدير مهام فنجد في هذا المرفق عند تنفيذ أمر مثل
Bash:
ps aux | less
نجد أن أول عملية يقوم بتشغيلها الـ Kernel وتحمل رقم ١ هي systemd
1725552327471.webp

وقد ذكرنا أن هناك ثلاث أشكال لمدير المهام مثل الـ SysVinit و Upstart و systemd .


نبدأ سريعاً مع SysVinit


يُعَد SysVinit نظام لإدارة خدمات أنظمة التشغيل، وخاصة في توزيعات لينكس المبنية على System V. ويقوم بتنظيم كيفية بدء وتوقف الخدمات المختلفة في النظام، مثل خدمات الشبكة، وقواعد البيانات، وغيرها بناءاً على مستويات التشغيل المختلفة

يقوم SysVinit بتقسيم حالة النظام إلى عدة مستويات تسمى "Runlevels" أو مستويات التشغيل . ولكل مستوى مجموعة محددة من الخدمات التي يجب تشغيلها أو إيقافها وما يرتبط بها من Daemons والمسؤول عن هذا هو البرنامج sbin/init/. ويتم تحديد هذه المستويات بأرقام من 0 إلى 6، ولكل رقم وظيفة محددة:

- Runlevel 0 : إيقاف النظام / Shutdown .

- Runlevel 1 / s / Single : وضع المستخدم الواحد Single-user mode، بدون اتصال بالانترنت أو خدمات غير أساسية (وضع الصيانة) فهو يسمح بتسجيل الـ root أو المسؤول فقط وليس المستخدمين العاديين على النظام .

- Runlevels 2 , 3 or 4 : وضع المستخدم المتعدد Multi-user mode، يمكن للمستخدمين تسجيل الدخول عبر الكونسول أو الشبكة. المستويين 2 و4 لا يستخدمان كثيرًا.

- Runlevel 5 : وضع المستخدم المتعدد مع واجهة رسومية / Multi user with Graphical user interface.

- Runlevel 6 إعادة تشغيل النظام / Restart .


ملف etc/inittab/

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

مثال على تنسيق ملف etc/inittab/

```

id:runlevels:action:process

```
- id : هو رقم فريد للمستوى أو الخدمة كمعرف.
- runlevels : هي الأرقام التي ينتمي إليها هذا المستوى.
- action : الإجراء الذي يجب تنفيذه (بدء، إيقاف، إعادة تشغيل).
- process : البرنامج أو السكريبت الذي يجب تشغيله في مستوى التشغيل المحدد.

الـ id هو اسم عام مكون من أربعة أحرف كحد أقصى يستخدم لتحديد المدخل. الـ runlevels هو قائمة بأرقام المستويات التي يجب تنفيذ إجراء محدد لها. ويحدد مصطلح action كيف سيقوم init بتنفيذ العملية المشار إليها بمصطلح process. والإجراءات أو الـ actions المتاحة هي:

- boot : يتم تنفيذ العملية أثناء تهيئة النظام، ويتم تجاهل حقل runlevels.
- bootwait : يتم تنفيذ العملية أثناء تهيئة النظام وسينتظر init حتى تنتهي لكي يستمر. ويتم تجاهل حقل runlevels.
- sysinit : يتم تنفيذ العملية بعد تهيئة النظام، بغض النظر عن المستوى. ويتم تجاهل حقل runlevels.
- wait : سيتم تنفيذ العملية للمستويات المحددة وسينتظر init حتى تنتهي لكي يستمر.
- respawn : سيتم إعادة تشغيل العملية إذا تم إنهاؤها.
- ctrlaltdel : سيتم تنفيذ العملية عندما يتلقى عملية init إشارة SIGINT، والتي يتم تشغيلها عند الضغط على تسلسل المفاتيح Ctrl+Alt+Del."

مستوى التشغيل الافتراضي أو Default Runlevel - وهو المستوى الذي يتم اختياره إذا لم يتم تحديد مستوى آخر كمعامل لنواة النظام Kernel parameter - يتم تعريفه أيضاً في ملف etc/inittab/ ، في المدخل
id:x:initdefault. حيث يمثل الحرف x رقم مستوى التشغيل الافتراضي. ويجب ألا يكون هذا الرقم 0 أو 6، لأن ذلك سيؤدي إلى إيقاف تشغيل النظام أو إعادة تشغيله فور الانتهاء من عملية الإقلاع."

وتالياً مثال على ملف etc/inittab/ :
1725694865442.webp
شرح بسيط لكل سطر:

- # مستوى التشغيل الافتراضي: هذا السطر يحدد مستوى التشغيل الذي سيبدأ به النظام بشكل افتراضي، وفي هذه الحالة هو المستوى 3.

- # سكريبت التهيئة: هذا السطر يشير إلى السكريبت الذي يتم تنفيذه لتهيئة النظام عند بدء التشغيل.

- # الإجراء المتخذ عند مستوى التشغيل S: هذا السطر يحدد الإجراء الذي يتم تنفيذه عند دخول النظام إلى وضع المستخدم الفردي.

- # تكوين لكل مستوى تشغيل: هذه الأسطر تحدد الإجراءات التي يتم تنفيذها لكل مستوى تشغيل من 0 إلى 6.

- # الإجراء المتخذ عند الضغط على Ctrl+Alt+Del: هذا السطر يحدد الإجراء الذي يتم تنفيذه عند الضغط على تركيبة المفاتيح Ctrl+Alt+Del، وفي هذه الحالة هو إيقاف تشغيل النظام.
شرح مفصل لكل سطر:

١. تحديد مستوى التشغيل الافتراضي:


:id:3:initdefault

- id : هو مجرد اسم للمدخل.
- 3 : هذا هو الرقم الذي يمثل مستوى التشغيل الافتراضي. يعني ذلك أنه عند تشغيل النظام، سيبدأ في مستوى التشغيل 3 ما لم يتم تحديد مستوى آخر عند بدء التشغيل.

٢. سكريبت التهيئة عند الإقلاع:


si::sysinit:/etc/init.d/rcS

- si : هو اسم المعرف .
- sysinit : يعني أن هذا الإجراء يتم تنفيذه خلال مرحلة تهيئة النظام .
- etc/init.d/rcS/ : هو المسار إلى سكريبت التهيئة الرئيسي الذي يقوم بتهيئة النظام الأساسية.

٣. إجراءات عند مستوى التشغيل الفردي:


:S:wait:/sbin/sulogin:~

- ~ : هو الـ id في هذة الحالة .
- S : يشير إلى مستوى التشغيل الفردي (single user mode).
- wait : يعني أن النظام سينتظر حتى ينتهي الأمر الذي يليه.
- sbin/sulogin/ : هو الأمر الذي يقوم بتشغيل برنامج تسجيل الدخول الفردي.

٤. تكوين لكل مستوى تشغيل:

السطور التالية تحدد الإجراءات التي يتم تنفيذها لكل مستوى تشغيل من 0 إلى 6. على سبيل المثال:


r13:3:wait:/etc/init.d/rc 3

- r13 : هو معرف مستوى التشغيل.
- 3 : هو نفس رقم مستوى التشغيل، مما يعني أن هذا الإجراء مرتبط بهذا المستوى.
- etc/init.d/rc 3/ : هو المسار إلى سكريبت يقوم بتشغيل الخدمات المرتبطة بمستوى التشغيل 3.

٥. إجراء عند الضغط على Ctrl+Alt+Del:


ca::ctrlaltdel:/sbin/shutdown

- ca : هو اسم المدخل.
- ctrlaltdel : يشير إلى أن هذا الإجراء يتم تنفيذه عند الضغط على تركيبة المفاتيح Ctrl+Alt+Del.
- sbin/shutdown/ : هو الأمر الذي يقوم بإيقاف تشغيل النظام.

المجلد /etc/init.d: يحتوي على سكريبتات (برامج نصية) تحدد كيفية بدء تشغيل وإيقاف الخدمات المختلفة في نظام Linux. هذه الخدمات يمكن أن تكون أي شيء بدءًا من قاعدة البيانات وحتى خادم الويب. ويتم تخزين كل هذه السكريبتات التي يستخدمها init لإعداد كل مستوى تشغيل في هذا الدليل .

ولكل مستوى تشغيل دليل مرتبط به في /etc/، يسمى /etc/rc0.d/، /etc/rc1.d/، /etc/rc2.d/، وهكذا، مع السكريبتات التي يجب تنفيذها عند بدء مستوى التشغيل المقابل أكانت لتشغيل خدمة ما أو إيقافها في هذا مستوى الشغيل .

نظرًا لأن نفس السكريبت يمكن استخدامه بواسطة مستويات تشغيل مختلفة، فإن الملفات في تلك الدلائل هي مجرد روابط رمزية إلى السكريبتات الفعلية في /etc/init.d/

علاوة على ذلك، فإن الحرف الأول من اسم ملف الارتباط في دليل مستوى التشغيل يشير إلى ما إذا كان يجب بدء الخدمة أو إنهاؤها لمستوى التشغيل المقابل. فملف ارتباط يبدأ اسمه بحرف K يحدد أنه سيتم إيقاف الخدمة عند الدخول إلى مستوى التشغيل (kill). وملف يبدءًا بحرف S، سيتم بدء الخدمة عند الدخول إلى مستوى التشغيل (start).

على سبيل المثال، يحتوي الدليل /etc/rc1.d/ على العديد من الروابط إلى سكريبتات الشبكة تبدأ بحرف K، نظرًا لأن مستوى التشغيل 1 هو مستوى المستخدم الفردي، بدون اتصال بالشبكة.


ولتوضيح الصورة بشكل أكبر سنأخذ مثالاً على مستوى التشغيل الافتراضي Default Runlevel وهو المستوى الثالث Runlevel 3 :

المجلد rc3.d: هو أحد المجلدات الموجودة داخل /etc/ ، ويرمز الرقم "3" إلى مستوى التشغيل الثالث (runlevel). وكما ذكرنا فأن مستويات التشغيل هي حالات مختلفة للنظام، ولكل منها مجموعة محددة من الخدمات التي يجب تشغيلها أو إيقافها.

الملفات داخل rc3.d

داخل المجلد rc3.d - أو مجلد مستوى التشغيل في العموم - ، ستجد عادة ملفين لكل خدمة:

- ملف يبدأ بحرف S: هذا الملف يحتوي على الأوامر التي يجب تنفيذها لبدء تشغيل الخدمة عند الانتقال إلى مستوى التشغيل 3.
- ملف يبدأ بحرف K: هذا الملف يحتوي على الأوامر التي يجب تنفيذها لإيقاف الخدمة عند الانتقال إلى مستوى التشغيل 3.


مثال:

لنفترض أن لدينا خدمة قاعدة البيانات MySQL. ستجد داخل المجلد rc3.d (على سبيل المثال) الملفين التاليين:

- S99mysql : يبدأ تشغيل خدمة MySQL.
- K99mysql : يوقف خدمة MySQL.

وبالنسبة للرقم الموجود قبل الحرف S أو K :

- يحدد ترتيب تنفيذ الخدمة.
- الأرقام الأصغر تعني أن الخدمة ستبدأ أو تتوقف أولاً.
- عادةً ما تكون الخدمات الأساسية مثل الشبكة والقرص الصلب لها أرقام أقل.

وهنا يأتي السؤال المنطقي الى ذهنكك !

كيف يكون هناك الملفين في نفس المجلد ونفس المستوى .. فلماذا هناك ملف بدء وملف ايقاف في نفس الوقت لنفس الخدمة ؟

الجواب يكمن في طبيعة مستويات التشغيل (runlevels) في أنظمة Linux. فكل مستوى تشغيل يمثل حالة مختلفة للنظام، ولكل حالة مجموعة محددة من الخدمات التي يجب تشغيلها أو إيقافها.

لنفترض هذا السيناريو:

- المستوى التشغيل الأول (1) : هو مستوى المستخدم الواحد، ولا تحتاج فيه إلى خدمات مثل قاعدة البيانات أو خادم الويب.
- المستوى التشغيل الثالث (3) : هو مستوى التشغيل العادي، حيث تحتاج إلى تشغيل معظم الخدمات.


** ماذا يحدث عند الانتقال من المستوى 1 إلى المستوى 3 ؟ **

- سيتم تنفيذ جميع الملفات التي تبدأ بحرف S في المجلد rc3.d : وهذا يعني أن جميع الخدمات التي تحتاجها في المستوى الثالث ستبدأ تشغيلها.
- سيتم تجاهل الملفات التي تبدأ بحرف K في المجلد rc3.d : لأننا ننتقل إلى مستوى تشغيل أعلى، ولا نريد إيقاف أي خدمات.


** ماذا يحدث عند الانتقال من المستوى 3 إلى المستوى 1 ؟ **

- سيتم تنفيذ جميع الملفات التي تبدأ بحرف K في المجلد rc3.d : وهذا يعني أن جميع الخدمات التي كانت تعمل في المستوى الثالث ستتوقف.
- سيتم تجاهل الملفات التي تبدأ بحرف S في المجلد rc3.d : لأننا ننتقل إلى مستوى تشغيل أقل، ولا نريد تشغيل أي خدمات جديدة.



تلخيصاً لما سبق ...

عند تحميل الـ Kernel --> يقوم بتشغيل برنامج الـ init وهو sbin/init/ --> يقوم برنامج الـ init بقراءة وتنفيذ ملف الـ etc/inittab/ --> الذي يقوم بتحديد الـ default runlevel --> وبناءاً على مستوى التشغيل المطلوب يقوم بتحميل العملية والإجراء ويمكن أن تكون العملية مجلد rc.d --> الذي بدوره يبدأ تنفيذ سكريبتات الـ S أو الـ K على حسب الحالة --> وتشغيل الخدمات المعنية .



يجب تنفيذ الأمر telinit q في كل مرة يتم تعديل ملف /etc/inittab.

الخيار q (أو Q) تخبر init بإعادة تحميل تكوينه. هذه الخطوة مهمة لتجنب توقف النظام بسبب وجود تكوين غير صحيح في /etc/inittab.

الأمر
runlevel يعرض مستوى التشغيل الحالي للنظام. يعرض أمر runlevel قيمتين، الأولى هي مستوى التشغيل السابق والثانية هي مستوى التشغيل الحالي.

يمكن استخدام برنامج init نفسه للتبديل بين مستويات التشغيل في نظام يعمل، دون الحاجة إلى إعادة التشغيل. فيمكن أيضًا استخدام الأمر
telinit للتبديل بين مستويات التشغيل. على سبيل المثال، الأوامر telinit 1 أو telinit S أو telinit single ستغير النظام إلى مستوى التشغيل 1."


ثم ننتقل للحديث عن systemd


systemd هو مجموعة الأدوات الأكثر استخدامًا الآن لإدارة موارد النظام وخدماته. يتم تعريف هذه الموارد والخدمات كوحدات أو Units في systemd. تتكون كل unit من اسم ونوع وملف تكوين خاص بها. على سبيل المثال، وحدة خادم الويب Apache هي httpd.service في توزيعات Red Hat، وملف التكوين الخاص بها هو httpd.service أيضًا (في توزيعات Debian، تسمى هذه الوحدة apache2.service).


هناك ثمانية أنواع رئيسية لوحدات systemd :

** service **

- هي النوع الأكثر شيوعًا .
- تمثل الموارد النشطة والخدمات في النظام والتي يمكن تشغيلها أو إيقافها أو إعادة تحميلها.
- مثال: خدمة Apache، أو خدمة قاعدة البيانات أو خدمة الإتصال بالشبكة وهكذا .... .


** socket **

- يمكن أن يكون socket في نظام الملفات أو socket شبكيًا.
- ترتبط ارتباطًا وثيقًا بوحدة خدمة (service unit) يتم تشغيلها عند تلقي الـ socket لطلب.
- مثال: SSH socket الذي يستمع لطلبات الاتصال.

ملحوظة : الـ socket في عالم تكنولوجيا المعلومات، وخاصة في مجال البرمجة الشبكية، هو عبارة عن نقطة نهاية (endpoint) للتواصل بين تطبيقين أو أكثر عبر شبكة. يمكن تشبيه المقبس بـ "عنوان" و "منفذ" يستخدمه التطبيق للتواصل مع تطبيقات أخرى . فـ 192.168.21.5:666 يعتبر socket فيمكن احد التواصل مع العنوان 192.168.21.5 من خلال المنفذ رقم 666 . حيث يتكون الـ socket بشكل عام من عنصرين رئيسيين: عنوان IP: وهو رقم فريد يحدد جهاز الكمبيوتر على الشبكة. ورقم المنفذ: وهو رقم يحدد تطبيقًا معينًا أو خدمة معينه تعمل على الجهاز .


** device **

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


** mount **

- تمثل نقطة تثبيت في نظام الملفات، مشابهة لإدخال في ملف `/etc/fstab`.
- مثال: نقطة تثبيت نظام الملفات `/mnt/data` أو قسم داخل القرص مثل dev/sda1/.


** automount **

- أيضًا نقطة تثبيت، ولكن يتم تثبيتها تلقائيًا عند الوصول إليها.
- ترتبط بوحدة تثبيت يتم تشغيلها عند الوصول إلى نقطة التثبيت التلقائية.


** target **

- هي مجموعة من الوحدات يتم إدارتها كوحدة واحدة.
- تستخدم لتنظيم تشغيل الخدمات فهذة الـ units من target هي ما تماثل الـ runlevels في SysVinit .
- مثال: هدف `multi-user.target` الذي يمثل حالة النظام عندما يكون متعدد المستخدمين.


** snapshot **

- هي حالة محفوظة لإدارة systemd (غير متوفرة في جميع توزيعات Linux).
- تستخدم للاستعادة من حالات سابقة. وتساعد بشكل كبير في صيانة النظام اذا حدث اي خلل فيمكنك الرجوع لاخر حالة snapshot .


** Timer **

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




الأمر الرئيسي للتحكم في وحدات systemd هو systemctl. يستخدم هذا الأمر لتنفيذ جميع المهام المتعلقة بتشغيل الوحدات، وإيقافها، وتنفيذها، ،وتفعيلها ومراقبتها، وغير ذلك. بالنسبة لوحدة وهمية تسمى unit.service، على سبيل المثال، فإن أكثر أوامر systemctl شيوعًا هي :

systemctl start Example.unit

يبدأ تشغيل الوحدة.

systemctl stop Example.service

يوقف الوحدة.

systemctl restart Example.unit

يعيد تشغيل الوحدة

systemctl status Example.unit

يعرض حالة الوحدة، بما في ذلك ما إذا كانت تعمل أم لا

systemctl enable Example.unit

يمكّن الوحدة، أي أن الوحدة ستتم تحميلها أثناء بدء تشغيل النظام

systemctl disable Example.unit

يعطل الوحدة، أي أن الوحدة لن تبدأ مع النظام

systemctl list-units --type unit

لعرض الوحدات من نوع unit على النظام

systemctl cat Example.unit

لعرض ملف الوحدة والتكوين

systemctl list-dependencies Example.unit

يقوم النظام بعرض قائمة بجميع الوحدات (مثل خدمات، أهداف، وغيرها) التي تعتمد عليها الوحدة المحددة لتعمل بشكل صحيح

الأمر systemctl يمكنه أيضًا التحكم في الـ Targets للنظام. فوحدة multi-user.target، على سبيل المثال، تجمع جميع الوحدات المطلوبة لبيئة نظام متعدد المستخدمين. وهي مشابهة لمستوى التشغيل الثالث (runlevel 3) في الأنظمة التي تستخدم SysV.

الأمر
systemctl isolate يتيح التبديل بين الـ targets المختلفة. لذا، للتبديل يدويًا إلى الهدف multi-user يمكنك تنفيذ ذلك من خلال أمر مثل :

systemctl isolate multi-user.target

وهو ما يماثل تحديداً أمر

telinit 3

في الأنظمة التي تعمل بـ sysvinit

توجد أهداف أو targets مقابلة لمستويات التشغيل في SysV، بدءًا من runlevel0.target وحتى runlevel6.target. ومع ذلك، لا يستخدم systemd ملف etc/inittab/. لتغيير الهدف الافتراضي للنظام Default target ، يمكن إضافة الخيار systemd.unit إلى قائمة معلمات النواة Kernel parameters . على سبيل المثال، لاستخدام multi-user.target كهدف افتراضي، يجب أن تكون معلمة النواة هي systemd.unit=multi-user.target. ويمكن جعل جميع معلمات النواة دائمة من خلال تغيير تكوين برنامج تحميل الإقلاع من خلال ملف الاعدادات .

هناك طريقة أخرى لتغيير الهدف الافتراضي وهي تعديل الرابط الرمزي etc/systemd/system/default.target/ بحيث يشير إلى الهدف المطلوب. ويمكن إعادة تعريف الرابط باستخدام أمر systemctl نفسه بتنفيذ الأمر التالي :


systemctl set-default multi-user.target

وبالمثل، يمكنك تحديد الهدف الافتراضي للتشغيل في نظامك باستخدام الأمر التالي :

systemctl get-default

فإذا نظرنا في مجلد lib/systemd/system/ سنجده يحتوى على كثير من وحدات الخدمات وهو مثل مجلد etc/init.d/ الخاص بأنظمة sysvinit ولكن يوجد ملف الربط للـ Default target في مجلد etc/systemd/system/ لتحديد الهدف الافتراضي :
1725731111543.webp
1725731178854.webp

بشكل مشابه لأنظمة SysV، يجب ألا يشير الهدف الافتراضي أبدًا إلى shutdown.target، لأنه يقابل مستوى التشغيل 0 (إيقاف التشغيل).


تلخيصاً لما تم طرحه ... بأن مدير الخدمات في انظمة لينكس الحديثة يعتمد على برنامج init هو usr/lib/systemd/systemd/ ويتحكم systemd في النظام من خلال ما يسمى بالـ units او الوحدات ويكون لكل وحده نوع معين وملف تكوين معين و تقدم خدمه معينه ... ويجب الاشارة هنا بأن برنامج مثل systemd او الـ init عموما هو يعتبر Daemon لأنه يعمل في الخلفية دون أن يحتاج تدخل مباشر ... فدعنا نقوم بمثال عملي لاستخدام الـ systemd :
١. للتحكم في الـ Services

٢. للتحكم في الـ Socket

٣. للتحكم في الـ Device

٤. للتحكم في الـ Mount

٥. للتحكم في الـ Target

٦. للتحكم في الـ Timer


وهكذا نكون والحمدلله انتهينا من هذا الموضوع التمهيدي بعد ان تطرقنا لأمر من أهم الأمور عند ادارتك لنظام لينكس فبإلمامك بالـ systemd هو خطوة كبيرة وقوية في رحلتك مع لينكس كمدير نظام وليس مجرد مستخدم عادي

وفي الدرس الأول من هذه الوحدة الوحدة الثالثة سندخل عالم اللينكس ونبدأ إستكشافنا لهذا العالم خطوة خطوة

1725734653841.webp


 
التعديل الأخير:
الحالة
مغلق و غير مفتوح للمزيد من الردود.

آخر المشاركات

فانوس

رمضان
عودة
أعلى