Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

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

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
test-your-sysadmin-skills — مجموعة من أسئلة وأجوبة اختبار إدارة نظام لينكس. اختبر معرفتك ومهاراتك في مجالات مختلفة باستخدام هذه الأسئلة والأجوبة. | Kitploit
أدوات/GitHubGitHub/trimstray/test-your-sysadmin-skills
التعلم والتعليمموارد منسقةمسارات ودورات التعلم
GitHubtrimstray/test-your-sysadmin-skills

test-your-sysadmin-skills

مجموعة من أسئلة وأجوبة اختبار إدارة نظام لينكس. اختبر معرفتك ومهاراتك في مجالات مختلفة باستخدام هذه الأسئلة والأجوبة.

عرض المستودع

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
11.7k1.7k8منذ سنة واحدةتمت المراجعة من قبل Kitploit

رئيسي


:star:

"المدير العظيم لا يحتاج إلى معرفة كل شيء، لكن يجب أن يكون قادرًا على تقديم حلول مذهلة لمشاريع مستحيلة." - cwheeler33 (ServerFault)

:star:

"مهاراتي هي جعل الأشياء تعمل، وليس معرفة مليارات الحقائق. [...] إذا كنت بحاجة إلى إصلاح نظام، سأحدد المشكلة، وأتفقد السجلات، وأبحث عن الأخطاء. إذا كنت بحاجة إلى تنفيذ حل، سأبحث عن الحل الصحيح، وأنفذه وأوثقه، وبعد ذلك لا أحتفظ إلا بفكرة عامة عن كيفية عمله إلا إذا تعاملت معه بشكل متكرر... ولهذا السبب يتم توثيقه." - Sparcrypt (Reddit)


طلبات السحب رخصة MIT




ℹ️  يحتوي هذا المشروع على 284 سؤالًا وجوابًا يمكن استخدامها لاختبار معرفتك أو أثناء مقابلة/امتحان لمنصب مثل مسؤول أنظمة لينكس (*nix).

✔️  الإجابات هي أمثلة فقط ولا تستنفد الموضوع بأكمله. معظمها يحتوي على موارد مفيدة لفهم أعمق.

⚠️  الأسئلة المميزة بـ *** ليس لها إجابة بعد أو الإجابة غير مكتملة - قم بعمل طلب سحب (pull request) لإضافتها!

🚥  إذا وجدت شيئًا غير منطقي، أو شيئًا لا يبدو صحيحًا، يرجى عمل طلب سحب وإضافة تفسيرات صحيحة ومدروسة جيدًا حول تغييراتك أو تعليقاتك.

📚  لتحسين معرفتك/مهاراتك، يرجى الاطلاع على devops-interview-questions. يبدو مثيرًا للاهتمام حقًا.


» جميع الاقتراحات مرحب بها «


جدول المحتويات


مقدمة

💠 أسئلة بسيطة

  • ماذا تعلمت هذا الأسبوع؟
  • ما الذي يثير حماسك أو يثير اهتمامك في عالم مسؤولي الأنظمة؟
  • ما هو التحدي التقني الأخير الذي واجهته وكيف حللته؟
  • أخبرني عن آخر مشروع كبير أنهيته.
  • هل تساهم في أي مشاريع مفتوحة المصدر؟
  • صف إعداد مختبر منزلك (homelab).
  • ما هو الإنجاز الشخصي الذي تفخر به أكثر؟
  • أخبرني عن أكبر خطأ ارتكبته. كيف ستفعله بشكل مختلف اليوم؟
  • ما هي أدوات البرامج التي ستقوم بتثبيتها في اليوم الأول في وظيفة جديدة؟
  • أخبرني عن كيفية إدارة قاعدة المعرفة الخاصة بك (مثل الويكي والملفات والبوابات).
  • ما هي مصادر الأخبار التي تتابعها يوميًا؟ (خاصة بمسؤولي الأنظمة أو الأمان أو غير ذلك)
  • فريق عمليات الشبكة (NOC) لديه ميزانية جديدة لشهادات مسؤولي الأنظمة. ما الشهادة التي ترغب فيها ولماذا؟
  • كيف تتفاعل مع المطورين: نحن ضدهم أم الجميع يعملون معًا بأساليب مختلفة؟
  • أي سؤال لمسؤول أنظمة ستسأله، إذا كنت تجري معي مقابلة، لتعرف مدى جودتي في التعامل مع المواقف غير التقليدية؟

معرفة عامة

💠 مسؤول مبتدئ

أسئلة النظام (37)
اذكر بعض الأمثلة على توزيعات لينكس. ما هي توزيعتك المفضلة ولماذا؟
- Red Hat Enterprise Linux - Fedora - CentOS - Debian - Ubuntu - Mint - SUSE Linux Enterprise Server (SLES) - SUSE Linux Enterprise Desktop (SLED) - Slackware - Arch - Kali - Backbox

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

  • Arch Linux، الذي يقدم نظامًا أساسيًا بسيطًا يمكن بناء نظام تشغيل مخصص عليه. جماله أيضًا أنه يحتوي على مستودع مستخدمي Arch (AUR)، والذي عندما يقترن بمستودعاته الثنائية الرسمية يسمح له بأن يكون على الأرجح أكبر مستودعات أي توزيعة. عملية الحزم الخاصة به بسيطة جدًا أيضًا، مما يعني أنه إذا أراد شخص حزمة غير موجودة في مستودعاته الرسمية أو AUR، فيجب أن يكون من السهل صنعها بنفسه.
  • Linux Mint، المبنية أيضًا على إصدارات Ubuntu LTS، ولكنها تتميز بإصدارات تحتوي على بيئات سطح مكتب مختلفة، بما في ذلك Cinnamon و MATE و Xfce. Mint مصقولة جدًا وجمالياتها جذابة إلى حد ما، خاصة أنني أحب موضوع الأيقونات الجديد، على الرغم من أنني لا أحب موضوع GTK+ الخاص بها (باهت جدًا حسب ذوقي). لقد وجدت أيضًا خطأ في أحدث إصدار لها Mint 19، وأصبح مزعجًا جدًا حيث طلبت المساعدة بشأنه منذ أكثر من أسبوعين في منتدياتهم ولم أتلق أي ردود حتى الآن وهو خطأ يجعل حياتي عليها أكثر صعوبة.
  • Kali Linux، هي توزيعة لينكس مبنية على Debian موجهة لاختبار الاختراق المتقدم والتدقيق الأمني. تحتوي Kali على عدة مئات من الأدوات الموجهة لمهام أمن المعلومات المختلفة، مثل اختبار الاختراق والبحث الأمني والأدلة الرقمية والهندسة العكسية.

موارد مفيدة:

  • قائمة توزيعات لينكس
  • ما هي توزيعة لينكس المفضلة لديك ولماذا؟
ما هي الاختلافات بين Unix و Linux و BSD و GNU؟

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

Unix و BSD هما تنفيذان "أقدم" من POSIX بمستويات مختلفة من "المصدر المغلق". Unix عادةً ما يكون مغلق المصدر تمامًا، ولكن هناك العديد من نكهات Unix مثل عدد نكهات Linux (إن لم يكن أكثر). BSD لا يُعتبر عادةً "مفتوحًا"، ولكنه كان يعتبر مفتوحًا جدًا عند إطلاقه. كما سمح ترخيصه بالاستخدام التجاري مع قيود أقل بكثير من التراخيص "الأكثر انفتاحًا" في ذلك الوقت.

Linux هو الأحدث بين الأربعة. بالمعنى الدقيق، إنه "مجرد نواة"؛ ومع ذلك، بشكل عام، يُعتبر نظام تشغيل كامل عند دمجه مع أدوات GNU والعديد من المكونات الأساسية الأخرى.

الاختلافات الرئيسية بين هذه الأنظمة تكمن في مبادئها. Unix و Linux و BSD لديهم مبادئ مختلفة يطبقونها. جميعها متوافقة مع POSIX، وقابلة للتبادل بشكل أساسي. فهم يحلون بعض المشكلات نفسها بطرق مختلفة. لذلك، بصرف النظر عن المبادئ وكيفية اختيارهم لتطبيق معايير POSIX، هناك اختلاف بسيط.

لمزيد من المعلومات، أقترح قراءة مقال قصير عن إنشاء GNU و OSS و Linux و BSD و UNIX. ستكون منحازة لأفكارها الفردية، لكن هذه المقالات يجب أن تعطيك فكرة أفضل عن الاختلافات.

موارد مفيدة:

  • ما الفرق بين Unix و Linux و BSD و GNU؟ (الأصلي)
  • النقاش الكبير: هل هو Linux أم GNU/Linux؟
ما هو CLI؟ أخبرني عن أدوات CLI المفضلة لديك، نصائح، واختراقات.

CLI هو اختصار لـ Command Line Interface أو Command Language Interpreter. سطر الأوامر هو واحد من أقوى الطرق للتحكم بنظامك/جهاز الكمبيوتر الخاص بك.

في أنظمة Unix-like، CLI هي الواجهة التي يمكن للمستخدم من خلالها كتابة أوامر ليقوم النظام بتنفيذها. CLI قوي جدًا، لكنه ليس متسامحًا مع الأخطاء.

يسمح لك CLI بإجراء عمليات معالجة مع داخل النظام ومع الكود بطريقة أكثر دقة. إنه يوفر مرونة وتحكمًا أكبر من الـ GUI بغض النظر عن نظام التشغيل المستخدم. العديد من البرامج التي قد ترغب في استخدامها في برنامجك المستضاف على Github، على سبيل المثال، تتطلب أيضًا تشغيل بعض الأوامر على CLI لتشغيلها.

أدواتي المفضلة

  • screen - مُضاعِف طرفية (terminal multiplexer) مجاني، يمكنني بدء جلسة وستُحفظ أطرافيتي حتى عند فقدان الاتصال، لذا يمكنك الاستئناف لاحقًا أو من المنزل
  • ssh - الأمر الأكثر قيمة على الإطلاق لتعلمه، يمكنني استخدامه لفعل أشياء مذهلة:
    • تركيب نظام ملفات عبر الإنترنت باستخدام sshfs
    • إعادة توجيه الأوامر: يعمل ضد خادم rsync بدون وجود خدمة rsync عن طريق بدء واحدة بنفسه عبر ssh
    • التشغيل في ملفات دفعية: يمكنني إعادة توجيه المخرجات من الأمر البعيد واستخدامها داخل ملف دفعي محلي
  • vi/vim - هو محرر النصوص الأكثر شهرة وقوة، إنه عالمي، ويعمل بسرعة كبيرة حتى على الملفات الكبيرة
  • bash-completion - يحتوي على عدد من قواعد الإكمال المحددة مسبقًا للقشرة (shell)

نصائح واختراقات

ما هي صدفة (shell) المفضلة لديك ولماذا؟

BASH هي المفضلة لدي. إنها بالأساس مسألة تفضيل شخصي، حيث أحب بناء الجملة وتناسبني. بناء جملة إعادة توجيه الإدخال/الإخراج (>>, << 2>&1, 2>, 1>, إلخ) مشابه لـ C++ مما يسهل علي التعرف عليه.

أحب أيضًا صدفة ZSH، لأنها أكثر قابلية للتخصيص من BASH. تحتوي على إطار Oh-My-Zsh، وإكمال علامات تبويب قوي يعتمد على السياق، ومطابقة الأنماط/globing على المنشطات، ووحدات قابلة للتحميل، والمزيد.

موارد مفيدة:

  • مقارنة بين صداف الأوامر
كيف تحصل على المساعدة في سطر الأوامر؟ ***
  • man [اسم الأمر] يمكن استخدامه لرؤية وصف لأمر (مثال: man less, man cat)

  • -h أو --help بعض البرامج تنفذ طباعة التعليمات عند تمرير هذه الوسيطة (مثال: python -h و python --help)

أول 5 أوامر على خادم *nix بعد تسجيل الدخول.
  • w - الكثير من المعلومات الرائعة هناك عن مدة تشغيل الخادم (uptime)
  • top - يمكنك رؤية جميع العمليات الجارية، ثم ترتيبها حسب استخدام الـ CPU والذاكرة والمزيد
  • netstat - لمعرفة على أي منفذ وعنوان IP يستمع خادمك وأي العمليات تستخدمها
  • df - يبلغ عن مقدار مساحة القرص المتاحة التي تستخدمها أنظمة الملفات
  • history - يخبرك بما تم تشغيله مسبقًا بواسطة المستخدم المتصل حاليًا

موارد مفيدة:

  • أول 5 أوامر عندما أتصل بخادم لينكس (الأصلي)
ماذا تعني الحقول في مخرجات ls -al؟

بترتيب المخرجات:

root@kitploit:~
-rwxrw-r--    1    root   root 2048    Jan 13 07:11 db.dump
```
- أذونات الملف،
- عدد الروابط،
- اسم المالك،
- مجموعة المالك،
- حجم الملف،
- وقت آخر تعديل،
- اسم الملف/الدليل

يتم عرض أذونات الملف كما يلي:

- الحرف الأول هو `-` أو `l` أو `d`، حيث يشير `d` إلى دليل، و`-` يمثل ملفًا، و`l` هو رابط رمزي (أو رابط لين) - نوع خاص من الملفات
- ثلاث مجموعات من الأحرف، ثلاث مرات، تشير إلى أذونات المالك والمجموعة والآخرين:
  - `r` = قابل للقراءة
  - `w` = قابل للكتابة
  - `x` = قابل للتنفيذ

في مثالك `-rwxrw-r--`، هذا يعني أن السطر المعروض هو:

- ملف عادي (يظهر كـ `-`)
- قابل للقراءة والكتابة والتنفيذ من قبل المالك (`rwx`)
- قابل للقراءة والكتابة، ولكن غير قابل للتنفيذ من قبل المجموعة (`rw-`)
- قابل للقراءة ولكن غير قابل للكتابة أو التنفيذ من قبل الآخرين (`r--`)

موارد مفيدة:

- [ماذا تعني الحقول في مخرجات ls -al؟ (الأصلي)](https://unix.stackexchange.com/questions/103114/what-do-the-fields-in-ls-al-output-mean)

</details>

<details>
<summary><b>كيف تحصل على قائمة المستخدمين المسجلين؟</b></summary><br>

للحصول على ملخص للمستخدمين المسجلين، بما في ذلك كل دخول لاسم مستخدم، والمحطات الطرفية التي يتصل بها المستخدمون، وتاريخ/وقت تسجيل الدخول، وربما الكمبيوتر الذي يتصلون منه، أدخل:```bash
# It uses /var/run/utmp and /var/log/wtmp files to get the details.
who
```
للحصول على معلومات شاملة، بما في ذلك اسم المستخدم، والمحطة الطرفية، ورقم IP للكمبيوتر المصدر، ووقت بدء تسجيل الدخول، وأي وقت خمول، ودورات وحدة المعالجة المركزية للعملية، ودورات وحدة المعالجة المركزية للوظيفة، والأمر الجاري تشغيله حاليًا، أدخل:```bash
# It uses /var/run/utmp, and their processes /proc.
w
```
أيضًا مهم لعرض قائمة بأحدث المستخدمين الذين سجلوا الدخول، أدخل:```bash
# It uses /var/log/wtmp.
last
```
موارد مفيدة:

- [4 طرق لتحديد من قام بتسجيل الدخول على نظام لينكس الخاص بك](https://www.thegeekstuff.com/2009/03/4-ways-to-identify-who-is-logged-in-on-your-linux-system/)

</details>

<details>
<summary><b>ما هي ميزة تنفيذ العمليات الجارية في الخلفية؟ وكيف يمكنك فعل ذلك؟</b></summary><br>

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

بشكل عام، يتم إرسال التطبيقات التي تستغرق وقتًا طويلاً للتنفيذ ولا تتطلب تفاعل المستخدم إلى الخلفية حتى نتمكن من مواصلة عملنا في الطرفية.

على سبيل المثال، إذا كنت تريد تنزيل شيء ما في الخلفية، يمكنك:```bash
wget https://url-to-download.com/download.tar.gz &
```
عند تشغيل الأمر أعلاه، تحصل على المخرجات التالية:```bash
[1] 2203
```
هنا 1 هو الرقم التسلسلي للوظيفة و 2203 هو PID للوظيفة. يمكنك رؤية الوظائف التي تعمل في الخلفية باستخدام الأمر التالي:```bash
jobs
```
عند تنفيذ مهمة في الخلفية، ستحصل على PID للمهمة، ويمكنك إنهاء المهمة التي تعمل في الخلفية باستخدام الأمر التالي:```bash
kill PID
```
استبدل PID بـ PID المهمة. إذا كان لديك مهمة واحدة قيد التشغيل، يمكنك إحضارها إلى المقدمة باستخدام:```bash
fg
```
إذا كان لديك العديد من المهام التي تعمل في الخلفية، يمكنك إحضار أي مهمة إلى المقدمة باستخدام:```bash
fg %#
```
استبدل `#` بالرقم التسلسلي للمهمة.

موارد مفيدة:

- [كيفية تشغيل عملية يونكس في الخلفية؟](https://kb.iu.edu/d/afnz)
- [أوامر التحكم في المهام](http://tldp.org/LDP/abs/html/x9644.html)
- [ما هي مزايا تشغيل التطبيقات في الخلفية؟](https://unix.stackexchange.com/questions/162186/what-is-are-the-advantages-of-running-applications-in-backgound)

</details>

<details>
<summary><b>قبل أن تتمكن من إدارة العمليات، يجب أن تكون قادرًا على التعرف عليها. ما الأدوات التي ستستخدمها؟ ***</b></summary><br>

سيتم إكماله لاحقًا.

</details>

<details>
<summary><b>تشغيل الأمر كمستخدم جذر. هل هي ممارسة جيدة أم سيئة؟</b></summary><br>

تشغيل (كل شيء) كمستخدم جذر هو أمر سيء للأسباب التالية:

- **الغباء**: لا شيء يمنعك من ارتكاب خطأ إهمال. إذا حاولت تغيير النظام بأي طريقة قد تكون ضارة، فستحتاج إلى استخدام `sudo`، مما يضمن توقفًا مؤقتًا (أثناء إدخال كلمة المرور) للتأكد من أنك لست على وشك ارتكاب خطأ.

- **الأمان**: يصعب الاختراق إذا كنت لا تعرف حساب تسجيل الدخول للمستخدم المسؤول. الجذر يعني أن لديك بالفعل نصف مجموعة بيانات اعتماد المسؤول العاملة.

- **لا تحتاجها حقًا**: إذا كنت بحاجة إلى تشغيل عدة أوامر كمستخدم جذر، وتشعر بالضيق من إدخال كلمة المرور عدة مرات عندما تنتهي صلاحية `sudo`، كل ما عليك فعله هو `sudo -i` وستصبح جذرًا. هل تريد تشغيل بعض الأوامر باستخدام الأنابيب؟ استخدم `sudo sh -c "command1 | command2"`.

- **يمكنك دائمًا استخدامها في وحدة التحكم للاسترداد**: تسمح لك وحدة التحكم للاسترداد بالتعافي من خطأ كبير، أو إصلاح مشكلة ناتجة عن تطبيق (والذي كان لا يزال عليك تشغيله باستخدام `sudo`). أوبونتو لا تحتوي على كلمة مرور لحساب الجذر في هذه الحالة، لكن يمكنك البحث عبر الإنترنت عن تغيير ذلك - وهذا سيجعل من الصعب على أي شخص لديه وصول مادي إلى جهازك أن يتسبب في ضرر.

موارد مفيدة:

- [لماذا من السيء تسجيل الدخول كمستخدم جذر؟ (الأصل)](https://askubuntu.com/questions/16178/why-is-it-bad-to-log-in-as-root)
- [ما الخطأ في أن تكون دائمًا كمستخدم جذر؟](https://serverfault.com/questions/57962/whats-wrong-with-always-being-root)
- [لماذا يجب تجنب تشغيل التطبيقات كمستخدم جذر](https://bencane.com/2012/02/20/why-you-should-avoid-running-applications-as-root/)

</details>

<details>
<summary><b>كيفية التحقق من إحصائيات الذاكرة وإحصائيات وحدة المعالجة المركزية؟</b></summary><br>

ستستخدم `top/htop` لكليهما. باستخدام الأمرين `free` و `vmstat` يمكننا عرض إحصائيات الذاكرة الفعلية والافتراضية على التوالي. بمساعدة أمر `sar` نرى استخدام وحدة المعالجة المركزية وإحصائيات أخرى (لكن `sar` ليس مثبتًا حتى في معظم الأنظمة).

موارد مفيدة:

- [كيفية معرفة استخدام وحدة المعالجة المركزية في لينكس؟](https://www.cyberciti.biz/tips/how-do-i-find-out-linux-cpu-utilization.html)
- [16 أمرًا لمراقبة خادم لينكس يجب أن تعرفها حقًا](https://www.hpe.com/us/en/insights/articles/16-linux-server-monitoring-commands-you-really-need-to-know-1703.html)

</details>

<details>
<summary><b>ما هو متوسط الحمل؟</b></summary><br>

**متوسطات الحمل** في لينكس هي "متوسطات حمل النظام" التي تظهر الطلب على الخيط (المهمة) الجاري على النظام كمتوسط لعدد الخيوط الجارية والمنتظرة. يقيس هذا الطلب، الذي يمكن أن يكون أكبر مما يعالجه النظام حاليًا. تعرض معظم الأدوات ثلاثة متوسطات، لمدة 1 و5 و15 دقيقة.

هذه الأرقام الثلاثة ليست أرقامًا لوحدات المعالجة المركزية المختلفة. هذه الأرقام هي قيم متوسطة لرقم الحمل لفترة زمنية معينة (آخر دقيقة و5 دقائق و15 دقيقة).

عادةً ما يتم وصف **متوسط الحمل** بأنه "متوسط طول قائمة الانتظار الجاري". لذا فإن قلة من العمليات أو الخيوط التي تستهلك وحدة المعالجة المركزية يمكنها رفع **متوسط الحمل** فوق 1. لا توجد مشكلة إذا كان **متوسط الحمل** أقل من إجمالي عدد أنوية وحدة المعالجة المركزية. لكن إذا أصبح أعلى من عدد وحدات المعالجة المركزية، فهذا يعني أن بعض الخيوط/العمليات ستبقى في قائمة الانتظار، جاهزة للتشغيل، ولكنها تنتظر وحدة معالجة مركزية حرة.

الغرض منه هو إعطائك فكرة عن حالة النظام، بمتوسط عبر عدة فترات زمنية. نظرًا لأنه متوسط، فإنه يستغرق وقتًا ليعود إلى 0 بعد تحميل حمل ثقيل على النظام.

بعض التفسيرات:

- إذا كانت المتوسطات 0.0، فإن نظامك خامل
- إذا كان متوسط الدقيقة الواحدة أعلى من متوسطات 5 أو 15 دقيقة، فإن الحمل في ازدياد
- إذا كان متوسط الدقيقة الواحدة أقل من متوسطات 5 أو 15 دقيقة، فإن الحمل في تناقص
- إذا كانت أعلى من عدد وحدات المعالجة المركزية لديك، فقد تواجه مشكلة في الأداء (يعتمد ذلك)

موارد مفيدة:

- [متوسطات حمل لينكس: حل اللغز (الأصل)](http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html)
- [متوسط حمل لينكس - الملخص النهائي](http://blog.angulosolido.pt/2015/04/linux-load-average-definitive-summary.html)
- [كيفية عمل متوسطات حمل وحدة المعالجة المركزية (واستخدامها لتحليل أداء خادم الويب!)](https://jvns.ca/blog/2016/02/07/cpu-load-averages/)

</details>

<details>
<summary><b>أين تخزن كلمة مروري على لينكس/يونكس؟</b></summary><br>

كلمات المرور لا تُخزن في أي مكان على النظام على الإطلاق. ما يُخزن في `/etc/shadow` هو ما يسمى بـ هاشات كلمات المرور.

يتم إنشاء هاش لنص ما عن طريق تنفيذ ما يسمى دالة ذات اتجاه واحد على النص (كلمة المرور)، وبالتالي إنشاء سلسلة للتحقق منها. حسب التصميم، من "المستحيل" (غير عملي حسابيًا) عكس هذه العملية.

الإصدارات القديمة من يونكس كانت تخزن كلمات المرور المشفرة في `/etc/passwd` إلى جانب معلومات أخرى حول كل حساب.

الإصدارات الأحدث تحتوي ببساطة على `*` في الحقل ذي الصلة في `/etc/passwd` وتستخدم `/etc/shadow` لتخزين كلمة المرور، جزئيًا لضمان عدم حصول أي شخص على حق الوصول للقراءة إلى كلمات المرور عندما يحتاج فقط إلى الأشياء الأخرى (`shadow` عادةً ما يكون محميًا بشكل أقوى من `passwd`).

لمزيد من المعلومات، راجع `man crypt`، `man shadow`، `man passwd`.

موارد مفيدة:

- [أين تخزن كلمة مروري على لينكس؟](https://security.stackexchange.com/questions/37050/where-is-my-password-stored-on-linux)
- [أين توجد كلمات مرور المستخدمين في لينكس؟](https://www.cyberciti.biz/faq/where-are-the-passwords-of-the-users-located-in-linux/)
- [تنسيقات ملفات كلمة المرور والظل في لينكس](https://www.tldp.org/LDP/lame/LAME/linux-admin-made-easy/shadow-file-formats.html)

</details>

<details>
<summary><b>كيفية تغيير الأذونات بشكل متكرر لجميع الدلائل باستثناء الملفات ولجميع الملفات باستثناء الدلائل؟</b></summary><br>

لتغيير جميع الدلائل مثلاً إلى **755** (`drwxr-xr-x`):```bash
find /opt/data -type d -exec chmod 755 {} \;
```
لتغيير جميع الملفات مثلاً إلى **644** (`-rw-r--r--`):```bash
find /opt/data -type f -exec chmod 644 {} \;
```
موارد مفيدة:

- [كيف يمكنني تعيين chmod لمجلد وجميع المجلدات الفرعية والملفات الخاصة به؟ (الأصلي)](https://stackoverflow.com/questions/3740152/how-do-i-set-chmod-for-a-folder-and-all-of-its-subfolders-and-files?rq=1)

</details>

<details>
<summary><b>كل أمر يفشل مع <code>command not found</code>. كيف يمكن تتبع مصدر الخطأ وحله؟</b></summary><br>

يبدو أنه في مرحلة ما يتم استبدال متغير البيئة الافتراضي `PATH`. نوع الأخطاء التي لديك يشير إلى أن `PATH` لا يحتوي على سبيل المثال `/bin`، حيث توجد الأوامر (بما في ذلك bash).

إحدى طرق بدء تصحيح أخطاء سكريبت bash أو الأمر الخاص بك هي بدء قشرة فرعية مع الخيار `-x`:```bash
bash --login -x
```
سيعرض لك هذا كل أمر ووسائطه التي يتم تنفيذها عند بدء تشغيل تلك الصدفة.

من المفيد جدًا أيضًا عرض قيم متغير `PATH`:```bash
echo $PATH
```
إذا قمت بتشغيل هذا:```bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin
```
معظم الأوامر يجب أن تبدأ في العمل - وبعد ذلك يمكنك تعديل `~/.bash_profile` بدلاً من `~/.bashrc` وإصلاح أي شيء يعيد تعيين `PATH` هناك. قيم المتغير `PATH` الافتراضية للمستخدم **الجذر** والمستخدمين الآخرين موجودة في ملف `/etc/profile`.

مصدر مفيد:

- [كيفية إضافة مسار إلى PATH بشكل صحيح؟](https://unix.stackexchange.com/questions/26047/how-to-correctly-add-a-path-to-path)

</details>

<details>
<summary><b>أنت تضغط <code>CTRL + C</code> ولكن النص البرمجي لا يزال قيد التشغيل. كيف توقفه؟ </b></summary><br>

في معظم الحالات، يمكنك إيقاف نص برمجي قيد التشغيل باستخدام تركيبة المفاتيح `CTRL + C`. يرسل ذلك إشارة مقاطعة (SIGINT) إلى النص البرمجي، مما ينهي تنفيذه. إذا لم يعمل ذلك وكان النص البرمجي لا يزال قيد التشغيل، فيمكنك تجربة استخدام تركيبة `CTRL + \`، والتي ترسل إشارة إنهاء (SIGQUIT) إلى النص البرمجي، مما قد يوقفه فورًا.

بدلاً من ذلك، إذا كنت تستخدم طرفية أو واجهة سطر أوامر، فيمكنك تجربة استخدام أمر `kill` لإرسال إشارة إلى عملية النص البرمجي. يمكنك العثور على معرف العملية (PID) للنص البرمجي باستخدام أمر `ps` أو `top`، ثم استخدام `kill` مع PID لإيقاف النص البرمجي.

في بعض الحالات، قد تحتاج إلى استخدام أمر `kill -9` لإجبار النص البرمجي على التوقف، حيث قد لا يعمل أمر kill العادي إذا كان النص البرمجي عالقًا أو لا يستجيب. الخيار `-9` يرسل إشارة SIGKILL، مما يجبر العملية على التوقف فورًا.
</details>

<details>
<summary><b>ما هو أمر <code>grep</code>؟ كيفية مطابقة عدة سلاسل في نفس السطر؟</b></summary><br>

أدوات `grep` هي مجموعة من أدوات Unix، بما في ذلك `egrep` و `fgrep`.

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

لمطابقة عدة سلاسل:```bash
grep -E "string1|string2" filename
```
أو```bash
grep -e "string1" -e "string2" filename
```
موارد مفيدة:

- [ما هو grep وكيف أستخدمه؟ (الأصلي)](https://kb.iu.edu/d/afiy)

</details>

<details>
<summary><b>اشرح أوامر محتوى الملف مع الوصف.</b></summary><br>

- `head`: للتحقق من بداية ملف.
- `tail`: للتحقق من نهاية الملف. وهو عكس أمر head.
- `cat`: يُستخدم لعرض، إنشاء، دمج الملفات.
- `more`: يُستخدم لعرض النص في نافذة الطرفية بشكل صفحاتي.
- `less`: يُستخدم لعرض النص في الاتجاه العكسي كما يوفر تحريكًا بسطر واحد.

موارد مفيدة:

- [عرض ملفات نصية من موجه الصدفة](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Step_by_Step_Guide/s1-viewingtext-terminal.html)

</details>

<details>
<summary><b>إشارات POSIX: SIGHUP، SIGINT، SIGKILL، وSIGTERM. اشرح.</b></summary><br>

- **SIGHUP** - تُرسل إلى عملية عندما تُغلق محطتها الطرفية المتحكمة. صُممت في الأصل لإعلام العملية بانقطاع الخط التسلسلي (إيقاف الاتصال). العديد من الخدمات الخلفية (daemons) تُعيد تحميل ملفات إعداداتها وتفتح ملفات السجل من جديد بدلاً من الخروج عند استقبال هذه الإشارة.
- **SIGINT** - تُرسل إلى عملية من محطتها الطرفية المتحكمة عندما يرغب المستخدم في مقاطعة العملية. يتم ذلك عادةً بالضغط على `Ctrl+C`، ولكن في بعض الأنظمة يمكن استخدام مفتاح "delete" أو مفتاح "break".
- **SIGKILL** - تُرسل إلى عملية لإجبارها على الإنهاء فورًا (قتل). على عكس **SIGTERM** و **SIGINT**، لا يمكن التقاط هذه الإشارة أو تجاهلها، ولا يمكن للعملية المستقبلة تنفيذ أي تنظيف عند تلقيها.
- **SIGTERM** - تُرسل إلى عملية لطلب إنهائها. على عكس إشارة **SIGKILL**، يمكن التقاطها أو تفسيرها أو تجاهلها بواسطة العملية. وهذا يسمح للعملية بالإنهاء بشكل لطيف، وتحرير الموارد وحفظ الحالة إذا كان ذلك مناسبًا. **SIGINT** مطابق تقريبًا لـ **SIGTERM**.

موارد مفيدة:

- [إشارات POSIX](https://dsa.cs.tsinghua.edu.cn/oj/static/unix_signal.html)
- [مقدمة في برمجة إشارات Unix](http://titania.ctie.monash.edu.au/signals/)

</details>

<details>
<summary><b>ماذا يفعل الأمر `kill`؟</b></summary><br>

في أنظمة Unix وما يشابهها، `kill` هو أمر يُستخدم لإرسال إشارة إلى عملية. بشكل افتراضي، الرسالة المُرسلة هي إشارة الإنهاء، والتي تطلب من العملية الخروج. لكن اسم `kill` مضلل بعض الشيء؛ فقد لا يكون للإشارة المُرسلة أي علاقة بقتل العملية.

موارد مفيدة:

- [إتقان أمر "Kill" في لينكس](https://www.maketecheasier.com/kill-command-in-linux/)

</details>

<details>
<summary><b>ما الفرق بين `rm` و `rm -rf`؟</b></summary><br>

`rm` يحذف فقط الملفات المسماة (وليس المجلدات). مع `-rf` كما ذكرت:

- `-r`, `-R`, `--recursive` يحذف محتويات مجلد بشكل تكراري، بما في ذلك الملفات المخفية والمجلدات الفرعية
- `-f`, `--force` يتجاهل الملفات غير الموجودة، ولا يطلب تأكيدًا أبدًا

موارد مفيدة:

- [ما الفرق بين `rm -r` و `rm -f`؟](https://superuser.com/questions/1126206/what-is-the-difference-between-rm-r-and-rm-f)

</details>

<details>
<summary><b>كيف أستخدم `grep` بشكل تكراري؟ اشرح مع عدة أمثلة. ***</b></summary>

سيتم إكماله.

</details>

<details>
<summary><b>حجم ملف `archive.tgz` حوالي 30 جيجابايت. كيف يمكنك عرض محتوياته واستخراج ملف واحد فقط؟</b></summary><br>```bash
# list of content
tar tf archive.tgz

# extract file
tar xf archive.tgz filename
```
مصادر مفيدة:

- [عرض محتويات ملف tar أو tar.gz](https://www.cyberciti.biz/faq/list-the-contents-of-a-tar-or-targz-file/)
- [كيفية استخراج ملف (ملفات) محددة من tar.gz](https://unix.stackexchange.com/questions/61461/how-to-extract-specific-files-from-tar-gz)

</details>

<details>
<summary><b>تنفيذ دمج أوامر شل المتعددة في سطر واحد.</b></summary><br>

إذا كنت ترغب في تنفيذ كل أمر فقط إذا نجح الأمر السابق، فقم بدمجها باستخدام العامل `&&`:```bash
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
```
إذا فشل أحد الأوامر، فلن يتم تنفيذ جميع الأوامر الأخرى التي تليه.

إذا كنت تريد تنفيذ جميع الأوامر بغض النظر عن فشل الأوامر السابقة أو نجاحها، فافصل بينها بفاصلة منقوطة:```bash
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
```
في حالتك، أعتقد أنك تريد الحالة الأولى حيث يعتمد تنفيذ الأمر التالي على نجاح الأمر السابق.

يمكنك أيضًا وضع جميع الأوامر في سكريبت وتنفيذ ذلك بدلاً من ذلك:```bash
#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install
```
مصادر مفيدة:

- [تنفيذ ودمج أوامر لينكس المتعددة في سطر واحد (الأصلي)](https://stackoverflow.com/questions/13077241/execute-combine-multiple-linux-commands-in-one-line)

</details>

<details>
<summary><b>ما هو التمثيل الرمزي الذي يمكن تمريره إلى <code>chmod</code> لمنح جميع المستخدمين صلاحية التنفيذ لملف دون التأثير على الأذونات الأخرى؟</b></summary><br>```bash
chmod a+x /path/to/file
```
- `a` - لجميع المستخدمين
- `x` - إذن التنفيذ
- `r` - إذن القراءة
- `w` - إذن الكتابة

موارد مفيدة:
- [كيفية تعيين أذونات الملفات باستخدام chmod](https://www.washington.edu/computing/unix/permissions.html)
- [ماذا يفعل "chmod +x your_file_name" وكيف أستخدمه؟](https://askubuntu.com/questions/443789/what-does-chmod-x-filename-do-and-how-do-i-use-it)

</details>

<details>
<summary><b>كيف يمكنني مزامنة دليلين محليين؟</b></summary><br>

لمزامنة محتويات **dir1** إلى **dir2** على نفس النظام، اكتب:```bash
rsync -av --progress --delete dir1/ dir2
```
- `-a`, `--archive` - وضع الأرشفة
- `--delete` - حذف الملفات الزائدة من الأدلة الوجهة
- `-v`, `--verbose` - وضع الإسهاب (زيادة مستوى التفصيل)
- `--progress` - إظهار التقدم أثناء النقل

مصادر مفيدة:

- [كيف يمكنني مزامنة دليلين محليين؟ (الأصلي)](https://unix.stackexchange.com/questions/392536/how-can-i-sync-two-local-directories)
- [مزامنة المجلدات باستخدام rsync](https://www.jveweb.net/en/archives/2010/11/synchronizing-folders-with-rsync.html)

</details>

<details>
<summary><b>تتطلب العديد من مهام الصيانة الأساسية تحرير ملفات الإعدادات. اشرح طرقًا لعكس التغييرات التي تجريها.</b></summary><br>

- نسخ احتياطي يدوي للملف قبل التحرير (باستخدام توسيع الأقواس مثل: `cp filename{,.orig}`)
- نسخ يدوي لهيكل الدليل حيث يوجد الملف (مثل `cp` أو `rsync` أو `tar`)
- إنشاء نسخة احتياطية من الملف الأصلي في المحرر الخاص بك (مثل وضع قواعد في ملف إعدادات المحرر)
- الحل الأفضل هو استخدام `git` (أو أي نظام تحكم في الإصدارات) لتتبع ملفات الإعدادات (مثل `etckeeper` لدليل `/etc`)

مصادر مفيدة:

- [النسخ الاحتياطي للملف مع .bak قبل امتداد الملف](https://unix.stackexchange.com/questions/66376/backup-file-with-bak-before-filename-extension)
- [هل من الجيد استخدام git للتحكم في إصدارات ملفات الإعدادات؟](https://superuser.com/questions/1037211/is-it-a-good-idea-to-use-git-for-configuration-file-version-controlling)

</details>

<details>
<summary><b>عليك العثور على جميع الملفات الأكبر من 20 ميغابايت. كيف تفعل ذلك؟</b></summary><br>```bash
find / -type f -size +20M
```
موارد مفيدة:

- [كيف يمكنني العثور على الملفات الأكبر/الأصغر من x بايت؟](https://superuser.com/questions/204564/how-can-i-find-files-that-are-bigger-smaller-than-x-bytes)

</details>

<details>
<summary><b>لماذا نستخدم <code>sudo su -</code> وليس فقط <code>sudo su</code>؟</b></summary><br>

`sudo` موجود في معظم توزيعات لينكس الحديثة حيث (ولكن ليس دائمًا) يتم تعطيل المستخدم الجذر وليس لديه كلمة مرور محددة. لذلك لا يمكنك التبديل إلى المستخدم الجذر باستخدام `su` (يمكنك المحاولة). يجب عليك استدعاء `sudo` بصلاحيات الجذر: `sudo su`.

`su` فقط يبدّل المستخدم، ويوفر شل عادية مع بيئة مشابهة تقريبًا لبيئة المستخدم القديم.

`su -` يستدعي شل تسجيل الدخول بعد تبديل المستخدم. شل تسجيل الدخول يعيد تعيين معظم متغيرات البيئة، مما يوفر قاعدة نظيفة.

موارد مفيدة:

- [su vs sudo -s vs sudo -i vs sudo bash](https://unix.stackexchange.com/questions/35338/su-vs-sudo-s-vs-sudo-i-vs-sudo-bash)
- [لماذا نستخدم su - وليس فقط su؟ (الأصلي)](https://unix.stackexchange.com/questions/7013/why-do-we-use-su-and-not-just-su)

</details>

<details>
<summary><b>كيف تجد الملفات التي تم تعديلها على نظامك خلال الستين دقيقة الماضية؟</b></summary><br>```bash
find / -mmin -60 -type f
```
موارد مفيدة:

- [الحصول على جميع الملفات المعدلة في آخر 30 يومًا في دليل (الأصلي)](https://stackoverflow.com/questions/23070245/get-all-files-modified-in-last-30-days-in-a-directory)

</details>

<details>
<summary><b>ما هي الأسباب الرئيسية للاحتفاظ بملفات السجلات القديمة؟</b></summary><br>

إنها ضرورية للتحقيق في المشكلات على النظام. **إدارة السجلات** أمر بالغ الأهمية لأمن تكنولوجيا المعلومات.

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

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

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

عوامل يجب مراعاتها:

- المتطلبات القانونية للاحتفاظ أو الإتلاف
- سياسات الشركة للاحتفاظ والإتلاف
- مدة فائدة السجلات
- الأسئلة التي تأمل في الإجابة عليها من السجلات
- مقدار المساحة التي تشغلها

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

موارد مفيدة:

- [كم من الوقت تحتفظ بملفات السجلات؟](https://serverfault.com/questions/135365/how-long-do-you-keep-log-files)

</details>

<details>
<summary><b>ما هو النسخ الاحتياطي المتزايد؟</b></summary><br>

النسخ الاحتياطي المتزايد هو نوع من النسخ الاحتياطي ينسخ فقط الملفات التي تغيرت منذ النسخ الاحتياطي السابق.

موارد مفيدة:

- [ما هو النسخ الاحتياطي المتزايد؟](https://www.nakivo.com/blog/what-is-incremental-backup/)

</details>

<details>
<summary><b>ما هو RAID؟ ما هو RAID0، RAID1، RAID5، RAID6، RAID10؟ </b></summary><br>

**RAID** (مصفوفة زائدة من الأقراص غير المكلفة) هي تقنية تُستخدم لزيادة أداء و/أو موثوقية تخزين البيانات.

- **RAID0**: يُعرف أيضًا باسم **تقسيم الأقراص**، وهي تقنية تقوم بتقسيم الملف ونشر البيانات عبر جميع محركات الأقراص في مجموعة RAID. لا توجد ضمانات ضد الفشل.
- **RAID1**: نظام فرعي شائع للأقراص يزيد من الأمان عن طريق كتابة نفس البيانات على محركي أقراص. يُسمى "**النسخ المتطابق**"، لا يزيد RAID1 من أداء الكتابة، ولكن أداء القراءة قد يصل إلى مجموع أداء كل قرص. ومع ذلك، إذا فشل أحد محركات الأقراص، يتم استخدام محرك الأقراص الثاني، ويتم استبدال المحرك الفاشل يدويًا. بعد الاستبدال، يقوم وحدة تحكم RAID بنسخ محتويات محرك الأقراص العامل إلى الجديد.
- **RAID5**: نظام فرعي للأقراص يزيد من الأمان عن طريق حساب بيانات التكافؤ وزيادة السرعة عن طريق توزيع البيانات عبر ثلاثة محركات أقراص أو أكثر (**التقسيم**). عند فشل محرك أقراص واحد، يمكن حساب القراءات اللاحقة من التكافؤ الموزع بحيث لا يتم فقدان أي بيانات.
- **RAID6**: يوسع RAID6 من RAID5 بإضافة كتلة تكافؤ أخرى. يتطلب أربعة أقراص على الأقل ويمكنه متابعة تنفيذ القراءة والكتابة في حالة فشل أي قرصين متزامنين. RAID6 لا يعاني من عقوبة أداء لعمليات القراءة، ولكن لديه عقوبة أداء لعمليات الكتابة بسبب الحمل الإضافي المرتبط بحسابات التكافؤ.
- **RAID10**: يُعرف أيضًا باسم **RAID 1+0**، وهو تكوين RAID يجمع بين النسخ المتطابق للأقراص وتقسيم الأقراص لحماية البيانات. يتطلب أربعة أقراص على الأقل، ويقوم بتقسيم البيانات عبر أزواج متطابقة. طالما أن قرصًا واحدًا في كل زوج متطابق يعمل، يمكن استرداد البيانات. إذا فشل قرصان في نفس الزوج المتطابق، فسيتم فقدان جميع البيانات لأنه لا يوجد تكافؤ في المجموعات المقسمة.

موارد مفيدة:

- [RAID](https://www.prepressure.com/library/technology/raid)

</details>

<details>
<summary><b>كيف يتم تحديد المجموعة الافتراضية للمستخدم؟ كيف يمكنك تغييرها؟ </b></summary><br>```bash
useradd -m -g initial_group username
```
`-g/--gid`: يُعرّف اسم المجموعة أو رقم مجموعة تسجيل الدخول الأولية للمستخدم. إذا تم تحديده، يجب أن يكون اسم المجموعة موجودًا؛ إذا تم توفير رقم مجموعة، فيجب أن يشير إلى مجموعة موجودة بالفعل.

إذا لم يتم تحديده، سيعتمد سلوك useradd على المتغير `USERGROUPS_ENAB` الموجود في `/etc/login.defs`. السلوك الافتراضي (`USERGROUPS_ENAB yes`) هو إنشاء مجموعة بنفس اسم المستخدم، مع **GID** مساوٍ لـ **UID**.

مصادر مفيدة:

- [كيف يمكنني تغيير المجموعة الافتراضية للمستخدم في لينكس؟](https://unix.stackexchange.com/questions/26675/how-can-i-change-a-users-default-group-in-linux)

</details>

<details>
<summary><b>ما هو أفضل محرر نصوص سطر أوامر لديك للعمل اليومي والبرمجة النصية؟ ***</b></summary><br>

سيتم إكماله لاحقًا.

</details>

<details>
<summary><b>لماذا ترغب في تركيب الخوادم في رف (rack)؟</b></summary><br>

- حماية الأجهزة
- التبريد المناسب
- مساحة عمل منظمة
- إدارة طاقة أفضل
- بيئة أنظف

مصادر مفيدة:

- [5 أسباب لتركيب حاسوبك الشخصي في رف](https://www.racksolutions.com/news/custom-projects/5-reasons-to-rackmount-pc/)

</details>

###### أسئلة الشبكات (23)

<details>
<summary><b>ارسم لي مخطط شبكة بسيط: لديك 20 نظامًا، وجهاز توجيه واحد، و4 مفاتيح (switches)، و5 خوادم، وكتلة IP صغيرة. ***</b></summary><br>

سيتم إكماله لاحقًا.

</details>

<details>
<summary><b>ما هي أهم الأشياء التي يجب فهمها حول نموذج OSI (أو أي نموذج آخر)؟</b></summary><br>

أهم الأشياء التي يجب فهمها حول نموذج **OSI** (أو أي نموذج آخر) هي:

- يمكننا تقسيم البروتوكولات إلى طبقات
- توفر الطبقات التغليف (encapsulation)
- توفر الطبقات التجريد (abstraction)
- تفصل الطبقات الوظائف عن بعضها البعض

مصادر مفيدة:

- [علاقة نموذج OSI وبروتوكولات الشبكات](https://networkengineering.stackexchange.com/questions/6380/osi-model-and-networking-protocols-relationship)

</details>

<details>
<summary><b>ما الفرق بين VLAN والشبكة الفرعية (subnet)؟ هل تحتاج إلى VLAN لإعداد شبكة فرعية؟</b></summary><br>

**VLANs** و **subnets** تحل مشاكل مختلفة. تعمل **VLANs** في الطبقة الثانية (Layer 2)، وبالتالي تغير نطاقات البث (على سبيل المثال). بينما **subnets** هي في الطبقة الثالثة (Layer 3) في السياق الحالي.

**الشبكة الفرعية (Subnet)** - هي نطاق من عناوين IP يتم تحديده بواسطة جزء من العنوان (يُسمى غالبًا عنوان الشبكة) وقناع الشبكة الفرعية (subnet mask). على سبيل المثال، إذا كان قناع الشبكة هو `255.255.255.0` (أو `/24` للاختصار)، وكان عنوان الشبكة هو `192.168.10.0`، فإن ذلك يحدد نطاقًا من عناوين IP من `192.168.10.0` إلى `192.168.10.255`. الاختصار لكتابة ذلك هو `192.168.10.0/24`.

**VLAN** - طريقة جيدة للتفكير في هذا هي "تقسيم المفتاح (switch)". لنفترض أن لديك مفتاحًا بـ8 منافذ يدعم VLAN. يمكنك تخصيص 4 منافذ لـ **VLAN** واحد (مثل `VLAN 1`) و4 منافذ لـ **VLAN** آخر (مثل `VLAN 2`). لن ترى `VLAN 1` أي حركة مرور من `VLAN 2` والعكس صحيح، منطقيًا، أصبح لديك الآن مفتاحين منفصلين. عادةً على المفتاح، إذا لم ير المفتاح عنوان MAC، فسيقوم "بإغراق" (flood) حركة المرور إلى جميع المنافذ الأخرى. تمنع **VLANs** ذلك.

الشبكة الفرعية ليست أكثر من نطاق عناوين IP يساعد المضيفين على التواصل عبر الطبقتين 2 و 3. لا تتطلب كل شبكة فرعية **VLAN** خاصًا بها. يتم تنفيذ **VLANs** للعزل (هي بيئة معزولة للاتصال في الطبقة الثانية، لا يمكن لنظامين من **VLANs** مختلفين الاتصال ولكن يمكن القيام بذلك من خلال **التوجيه بين VLANs (Inter VLAN routing)**) وسهولة الإدارة والأمان.

مصادر مفيدة:

- [ما الفرق بين VLAN والشبكة الفرعية؟ (الأصلي)](https://superuser.com/questions/353664/what-is-the-difference-between-a-vlan-and-a-subnet)
- [VLANS مقابل الشبكات الفرعية لأمن الشبكة وتقسيمها](https://networkengineering.stackexchange.com/questions/46899/vlans-vs-subnets-for-network-security-and-segmentation)

</details>

<details>
<summary><b>اذكر 5 منافذ شبكة شائعة يجب أن تعرفها.</b></summary><br>

<table style="width:100%">
  <tr>
    <th>الخدمة</th>
    <th>المنفذ</th>
  </tr>
  <tr>
    <td>SMTP</td>
    <td>25</td>
  </tr>
  <tr>
    <td>FTP</td>
    <td>20 لنقل البيانات و 21 لإنشاء الاتصال</td>
  </tr>
  <tr>
    <td>DNS</td>
    <td>53</td>
  </tr>
  <tr>
    <td>DHCP</td>
    <td>67/UDP لخادم DHCP، 68/UDP لعميل DHCP</td>
  </tr>
  <tr>
    <td>SSH</td>
    <td>22</td>
  </tr>
</table>

مصادر مفيدة:

- [Red Hat Enterprise Linux 4: دليل الأمان - المنافذ الشائعة](https://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-en-4/ch-ports.html)

</details>

<details>
<summary><b>ما هما POP و IMAP، وكيف تختار أيهما يجب تنفيذه؟</b></summary><br>

POP و IMAP هما بروتوكولان لاسترجاع الرسائل من خادم البريد إلى عميل البريد.

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

**IMAP** (_بروتوكول الوصول إلى رسائل الإنترنت_) يستخدم اتصالًا ثنائي الاتجاه بين خادم البريد والعميل. حذف أو وضع علامة على رسالة في عميل البريد الخاص بك المُهيأ مع IMAP سيؤدي أيضًا إلى حذف أو وضع علامة على الرسالة على خادم البريد. يسمح IMAP بتجربة مماثلة عند الوصول إلى البريد عبر عملاء أو أجهزة مختلفة حيث يمكن أن توجد الرسائل بنفس الحالة عبر أجهزة متعددة. يمكن لـ IMAP أيضًا توفير مساحة القرص على عميل البريد عن طريق مزامنة الرسائل بشكل انتقائي، وحذف الرسائل الأقدم من عميل البريد حيث يمكن مزامنتها من خادم البريد لاحقًا حسب الحاجة.

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

</details>

<details>
<summary><b>كيف تتحقق من المسار الافتراضي وجدول التوجيه؟</b></summary><br>

باستخدام الأوامر `netstat -nr` أو `route -n` أو `ip route show` يمكننا رؤية المسار الافتراضي وجداول التوجيه.

مصادر مفيدة:

- [كيفية التحقق من المسارات (جدول التوجيه) في لينكس](https://howto.lintel.in/how-to-check-routes-routing-table-in-linux/)
- [تعيين مسار/بوابة افتراضية في FreeBSD](https://www.cyberciti.biz/faq/freebsd-setup-default-routing-with-route-command/)

</details>

<details>
<summary><b>ما الفرق بين 127.0.0.1 و localhost؟</b></summary><br>

حسنًا، الاختلاف الأكثر احتمالاً هو أنه لا يزال يتعين عليك إجراء بحث فعلي عن localhost في مكان ما.

إذا استخدمت `127.0.0.1`، فإن البرنامج (الذكي) سيحوله مباشرة إلى عنوان IP ويستخدمه. بعض تطبيقات `gethostbyname` ستكتشف التنسيق النقطي (وما يعادله من IPv6 على الأرجح) ولن تقوم بأي بحث على الإطلاق.

وإلا، يجب تحليل الاسم. وليس هناك ضمان على أن ملف hosts الخاص بك سيُستخدم بالفعل لهذا التحليل (أولاً، أو على الإطلاق)، لذلك قد يصبح localhost عنوان IP مختلفًا تمامًا.

أعني بذلك أنه، على بعض الأنظمة، يمكن تجاوز ملف hosts المحلي. يتحكم ملف `host.conf` في هذا على لينكس (والعديد من أنظمة Unix الأخرى).

إذا استخدمت مقبس نطاق Unix (Unix domain socket) فسيكون أسرع قليلاً من استخدام TCP/IP (بسبب تقليل الحمل الزائد). تستخدم Windows TCP/IP كخيار افتراضي، بينما يحاول لينكس استخدام مقبس نطاق Unix إذا اخترت localhost و TCP/IP إذا استخدمت `127.0.0.1`.

مصادر مفيدة:

- [ما الفرق بين 127.0.0.1 و localhost؟](https://stackoverflow.com/questions/7382602/what-is-the-difference-between-127-0-0-1-and-localhost)
- [localhost مقابل 127.0.0.1](https://stackoverflow.com/questions/3715925/localhost-vs-127-0-0-1)

</details>

<details>
<summary><b>أي منفذ يُستخدم لأمر <code>ping</code>؟</b></summary><br>

يستخدم `ping` **ICMP**، وتحديدًا حزم **طلب صدى ICMP** و **رد صدى ICMP**. لا يوجد 'منفذ' مرتبط بـ **ICMP**. المنافذ مرتبطة ببروتوكولي طبقة النقل IP، TCP و UDP. **ICMP** و TCP و UDP هم "أشقاء"؛ لا يعتمدون على بعضهم البعض، بل هم ثلاثة بروتوكولات منفصلة تعمل فوق IP.

تُحدد حزم **ICMP** بواسطة حقل 'البروتوكول' في رأس مخطط بيانات IP. لا يستخدم **ICMP** خدمات اتصال UDP أو TCP، بل يستخدم خدمات اتصال IP الخام. هذا يعني أن رسالة **ICMP** تُحمل مباشرة في حقل بيانات مخطط IP. يأتي `raw` من كيفية تنفيذ ذلك في البرنامج، لإنشاء وإرسال رسالة **ICMP**، يفتح المرء مقبسًا خامًا (raw socket)، ويبني مخزنًا يحتوي على رسالة **ICMP**، ثم يكتب المخزن الذي يحتوي على الرسالة إلى المقبس الخام.

قيمة بروتوكول IP لـ **ICMP** هي 1. حقل البروتوكول جزء من رأس IP ويحدد ما هو موجود في جزء البيانات من مخطط بيانات IP.

ومع ذلك، يمكنك استخدام `nmap` لمعرفة ما إذا كانت المنافذ مفتوحة أم لا:```bash
nmap -p 80 example.com
```
موارد مفيدة:

- [Ping Port Number](https://networkengineering.stackexchange.com/questions/42463/ping-port-number)
- [Is it possible to ping an address:port?](https://superuser.com/questions/769541/is-it-possible-to-ping-an-addressport)

</details>

<details>
<summary><b>الخادم A لا يمكنه التواصل مع الخادم B. صف الأسباب المحتملة في بضع خطوات.</b></summary><br>

لاستكشاف مشكلات الاتصال بين الخوادم، من الأفضل اتباع حزمة TCP/IP من الناحية المثالية:

1. **طبقة التطبيق**: هل الخدمات قيد التشغيل على كلا الخادمين؟ هل تم تكوينها بشكل صحيح (على سبيل المثال، ربط IP الصحيح والمنفذ الصحيح)؟ هل تظهر سجلات التطبيق والنظام أخطاء ذات معنى؟

2. **طبقة النقل**: هل المنافذ التي يستخدمها التطبيق مفتوحة (جرب telnet!)؟ هل من الممكن عمل ping للخادم؟

3. **طبقة الشبكة**: هل هناك جدار حماية على الشبكة أو على نظام التشغيل تم تكوينه بشكل صحيح؟ هل تم تكوين حزمة IP بشكل صحيح (IP، المسارات، DNS، إلخ.)؟ هل تعمل المحولات والموجهات (تحقق من جدول ARP!)؟

4. **الطبقة المادية**: هل الخوادم متصلة بشبكة؟ هل يتم فقدان الحزم؟

</details>

<details>
<summary><b>لماذا لا تتحلل أسماء المضيفات على الخادم الخاص بك؟ قم بإصلاح هذه المشكلة. ***</b></summary><br>

يتم إكماله.

</details>

<details>
<summary><b>كيفية تحليل اسم النطاق (باستخدام DNS خارجي) باستخدام CLI؟ هل يمكن تحليل عناوين IP إلى أسماء نطاقات؟</b></summary><br>

أمثلة لتحليل عنوان IP إلى اسم نطاق:```bash
# with host command:
host domain.com 8.8.8.8

# with dig command:
dig @9.9.9.9 google.com

# with nslookup command:
nslookup domain.com 8.8.8.8
```
يمكنك (أحيانًا) حل عنوان IP إلى اسم مضيف. يمكن تخزين عنوان IP مقابل سجل **PTR**. يمكنك بعد ذلك القيام بما يلي:```bash
dig A <hostname>
```
للبحث عن عنوان IPv4 لمضيف، أو:```bash
dig AAAA <hostname>
```
للبحث عن عنوان IPv6 لمضيف، أو:```bash
dig PTR ZZZ.YYY.XXX.WWW.in-addr.arpa.
```
للبحث عن اسم المضيف لعنوان IPv4 `WWW.XXX.YYY.ZZZ` (لاحظ أن الأوكتيتات معكوسة)، أو:```bash
dig PTR b.a.9.8.7.6.5.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.
```
موارد مفيدة:

- [كيف يمكنني تحليل اسم مضيف إلى عنوان IP في نص Bash script؟](https://unix.stackexchange.com/questions/20784/how-can-i-resolve-a-hostname-to-an-ip-address-in-a-bash-script)
- [كيفية تحويل عناوين IP إلى أسماء نطاقات؟](https://superuser.com/questions/315687/how-to-resolve-ip-addresses-to-domain-names)

</details>

<details>
<summary><b>كيفية اختبار اتصال المنفذ باستخدام <code>telnet</code> أو <code>nc</code>؟</b></summary><br>```bash
# with telnet command:
telnet code42.example.com 5432

# with nc (netcat) command:
nc -vz code42.example.com 5432
```
</details>

<details>
<summary><b>لماذا يجب عليك تجنب استخدام <code>telnet</code> لإدارة نظام عن بُعد؟</b></summary><br>

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

**Telnet** يستخدم أكثر الطرق غير الآمنة للاتصال. فهو يرسل البيانات عبر الشبكة بتنسيق نص عادي ويمكن لأي شخص بسهولة اكتشاف كلمة المرور باستخدام أداة الشبكة.

في حالة **Telnet**، يشمل ذلك تمرير بيانات تسجيل الدخول بنص عادي، مما يعني أن أي شخص يقوم بتشغيل sniffer على شبكتك يمكنه العثور على المعلومات التي يحتاجها للسيطرة على جهاز في بضع ثوانٍ من خلال التنصت على جلسة تسجيل دخول **Telnet**.

موارد مفيدة:

- [Telnet وSSH كبديل آمن](https://www.ssh.com/ssh/telnet)
- [كيفية استخدام telnet للاتصال بعنوان IP على منفذ محدد؟](https://superuser.com/questions/339107/how-to-telnet-to-an-ip-address-on-a-specific-port)

</details>

<details>
<summary><b>ما الفرق بين <code>wget</code> و <code>curl</code>؟</b></summary><br>

الاختلافات الرئيسية هي: نقطة القوة الرئيسية لـ `wget` مقارنة بـ `curl` هي قدرته على التنزيل بشكل متكرر. `wget` هو أداة سطر أوامر فقط. `curl` يدعم FTP، FTPS، HTTP، HTTPS، SCP، SFTP، TFTP، TELNET، DICT، LDAP، LDAPS، FILE، POP3، IMAP، SMTP، RTMP و RTSP.

موارد مفيدة:

- [ما الفرق بين curl و wget؟ (أصلي)](https://unix.stackexchange.com/questions/47434/what-is-the-difference-between-curl-and-wget)

</details>

<details>
<summary><b>ما هو SSH وكيف يعمل؟</b></summary><br>

**SSH** تعني **Secure Shell**. هو بروتوكول يتيح لك الانتقال من خادم "أ" إلى جلسة شل على خادم "ب". يسمح لك بالتفاعل مع خادمك "ب".

لإنشاء اتصال **SSH**، يجب أن يكون الجهاز البعيد (الخادم أ) يعمل عليه برنامج يسمى **SSH daemon** ويجب أن يكون لدى كمبيوتر المستخدم (الخادم ب) عميل **SSH**.

يستمع **SSH daemon** وعميل **SSH** للاتصالات على منفذ شبكة محدد (الافتراضي 22)، ويصادق على طلبات الاتصال، ويطلق البيئة المناسبة إذا قدم المستخدم بيانات الاعتماد الصحيحة.

موارد مفيدة:

- [فهم عملية تشفير واتصال SSH](https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process)

</details>

<details>
<summary><b>معظم الدروس التعليمية تقترح استخدام مصادقة مفتاح SSH بدلاً من مصادقة كلمة المرور. لماذا يعتبر ذلك أكثر أمانًا؟</b></summary><br>

**مفتاح SSH** هو بيانات اعتماد الوصول في بروتوكول SSH. وظيفته مشابهة لأسماء المستخدمين وكلمات المرور، ولكن المفاتيح تُستخدم بشكل أساسي للعمليات التلقائية ولتنفيذ الدخول الموحد من قبل مسؤولي النظام والمستخدمين المتقدمين.

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

إذا كانت خدمة SSH الخاصة بك تسمح فقط بالمصادقة بالمفتاح العام، فسيحتاج المهاجم إلى نسخة من مفتاح خاص يتوافق مع مفتاح عام مخزن على الخادم.

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

موارد مفيدة:

- [المصادقة القائمة على المفتاح (مصادقة المفتاح العام)](http://www.crypto-it.net/eng/tools/key-based-authentication.html)
- [مقارنة مصادقة SSH بكلمة المرور مقابل المفتاح](https://security.stackexchange.com/questions/33381/ssh-password-vs-key-authentication)

</details>

<details>
<summary><b>ما هو مرشح الحزم وكيف يعمل؟</b></summary><br>

**تصفية الحزم** هي تقنية جدار حماية تُستخدم للتحكم في الوصول إلى الشبكة من خلال مراقبة الحزم الصادرة والواردة والسماح لها بالمرور أو إيقافها بناءً على عناوين بروتوكول الإنترنت (IP) المصدر والوجهة والبروتوكولات والمنافذ.

تصفية الحزم مناسبة عندما تكون متطلبات الأمان متواضعة. الشبكات الداخلية (الخاصة) للعديد من المؤسسات ليست مقسمة بشكل كبير. جدران الحماية المتطورة للغاية ليست ضرورية لعزل جزء من المؤسسة عن جزء آخر.

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

تعمل في طبقة الشبكة وطبقة النقل من مكدس بروتوكول TCP/IP، حيث يتم فحص كل حزمة عند دخولها إلى مكدس البروتوكول. يتم فحص رؤوس الشبكة والنقل عن كثب للحصول على المعلومات التالية:

- **البروتوكول (رأس IP، طبقة الشبكة)** - في رأس IP، البايت 9 (تذكر أن عدد البايت يبدأ من الصفر) يحدد بروتوكول الحزمة. معظم أجهزة التصفية لديها القدرة على التمييز بين TCP و UDP و ICMP.
- **عنوان المصدر (رأس IP، طبقة الشبكة)** - عنوان المصدر هو عنوان IP 32 بت للمضيف الذي أنشأ الحزمة.
- **عنوان الوجهة (رأس IP، طبقة الشبكة)** - عنوان الوجهة هو عنوان IP 32 بت للمضيف الذي تم إرسال الحزمة إليه.
- **منفذ المصدر (رأس TCP أو UDP، طبقة النقل)** - كل طرف من اتصال TCP أو UDP مرتبط بمنفذ. منافذ TCP منفصلة ومتميزة عن منافذ UDP. المنافذ التي يقل رقمها عن 1024 محجوزة – لها استخدام محدد. المنافذ التي يزيد رقمها عن 1024 (شاملاً) تُعرف بالمنافذ المؤقتة. يمكن استخدامها كما يختار البائع. للحصول على قائمة بالمنافذ "المعروفة"، راجع RFP1700. منفذ المصدر هو رقم منفذ مؤقت معين بشكل شبه عشوائي. وبالتالي، غالبًا ما لا يكون من المفيد جدًا التصفية بناءً على منفذ المصدر.
- **منفذ الوجهة (رأس TCP أو UDP، طبقة النقل)** - يشير رقم منفذ الوجهة إلى المنفذ الذي تُرسل إليه الحزمة. تستمع كل خدمة على المضيف الوجهة إلى منفذ. بعض المنافذ المعروفة التي قد يتم تصفيتها هي 20/TCP و 21/TCP - اتصال ftp/بيانات، 23/TCP - telnet، 80/TCP - http، و 53/TCP - نقل مناطق DNS.
- **حالة الاتصال (رأس TCP، طبقة النقل)** - تخبر حالة الاتصال ما إذا كانت الحزمة هي الحزمة الأولى من جلسة الشبكة. يتم ضبط بت ACK في رأس TCP على "خطأ" أو 0 إذا كانت هذه هي الحزمة الأولى في الجلسة. من السهل منع مضيف من إنشاء اتصال عن طريق رفض أو تجاهل أي حزم تحتوي على بت ACK مضبوطًا على "خطأ" أو 0.

موارد مفيدة:

- [بناء جدران حماية الإنترنت - تصفية الحزم](http://web.deu.edu.tr/static/oreily/networking/firewall/ch06_01.htm)

</details>

<details>
<summary><b>ما هي مزايا استخدام خادم بروكسي عكسي؟</b></summary><br>

**إخفاء طوبولوجيا وخصائص خوادم النهاية الخلفية**

يمكن لـ **خادم البروكسي العكسي** إخفاء وجود وخصائص خادم المصدر. يعمل كوسيط بين سحابة الإنترنت وخادم الويب. إنه جيد لأسباب أمان خاصة عند استخدام خدمات استضافة الويب.

**يسمح بصيانة شفافة للخوادم الخلفية**

التغييرات التي تجريها على الخوادم التي تعمل خلف بروكسي عكسي ستكون شفافة تمامًا لمستخدميك النهائيين.

**موازنة التحميل**

سيفرض البروكسي العكسي خوارزمية موازنة تحميل مثل round robin، weighted round robin، least connections، weighted least connections، أو random، لتوزيع الحمل بين الخوادم في المجموعة.

عندما يتعطل خادم، سيتحول النظام تلقائيًا إلى الخادم التالي قيد التشغيل ويمكن للمستخدمين مواصلة أنشطة نقل الملفات الآمنة الخاصة بهم.

**تفريغ SSL / إنهاء SSL**

يتعامل مع اتصالات HTTPS الواردة، ويفك تشفير الطلبات ويمرر الطلبات غير المشفرة إلى خوادم الويب.

**إخفاء IP**

باستخدام عنوان IP واحد ولكن URLs مختلفة للتوجيه إلى خوادم خلفية مختلفة.

موارد مفيدة:

- [فوائد البروكسي العكسي](https://dzone.com/articles/benefits-reverse-proxy)

</details>

<details>
<summary><b>ما الفرق بين جهاز التوجيه والبوابة؟ ما هي البوابة الافتراضية؟</b></summary><br>

**جهاز التوجيه** يصف الوظيفة الفنية العامة (التوجيه في الطبقة 3) أو جهاز الأجهزة المخصص لهذا الغرض، بينما تصف **البوابة** الوظيفة للقطاع المحلي (توفير الاتصال بمكان آخر). يمكنك أيضًا أن تقول "لقد قمت بإعداد جهاز توجيه كبوابة". مصطلح آخر هو hop الذي يصف التوجيه بين الشبكات الفرعية.

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

إنها مجرد مسألة منظور، الجهاز هو نفسه.

موارد مفيدة:

- [الفرق بين جهاز التوجيه والبوابة (أصلي)](https://networkengineering.stackexchange.com/questions/51426/difference-between-router-and-gateway)

</details>

<details>
<summary><b>اشرح وظيفة كل من سجلات DNS التالية: SOA، PTR، A، MX، و CNAME.</b></summary><br>

**سجلات DNS** هي بشكل أساسي ملفات تعيين تخبر خادم DNS بعنوان IP الذي يرتبط به كل نطاق، وكيفية التعامل مع الطلبات المرسلة إلى كل نطاق. بعض صيغ **سجلات DNS** المستخدمة بشكل شائع في جميع تكوينات سجلات DNS تقريبًا هي `A`، `AAAA`، `CNAME`، `MX`، `PTR`، `NS`، `SOA`، `SRV`، `TXT`، و `NAPTR`.

- **SOA** - بداية السلطة (Start Of Authority)
- **A** - سجلات تعيين العنوان (Address Mapping records)
- **AAAA** - سجلات عنوان الإصدار 6 (IP Version 6 Address records)
- **CNAME** - سجلات الاسم القانوني (Canonical Name records)
- **MX** - سجل مبادل البريد (Mail exchanger record)
- **NS** - سجلات خادم الأسماء (Name Server records)
- **PTR** - سجلات المؤشر للبحث العكسي (Reverse-lookup Pointer records)

موارد مفيدة:

- [قائمة أنواع سجلات DNS](https://en.wikipedia.org/wiki/List_of_DNS_record_types)

</details>

<details>
<summary><b>لماذا لا يمكن استخدام عناوين MAC بدلاً من IPv4/6 في الشبكات؟</b></summary><br>

يشرح نموذج **OSI** سبب عدم منطقية اتخاذ قرارات التوجيه (مفهوم **الطبقة 3**) بناءً على آلية مادية (**الطبقة 2**).

الشبكات الحديثة مقسمة إلى طبقات مختلفة كثيرة لتحقيق الاتصال من النهاية إلى النهاية. بطاقة الشبكة الخاصة بك (التي يتم معالجتها بواسطة عنوان mac - العنوان المادي) تحتاج فقط إلى أن تكون مسؤولة عن التواصل مع الأقران على شبكتها المادية.

الاتصال الذي يُسمح لك بتحقيقه باستخدام عنوان **MAC** الخاص بك سيكون محدودًا بالأجهزة الأخرى الموجودة ضمن الاتصال المادي بجهازك. على الإنترنت، على سبيل المثال، أنت لست متصلاً فعليًا بكل جهاز. لهذا السبب نستخدم آلية **TCP/IP** (عنوان **الطبقة 3**، عنوان منطقي) عندما نحتاج إلى التواصل مع جهاز غير متصل به فعليًا.

**IP** هو مخطط ترقيم تعسفي يُفرض بطريقة هرمية على مجموعة من أجهزة الكمبيوتر لتمييزها منطقيًا كمجموعة (هذا هو مفهوم الشبكة الفرعية). يتم إرسال الرسائل بين تلك المجموعات عبر جداول التوجيه، وهي نفسها مقسمة إلى مستويات متعددة حتى لا نضطر إلى تتبع كل شبكة فرعية على حدة.

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

من ناحية أخرى، توزيع عناوين **MAC** عبر الشبكة عشوائي وغير مرتبط تمامًا بالطوبولوجيا. سيكون تجميع المسارات مستحيلًا، وسيحتاج كل جهاز توجيه إلى تتبع مسارات لكل جهاز يمرر حركة المرور من خلاله. هذا ما تفعله مفاتيح **الطبقة 2**، وهذا لا يتوسع بشكل جيد بعد عدد معين من المضيفين.

موارد مفيدة:

- [لماذا لا يمكن استخدام عناوين MAC بدلاً من IPv4|6 في الشبكات؟ (أصلي)](https://serverfault.com/questions/410626/why-couldnt-mac-addresses-be-used-instead-of-ipv46-for-networking)

</details>

<details>
<summary><b>ما هو أصغر قناع شبكة فرعية لـ IPv4 يمكن تطبيقه على شبكة تحتوي على ما يصل إلى 30 جهازًا؟</b></summary><br>

سواء كان لديك شبكة VLAN قياسية `/24` للمستخدمين النهائيين، أو `/30` للوصلات من نقطة إلى نقطة، أو شيئًا بين ذلك وشبكة فرعية يجب أن تحتوي على ما يصل إلى 30 جهازًا، فسيكون ذلك `/27` - أو قناع شبكة فرعية `255.255.255.224`.

موارد مفيدة:

- [كيف تحسب البادئة والشبكة والشبكة الفرعية وأرقام المضيف؟](https://networkengineering.stackexchange.com/questions/7106/how-do-you-calculate-the-prefix-network-subnet-and-host-numbers)
- [الشرطة المائلة بعد عنوان IP - ترميز CIDR](https://networkengineering.stackexchange.com/questions/3697/the-slash-after-an-ip-address-cidr-notation)
- [لماذا هناك 3 نطاقات من عناوين IPv4 الخاصة؟](https://networkengineering.stackexchange.com/questions/32119/why-are-there-3-ranges-of-private-ipv4-addresses)
- [حاسبة IP](http://jodies.de/ipcalc)

</details>

<details>
<summary><b>ما هي بعض رموز حالة HTTP الشائعة؟</b></summary><br>

- **1xx** - استجابات إعلامية - تنقل معلومات على مستوى بروتوكول النقل
- **2xx** - نجاح - تشير إلى أن طلب العميل قد تم قبوله بنجاح
- **3xx** - إعادة توجيه - تشير إلى أن العميل يجب أن يتخذ إجراءً إضافيًا لإكمال طلبه
- **4xx** - خطأ من جانب العميل - هذه الفئة من رموز حالة الخطأ تشير إلى أن المشكلة من العميل
- **5xx** - خطأ من جانب الخادم - يتحمل الخادم مسؤولية رموز حالة الخطأ هذه

موارد مفيدة:

- [رموز حالة HTTP](https://httpstatuses.com/)

</details>

###### أسئلة Devops (5)

<details>
<summary><b>ما هو DevOps؟ ما هو الأكثر أهمية لنجاح أي مجتمع DevOps: كيف يتواصل الناس أم الأدوات التي تختار نشرها؟ ***</b></summary><br>

**DevOps** هو فريق متماسك يشارك في كل من مهام التطوير والتشغيل، أو هو فرق تشغيل وتطوير منفصلة تعمل معًا بشكل وثيق للغاية. إنها أكثر من "طريقة" للعمل بشكل تعاوني مع الإدارات الأخرى لتحقيق أهداف مشتركة.

</details>

<details>
<summary><b>ما هو التحكم في الإصدارات؟ هل رسائل الالتزام الخاصة بك جيدة المظهر؟</b></summary><br>

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

يتيح لك التحكم في الإصدارات:

- التراجع عن الملفات إلى حالة سابقة
- التراجع عن المشروع بأكمله إلى حالة سابقة
- مقارنة التغييرات بمرور الوقت
- معرفة من قام آخر تعديل على شيء قد يسبب مشكلة
- من قام بإدخال مشكلة ومتى

القواعد السبعة لرسالة التزام رائعة:

- فصل الموضوع عن النص بخط فارغ
- الحد من سطر الموضوع إلى 50 حرفًا
- كتابة الموضوع بأحرف كبيرة
- لا تنهي سطر الموضوع بنقطة
- استخدم صيغة الأمر في سطر الموضوع
- التفاف النص عند 72 حرفًا
- استخدم النص لشرح ماذا ولماذا وليس كيف

موارد مفيدة:

- [البدء - حول التحكم في الإصدارات (أصلي)](https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control)

</details>

<details>
<summary><b>اشرح بعض أوامر <code>git</code> الأساسية.</b></summary><br>

- `git init` - إنشاء مستودع محلي جديد
- `git commit -m "message"` - إرسال التغييرات إلى الرأس (head)
- `git status` - سرد الملفات التي أضفتها باستخدام `git add` وكذلك إرسال أي ملفات قمت بتغييرها منذ ذلك الحين
- `git push origin master` - إرسال التغييرات إلى فرع master في المستودع البعيد

</details>

<details>
<summary><b>اشرح خط أنابيب التكامل المستمر البسيط.</b></summary><br>

- استنساخ المستودع
- مرحلة النشر (QA)
- بيئة الاختبار (QA)
- مرحلة النشر (PROD)

</details>

<details>
<summary><b>اشرح بعض أوامر <code>docker</code> الأساسية.</b></summary><br>

- `docker ps` - عرض الحاويات قيد التشغيل
- `docker ps -a` - عرض جميع الحاويات
- `docker images` - عرض صور docker
- `docker logs <container-id|container-name>` - الحصول على السجلات من الحاوية
- `docker network ls` - عرض جميع شبكات docker
- `docker volumes ls` - عرض جميع وحدات التخزين docker
- `docker exec -it <container-id|container-name> bash` - تنفيذ bash في الحاوية مع شيل تفاعلي

</details>

###### أسئلة الأمن السيبراني (1)

<details>
<summary><b>ما هو التكوين الأمني الخاطئ؟</b></summary><br>

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

</details>

### :diamond_shape_with_a_dot_inside: <a name="regular-sysadmin">مدير النظام العادي</a>

###### أسئلة النظام (60)

<details>
<summary><b>أخبرني عن تجربتك مع بيئات الإنتاج؟ ***</b></summary><br>

سيتم إكماله.

</details>

<details>
<summary><b>أي توزيعة ستختار لتشغيل خادم ويب رئيسي؟ ***</b></summary><br>

سيتم إكماله.

</details>

<details>
<summary><b>اشرح في نقاط قليلة عملية إقلاع نظام Linux.</b></summary><br>

**BIOS**: الشكل الكامل لـ BIOS هو Basic Input or Output System الذي يقوم بإجراء فحوصات السلامة وسيبحث ويحمل ثم ينفذ محمل الإقلاع.

**محمل الإقلاع**: نظرًا لأن المراحل السابقة ليست خاصة بنظام التشغيل، فإن عملية الإقلاع المستندة إلى BIOS لمعماريات x86 و x86-64 تعتبر تبدأ عندما يتم تنفيذ كود سجل الإقلاع الرئيسي (MBR) في الوضع الحقيقي ويتم تحميل محمل الإقلاع من المرحلة الأولى. في أنظمة UEFI، يمكن تنفيذ حمولة مثل نواة Linux مباشرة. وبالتالي، لا يلزم وجود محمل إقلاع. بعض محملات الإقلاع الشائعة: **GRUB**، **Syslinux/Isolinux** أو **Lilo**.

**النواة**: تتعامل النواة في Linux مع جميع عمليات نظام التشغيل، مثل إدارة الذاكرة، وجدولة المهام، والإدخال/الإخراج، والاتصال بين العمليات، والتحكم العام في النظام. يتم تحميلها على مرحلتين - في المرحلة الأولى، يتم تحميل النواة (كصورة مضغوطة) في الذاكرة وفك ضغطها، ويتم إعداد بعض الوظائف الأساسية مثل إدارة الذاكرة الأساسية.

**Init**: هو العملية الأب لجميع العمليات على النظام، يتم تنفيذها بواسطة النواة وهي مسؤولة عن بدء جميع العمليات الأخرى.

- `SysV init` - وظيفة init هي "تشغيل كل شيء بالطريقة التي ينبغي أن يكون عليها بمجرد أن تعمل النواة بالكامل. بشكل أساسي، يؤسس ويشغل مساحة المستخدم بأكملها. يتضمن ذلك فحص وتركيب أنظمة الملفات، بدء الخدمات الضرورية للمستخدم، وفي النهاية التبديل إلى بيئة المستخدم عند اكتمال بدء تشغيل النظام.
- `systemd` - هدف مطورو systemd هو استبدال نظام init لنظام Linux الموروث من Unix System V. مثل init، systemd هو برنامج خفي يدير البرامج الخفية الأخرى. جميع البرامج الخفية، بما في ذلك systemd، هي عمليات خلفية. systemd هو أول برنامج خفي يبدأ (أثناء الإقلاع) وآخر برنامج خفي ينتهي (أثناء الإغلاق).
- `runinit` - runinit هو مخطط init لأنظمة تشغيل شبيهة Unix يقوم بتهيئة والإشراف وإنهاء العمليات عبر نظام التشغيل. إنه إعادة تنفيذ لمجموعة أدوات الإشراف على العمليات daemontools التي تعمل على أنظمة تشغيل Linux، Mac OS X، \*BSD، و Solaris.

موارد مفيدة:

- [تحليل عملية إقلاع Linux](https://opensource.com/article/18/1/analyzing-linux-boot-process)
- [نظرة عن قرب على عملية إقلاع Systemd في Linux](https://linoxide.com/linux-how-to/systemd-boot-process/)

</details>

<details>
<summary><b>كيف ولماذا تقوم برامج Linux الخفية بتخفيض الامتيازات؟ لماذا تحتاج بعض البرامج الخفية إلى أذونات الجذر للبدء؟ اشرح. ***</b></summary>

سيتم إكماله.

</details>

<details>
<summary><b>لماذا لا يعتبر حمل 1.00 مثاليًا على جهاز أحادي النواة؟</b></summary><br>المشكلة مع حمل 1.00 هي أنه لا توجد مساحة للرأس. في الممارسة العملية، يرسم العديد من مسؤولي النظام خطًا عند 0.70.

قاعدة الإبهام "بحاجة إلى النظر فيها": 0.70 إذا كان متوسط الحمل الخاص بك يبقى فوق > 0.70، فقد حان الوقت للتحقيق قبل أن تزداد الأمور سوءًا.

قاعدة الإبهام "أصلح هذا الآن": 1.00. إذا بقي متوسط الحمل الخاص بك فوق 1.00، ابحث عن المشكلة وأصلحها الآن. وإلا، فسوف تستيقظ في منتصف الليل، ولن يكون ذلك ممتعًا.

قاعدة الإبهام: 5.0. إذا كان متوسط حملك فوق 5.00، فقد تكون في مشكلة خطيرة، فجهازك إما معلق أو يتباطأ بشكل كبير، وسيحدث هذا (بشكل غير مفهوم) في أسوأ وقت ممكن مثل منتصف الليل أو عندما تقدم عرضًا في مؤتمر. لا تدعه يصل إلى هناك.

مصادر مفيدة:

- [الطريقة الصحيحة لتفسير حمل النظام على معالج 4 أنوية و 8 خيوط](https://serverfault.com/questions/618130/proper-way-of-interpreting-system-load-on-a-4-core-8-thread-processor)
- [فهم حمل وحدة المعالجة المركزية في لينكس - متى يجب أن تقلق؟](http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages)

</details>

<details>
<summary><b>ماذا يعني عندما يكون المستخدم الفعلي هو root، ولكن معرف المستخدم الحقيقي لا يزال اسمك؟</b></summary><br>

**معرف المستخدم الحقيقي** هو من تكون حقًا (المستخدم الذي يمتلك العملية)، و**معرف المستخدم الفعال** هو ما ينظر إليه نظام التشغيل لاتخاذ قرار ما إذا كان مسموحًا لك بفعل شيء أم لا (في معظم الأوقات، هناك بعض الاستثناءات).

عند تسجيل الدخول، تقوم شل تسجيل الدخول بتعيين كل من **معرف المستخدم الحقيقي والفعال** إلى نفس القيمة (**معرف المستخدم الحقيقي** الخاص بك) كما هو مقدم من ملف كلمات المرور.

على سبيل المثال، إذا قمت بتنفيذ setuid، وبالإضافة إلى التشغيل كمستخدم آخر (مثل **root**) من المفترض أن يقوم برنامج setuid أيضًا بفعل شيء نيابة عنك.

بعد تنفيذ setuid، سيكون له **معرفك الحقيقي** (لأنك مالك العملية) ومعرف المستخدم الفعال لمالك الملف (على سبيل المثال **root**) لأنه setuid.

لنستخدم حالة `passwd`:```bash
-rwsr-xr-x 1 root root 45396 may 25  2012 /usr/bin/passwd
```
عندما يريد المستخدم user2 تغيير كلمة مروره، يقوم بتنفيذ `/usr/bin/passwd`.

سيكون **RUID** هو user2 لكن **EUID** لتلك العملية سيكون root.

يمكن للمستخدم user2 استخدام passwd فقط لتغيير كلمة مروره الخاصة، لأن passwd تقوم داخليًا بالتحقق من **RUID**، وإذا لم يكن root، فستكون إجراءاتها مقصورة على كلمة مرور المستخدم الحقيقي.

من الضروري أن يصبح **EUID** هو root في حالة passwd لأن العملية تحتاج إلى الكتابة إلى `/etc/passwd` و/أو `/etc/shadow`.

موارد مفيدة:

- [الفرق بين معرف المستخدم الحقيقي ومعرف المستخدم الفعال ومعرف المستخدم المحفوظ؟ (الأصلي)](https://stackoverflow.com/questions/30493424/what-is-the-difference-between-a-process-pid-ppid-uid-euid-gid-and-egid)
- [ما الفرق بين pid و ppid و uid و euid و gid و egid؟](https://stackoverflow.com/questions/30493424/what-is-the-difference-between-a-process-pid-ppid-uid-euid-gid-and-egid)

</details>

<details>
<summary><b>أضاف المطور وظيفة cron تؤدي إلى إنشاء ملفات سجل ضخمة. كيف تمنعها من أن تصبح كبيرة جدًا؟</b></summary><br>

استخدام `logrotate` هو الطريقة المعتادة للتعامل مع ملفات السجل. لكن بدلاً من إضافة محتوى إلى `/etc/logrotate.conf`، يجب عليك إضافة مهمتك الخاصة إلى `/etc/logrotate.d/`، وإلا سيكون عليك النظر في المزيد من الفروقات في ملفات التهيئة أثناء ترقيات الإصدار.

إذا كان الملف قيد الكتابة بنشاط، فليس لديك الكثير مما يمكنك فعله عن طريق الاقتطاع. خياراتك الوحيدة هي اقتطاع الملف:```bash
: >/var/log/massive-logfile
```
إنه مفيد جداً، لأنه يقتطع الملف دون تعطيل العمليات.

موارد مفيدة:

- [كيفية استخدام logrotate لإدارة ملفات السجلات](https://www.linode.com/docs/uptime/logs/use-logrotate-to-manage-log-files/)
- [تسجيل النظام](https://www.ibm.com/developerworks/library/l-lpic1-108-2/index.html)

</details>

<details>
<summary><b>كيف يقوم نواة لينكس بإنشاء وإدارة وحذف العمليات في النظام؟ ***</b></summary><br>

سيتم إكماله لاحقًا.

موارد مفيدة:

- [عمليات لينكس](https://www.tldp.org/LDP/tlk/kernel/processes.html)

</details>

<details>
<summary><b>اشرح المعلومات المحددة التي يمكنك رؤيتها في <code>top</code> و<code>htop</code>. كيف يتم تشخيص مشاكل التحميل، وقت المستخدم المرتفع، ونفاد الذاكرة باستخدام هذه الأدوات؟ ***</b></summary><br>

سيتم إكماله لاحقًا.

موارد مفيدة:

- [شرح top بصريًا](https://www.svennd.be/top-explained-visually/)
- [شرح htop بصريًا](https://codeahoy.com/2017/01/20/hhtop-explained-visually/)
- [شرح كل ما يمكن رؤيته في htop/top على لينكس](https://peteris.rocks/blog/htop/)

</details>

<details>
<summary><b>كيف يمكنك التعرف على عملية تحتكر الموارد؟ </b></summary><br>

يعمل `top` بشكل جيد، طالما أنك تنظر إلى الأرقام الصحيحة.
- **M** الفرز حسب استخدام الذاكرة المقيمة الحالية
- **T** الفرز حسب إجمالي استخدام وحدة المعالجة المركزية (أو التراكمي)
- **P** الفرز حسب استخدام وحدة المعالجة المركزية الحالي (هذا هو التحديث الافتراضي)
- **?** يعرض ملخص استخدام لجميع أوامر top

هذه معلومات مهمة جدًا للحصول عليها عند حل مشكلة سبب بطء تشغيل عملية ما واتخاذ قرارات حول العمليات التي يجب قتلها / البرامج التي يجب إلغاء تثبيتها.

موارد مفيدة:

- [كيفية العثور على العمليات التي تحتكر الجهاز](https://superuser.com/questions/326300/how-to-find-the-processes-which-are-hogging-the-machine)

</details>

<details>
<summary><b>تحتاج إلى ترقية خدمة <code>ntpd</code> على 200 خادم. ما هي أفضل طريقة لترقية جميع هذه الخوادم إلى أحدث إصدار؟</b></summary><br>

باستخدام نهج **البنية التحتية كرمز**، هناك عدة طرق جيدة:

1. **نموذج إدارة التغيير بمزامنة التكوين**:

هناك أدوات إدارة التكوين (Ansible, Chef, Puppet, Saltstack, ...) يمكن استخدامها لتحديث خدمة `ntpd` تلقائيًا على جميع الخوادم. للحفاظ على استقرار الأنظمة، عادةً ما يتم تحديث حزم النظام على الخوادم تلقائيًا باستخدام التحديثات الأمنية فقط. عادةً ما يتم تأمين الإصدارات الرئيسية أو الثانوية من الحزم في تعريفات التكوين لمنع سوء تكوين الخدمة. ثم يتم نشر التغيير عن طريق تغيير إصدار `ntpd` في تعريف التكوين.

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

2. **نموذج الخوادم غير القابلة للتغيير**:

في نموذج الخادم غير القابل للتغيير، يتم استبدال الوحدة بأكملها (خادم، حاوية) بصورة محدثة جديدة بدلاً من إجراء تغييرات على الخادم الجاري (هذا يزيل انحراف التكوين). مع هذا النهج، عادةً ما تقوم ببناء صورة الخادم باستخدام أدوات مثل Packer أو Docker مع Dockerfile. يتم بعد ذلك اختبار هذه الصورة ونشرها بشكل مشابه للخيار أعلاه (1.)، ولكن الآن باستخدام تقنيات مثل الإصدار التجريبي الانتقائي (Canary Release)، والذي لديه أيضًا القدرة على الطرح التدريجي والتراجع.

موارد مفيدة:

- [البنية التحتية كرمز - الفصل 8: أنماط تحديث وتغيير الخوادم](http://shop.oreilly.com/product/0636920039297.do)

</details>

<details>
<summary><b>كيفية تعيين <code>$PATH</code> بشكل دائم على لينكس/يونكس؟ لماذا هذا المتغير مهم جدًا؟ ***</b></summary>

سيتم إكماله لاحقًا.

</details>

<details>
<summary><b>عند تشغيل الخادم الخاص بك، تظهر بعض الأخطاء على وحدة التحكم. كيف يتم فحص رسائل الإقلاع وأين يتم تخزينها؟</b></summary><br>

تحتوي وحدة التحكم الخاصة بك على نوعين من الرسائل:

- **المنشأة بواسطة النواة** (عبر printk)
- **المنشأة بواسطة مساحة المستخدم** (عادةً نظام الإقلاع الخاص بك)

يتم دائمًا تخزين رسائل النواة في مخزن **kmsg**، المرئية عبر أمر `dmesg`. غالبًا ما يتم نسخها أيضًا إلى **syslog** الخاص بك. ينطبق هذا أيضًا على رسائل مساحة المستخدم المكتوبة إلى `/dev/kmsg`، ولكنها نادرة نسبيًا.

في الوقت نفسه، عندما تكتب مساحة المستخدم نص حالة الإقلاع الفاخر إلى `/dev/console` أو `/dev/tty1`، لا يتم تخزينه في أي مكان على الإطلاق. يذهب فقط إلى الشاشة وهذا كل شيء.

يستخدم `dmesg` لمراجعة رسائل الإقلاع الموجودة في المخزن الحلقي للنواة. المخزن الحلقي هو مخزن بحجم ثابت حيث أي بيانات جديدة تضاف إليه تحل محل أقدم البيانات فيه.

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

إذا تم تسجيل النظام عبر مكون اليوميات (journal) يجب عليك استخدام `journalctl`. يظهر رسائل تشمل رسائل النواة والإقلاع؛ رسائل من syslog أو خدمات مختلفة.

تتطلب مشاكل / أخطاء الإقلاع من مسؤول النظام النظر في ملفات معينة مهمة إلى جانب أوامر معينة (تتم معالجتها بشكل مختلف بإصدارات مختلفة من لينكس):

- `/var/log/boot.log` - سجل إقلاع النظام، يحتوي على كل ما حدث أثناء إقلاع النظام
- `/var/log/messages` - يخزن رسائل النظام العامة، بما في ذلك الرسائل التي تم تسجيلها أثناء إقلاع النظام
- `/var/log/dmesg` - يحتوي على معلومات المخزن الحلقي للنواة

موارد مفيدة:

- [كيفية عرض جميع رسائل الإقلاع في لينكس بعد الإقلاع؟ (الأصلي)](https://superuser.com/questions/1188407/how-to-view-all-boot-messages-in-linux-after-booting)
- [الاختلافات في ملفات السجلات /var/log/{syslog,dmesg,messages}](https://superuser.com/questions/565927/differences-in-var-log-syslog-dmesg-messages-log-files)
- [كيف يمكن مراجعة الرسائل التي تظهر عند إقلاع نظام دبيان لاحقًا؟](https://serverfault.com/questions/516411/all-debian-boot-messages)

</details>

<details>
<summary><b>استخدام المساحة التبادلية (Swap) مرتفع جدًا. ما هي أسباب ذلك وكيفية حل مشاكل التبديل؟</b></summary><br>

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

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

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

- **زيادة حجم مساحة التبديل** - أولاً، سيكون لديك استخدام متزايد للقرص. إذا لم تكن أقراصك سريعة بما يكفي لمواكبة ذلك، فقد ينتهي الأمر بالنظام إلى الاضطراب (thrashing)، وستشهد تباطؤًا مع تبديل البيانات من وإلى الذاكرة. سيؤدي هذا إلى اختناق.

- **إضافة المزيد من RAM** - الحل الحقيقي هو إضافة المزيد من الذاكرة. لا يوجد بديل لـ RAM، وإذا كانت لديك ذاكرة كافية، فستقلل التبديل.

لمراقبة استخدام مساحة التبديل:

- `cat /proc/swaps` - لرؤية الحجم الإجمالي والمستخدم للتبديل
- `grep SwapTotal /proc/meminfo` - لعرض إجمالي مساحة التبديل
- `free` - لعرض مقدار الذاكرة الحرة والمستخدمة للنظام (بما في ذلك التبديل)
- `vmstat` - للتحقق من إحصائيات التبديل
- `top`، `htop` - للتحقق من استخدام مساحة التبديل
- `atop` - لإظهار ما إذا كان نظامك يفرط في تخصيص الذاكرة
- أو استخدم أمر شل سطر واحد لسرد جميع التطبيقات مع مقدار مساحة التبديل التي تستخدمها بالكيلوبايت:```bash
for _fd in /proc/*/status ; do
  awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $_fd
done | sort -k 2 -n -r | less
```
مصادر مفيدة:

- [Linux ate my ram!](https://www.linuxatemyram.com/)
- [How to find out which processes are using swap space in Linux?](https://stackoverflow.com/questions/479953/how-to-find-out-which-processes-are-using-swap-space-in-linux)
- [8 Useful Commands to Monitor Swap Space Usage in Linux](https://www.tecmint.com/commands-to-monitor-swap-space-usage-in-linux/)
- [What is the danger in having a fully used SWAP in an Ubuntu server?](https://serverfault.com/questions/499301/what-is-the-danger-in-having-a-fully-used-swap-in-an-ubuntu-server)
- [How to empty swap if there is free RAM?](https://askubuntu.com/questions/1357/how-to-empty-swap-if-there-is-free-ram)

</details>

<details>
<summary><b>ما هو umask؟ كيف نضبطه بشكل دائم لمستخدم؟</b></summary><br>

على نظام Linux وأنظمة التشغيل المشابهة لـ Unix، يتم إنشاء الملفات الجديدة بمجموعة افتراضية من الصلاحيات. تحديدًا، يمكن تقييد صلاحيات الملف الجديد بطريقة معينة عن طريق تطبيق "قناع" صلاحيات يُسمى `umask`. يُستخدم الأمر `umask` لتعيين هذا القناع، أو لعرض قيمته الحالية.

لتغيير القيمة بشكل دائم (عيّن مثلاً `umask 02`):

- `~/.profile`
- `~/.bashrc`
- `~/.zshrc`
- `~/.cshrc`

مصادر مفيدة:

- [What is Umask and How To Setup Default umask Under Linux?](https://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html)

</details>

<details>
<summary><b>اشرح الفروق بين قيم umask التالية: 000، 002، 022، 027، 077، و277.</b></summary><br>

<table style="width:100%">
  <tr>
    <th>Umask</th>
    <th>نتيجة الملف</th>
    <th>نتيجة المجلد</th>
  </tr>
  <tr>
    <td>000</td>
    <td>666 rw- rw- rw-</td>
    <td>777 rwx rwx rwx</td>
  </tr>
 <tr>
    <td>002</td>
    <td>664 rw- rw- r--</td>
    <td>775 rwx rwx r-x</td>
  </tr>
  <tr>
    <td>022</td>
    <td>644 rw- r-- r--</td>
    <td>755 rwx r-x r-x</td>
  </tr>
<tr>
    <td>027</td>
    <td>640 rw- r-- ---</td>
    <td>750 rwx r-x ---</td>
  </tr>
<tr>
    <td>077</td>
    <td>600 rw---- ---</td>
    <td>700 rwx --- ---</td>
  </tr>
<tr>
    <td>277</td>
    <td>400 r-- --- ---</td>
    <td>500 r-x --- ---</td>
  </tr>
</table>

مصادر مفيدة:

- [What is Umask and How To Setup Default umask Under Linux?](https://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html)

</details>

<details>
<summary><b>ما الفرق بين الرابط الرمزي (symbolic link) والرابط الصلب (hard link)؟</b></summary><br>

تحت نظام الملفات، يتم تمثيل الملفات بواسطة inodes (أو هل هي عدة inodes لست متأكدًا)

- الملف في نظام الملفات هو ببساطة رابط إلى inode
- الرابط الصلب (hard link) يقوم بإنشاء ملف آخر برابط إلى نفس inode الأساسي

عندما تحذف ملفًا فإنه يزيل رابطًا واحدًا إلى inode الأساسي. يتم حذف (أو يصبح قابلاً للحذف/الكتابة فوق) inode فقط عندما يتم حذف جميع الروابط إلى ذلك inode.

- الرابط الرمزي (symbolic link) هو رابط إلى اسم آخر في نظام الملفات

بمجرد إنشاء رابط صلب، يكون الرابط إلى inode. حذف أو إعادة تسمية أو نقل الملف الأصلي لن يؤثر على الرابط الصلب لأنه يرتبط بـ inode الأساسي. أي تغييرات على البيانات في inode تنعكس في جميع الملفات التي تشير إلى ذلك inode.

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

الفروق:

- **الرابط الصلب** لا يمكن إنشاؤه للمجلدات. يمكن إنشاء الرابط الصلب فقط لملف
- **الرابط اللين** ويسمى أيضًا الروابط الرمزية أو symlinks يمكنه الربط إلى مجلد

مصادر مفيدة:

- [What is the difference between a hard link and a symbolic link?](https://medium.com/@wendymayorgasegura/what-is-the-difference-between-a-hard-link-and-a-symbolic-link-8c0493041b62)

</details>

<details>
<summary><b>كيف يعمل البت اللاصق (sticky bit)؟ هل <code>SUID/GUID</code> هو نفسه؟</b></summary><br>

هذا ربما أحد أكثر الأمور المزعجة التي يخطئ فيها الناس طوال الوقت. بت **SUID/GUID** والبت اللاصق (sticky-bit) هما شيئان مختلفان تمامًا.

إذا قمت بتنفيذ `man chmod` يمكنك القراءة عن **SUID** والبتات اللاصقة.

**SUID/GUID**

ما تحاول صفحة الدليل أعلاه قوله هو أن الموضع الذي يأخذه البت x في rwxrwxrwx للأوكتال الخاص بالمستخدم (المجموعة الأولى من rwx) والأوكتال الخاص بالمجموعة (المجموعة الثانية من rwx) يمكن أن يأخذ حالة إضافية حيث يصبح x حرف s. عند حدوث ذلك، فإن هذا الملف عند تنفيذه (إذا كان برنامجًا وليس مجرد سكريبت شل) سيعمل بصلاحيات المالك أو مجموعة الملف.

لذا، إذا كان الملف مملوكًا للمستخدم root وتم تشغيل بت **SUID**، فسيتم تشغيل البرنامج كـ root. حتى لو قمت بتنفيذه كمستخدم عادي. نفس الشيء ينطبق على بت **GUID**.

أمثلة:

**بدون suid/guid** - فقط البتات `rwxr-xr-x` مضبوطة.```bash
ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl
```
**تم تمكين بت suid وبت تنفيذ المستخدم (حرف s صغير)** - البتات `rwsr-x-r-x` مضبوطة.```bash
chmod u+s b.pl
ls -lt b.pl
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl
```
**تمكين suid وتعطيل بت التنفيذ (S كبير)** - تم تعيين البتات `rwSr-xr-x`.```bash
chmod u-x b.pl
ls -lt b.pl
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl
```
**guid & تمكين بت التنفيذ للمجموعة (s صغيرة)** - البتات `rwxr-sr-x` مضبوطة.```bash
chmod g+s b.pl
ls -lt b.pl
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl
```
**تمكين guid وتعطيل بت التنفيذ (S كبير)** - البتات `rwxr-Sr-x` مضبوطة.```bash
chmod g-x b.pl
ls -lt b.pl
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl
```
**البت اللاصق**

من ناحية أخرى، يُرمز للبت اللاصق بـ `t`، كما في دليل `/tmp`:```bash
ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp
```
كان يجب أن يُطلق على هذه البتة اسم _بتة الحذف المقيد_ نظرًا لأن هذا هو ما تعنيه حقًا. عند تمكين هذه البتة، فإنها تجعل المستخدمين لا يستطيعون حذف الملفات والدلائل داخل الدليل إلا إذا كانوا هم مالكيها.

موارد مفيدة:

- [How does the sticky bit work? (original)](https://unix.stackexchange.com/questions/79395/how-does-the-sticky-bit-work)

</details>

<details>
<summary><b>ماذا يفعل وضع <code>LC_ALL=C</code> قبل الأمر؟ في أي الحالات يكون مفيدًا؟</b></summary><br>

`LC_ALL` هو متغير بيئي يتجاوز جميع إعدادات الترجمة الأخرى. يقوم بتعيين جميع متغيرات من نوع `LC_` مرة واحدة إلى لغة محلية محددة.

السبب الرئيسي لتعيين `LC_ALL=C` قبل الأمر هو أنه جيد للحصول ببساطة على مخرجات باللغة الإنجليزية (تغيير عام للغة المستخدمة بواسطة الأمر).

من ناحية أخرى، من المهم أيضًا زيادة سرعة تنفيذ الأمر باستخدام `LC_ALL=C` مثل `grep` أو `fgrep`. أدى استخدام لغة `LC_ALL=C` إلى زيادة أدائنا وخفض وقت تنفيذ الأمر.

على سبيل المثال، إذا قمت بتعيين `LC_ALL=en_US.utf8`، فإن نظامك يفتح ملفات متعددة من دليل `/usr/lib/locale`. بالنسبة لـ `LC_ALL=C`، يتم تنفيذ الحد الأدنى من عمليات الفتح والقراءة.

إذا كنت تريد استعادة جميع إعدادات اللغة العادية (الأصلية) للجلسة:```bash
LC_ALL=
```
إذا لم يعمل `LC_ALL`، فجرب استخدام `LANG` (إذا لم يعمل ذلك أيضًا، فجرب `LANGUAGE`):```bash
LANG=C date +%A
Monday
```
موارد مفيدة:

- [ما الذي يفعله LC_ALL=C؟ (الأصلي)](https://unix.stackexchange.com/questions/87745/what-does-lc-all-c-do)
- [تسريع عمليات البحث باستخدام grep مع LC_ALL=C](https://www.inmotionhosting.com/support/website/ssh/speed-up-grep-searches-with-lc-all)

</details>

<details>
<summary><b>كيفية تحقيق توفر عالي لتطبيق ويب؟ ***</b></summary>

سيتم إكماله.

</details>

<details>
<summary><b>أنت تقوم بتكوين خادم جديد. إحدى الخطوات هي تعيين الأذونات لدلائل التطبيق. ما الخطوات التي ستتخذها وما الأخطاء التي يجب تجنبها؟</b></summary><br>

**1) المتطلبات الرئيسية - تذكر هذا**

- المستخدمون الذين لديهم حق الوصول إلى نظام ملفات التطبيق
- أذونات خوادم الويب، مثل Apache وخوادم التطبيقات مثل uwsgi
- أذونات الدلائل المحددة مثل **uploads** و **cache** ودليل التطبيق الرئيسي مثل `/var/www/app01/html`
- قيمة `umask` الصحيحة للمستخدمين و **suid**/**sgid** (فقط للحالات المحددة)
- أذونات جميع الملفات والدلائل المستقبلية
- أذونات مهام cron والنصوص البرمجية

**2) دلائل التطبيق**

`/var/www` يحتوي على دليل لكل موقع ويب (عزل التطبيقات)، على سبيل المثال `/var/www/app01`، `/var/www/app02````bash
mkdir /var/www/{app01,app02}
```
**3) مالك التطبيق والمجموعة**

يحتوي كل تطبيق على **مالك** معين (مثال: **u01-prod**, **u02-prod**) و**مجموعة** (مثال: **g01-prod**, **g02-prod**) يتم تعيينهما كمالك لجميع الملفات والدلائل في دليل الموقع الإلكتروني:```bash
chown -R u01-prod:g01-prod /var/www/app01
chown -R u02-prod:g02-prod /var/www/app02
```
**4) مالك المطورين والمجموعة**

جميع المستخدمين الذين يحافظون على الموقع لديهم مجموعات خاصة بهم وهم ملحقون بمجموعة التطبيق:```bash
id alice
uid=2000(alice) gid=4000(alice) groups=8000(g01-prod)
id bob
uid=2001(bob) gid=4001(bob) groups=8000(g01-prod),8001(g02-prod)
```
لذا، لدى مستخدم **alice** صلاحيات قياسية للمسار `/var/www/app01`، ومستخدم **bob** لديه صلاحيات قياسية للمسارين `/var/www/app01` و`/var/www/app02`.

**5) مالك ومجموعة خادم الويب**

أي ملفات أو أدلة تحتاج إلى الكتابة من قبل خادم الويب لها مالكها. إذا كان خادم الويب هو Apache، فإن المالك/المجموعة الافتراضية هما **apache:apache** أو **www-data:www-data**، وبالنسبة لـ Nginx سيكون **nginx:nginx**. لا تغير هذه الإعدادات.

إذا كانت التطبيقات تعمل مع خوادم تطبيقات مثل **uwsgi** أو **php-fpm**، فيجب تعيين المستخدم والمجموعة المناسبين (على سبيل المثال، بالنسبة لـ **app01** سيكون **u01-prod:g01-prod**) في ملفات الإعدادات المحددة.

**6) الصلاحيات**

قم بتعيين الصلاحيات بشكل صحيح باستخدام **قوائم التحكم في الوصول (ACL)**:```bash
# For web server
setfacl -Rdm "g:apache:rwx" /var/www/app01
setfacl -Rm "g:apache:rwx" /var/www/app01

# For developers
setfacl -Rdm "g:g01-prod:rwx" /var/www/app01
setfacl -Rm "g:g01-prod:rwx" /var/www/app01
```
إذا كنت تستخدم **SELinux** فتذكر سياق الأمان:```bash
chcon -R system_u:object_r:httpd_sys_content_t /var/www/app01
```
**7) أخطاء أمنية**

- **المالك root** للملفات والدلائل
- **الجذر** لا ينفذ أي ملفات في دليل الموقع، ولا ينبغي له إنشاء ملفات هناك
- صلاحيات واسعة مثل **777** مما يجعل بعض الملفات الهامة قابلة للكتابة والقراءة من قبل الجميع
- تجنب إنشاء نصوص صيانة أو ملفات هامة أخرى مع suid root

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

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

إذا تمكن المستخدم الخبيث من رفع ملف بأي اسم ولكن لا يتحكم في المحتوى، فيمكنه بسهولة رفع ملف يستبدل ملف `index.php` (أو ملف هام آخر) ويعطل موقعك.

موارد مفيدة:

- [كيفية إعداد صلاحيات لينكس لمجلد WWW؟](https://serverfault.com/questions/124800/how-to-setup-linux-permissions-for-the-www-folder)
- [ما الصلاحيات التي يجب أن تكون لملفات/مجلدات موقعي على خادم ويب لينكس؟](https://serverfault.com/questions/357108/what-permissions-should-my-website-files-folders-have-on-a-linux-webserver)
- [مخاطر أمنية لبرامج setgid](https://www.agwa.name/blog/post/security_pitfalls_of_setgid_programs)

</details>

<details>
<summary><b>ما الخطوات التي سيتخذها init عند تشغيل <code>telinit 1</code> من مستوى التشغيل 3؟ ما النتيجة النهائية لذلك؟ إذا استخدمت <code>telinit 6</code> بدلاً من <code>reboot</code> هل سيتم إعادة تشغيل الخادم؟ ***</b></summary><br>

ليتم إكماله.

موارد مفيدة:

- [ما الفرق الذي سيحدثه إذا استخدمت الأمر “telinit 6” بدلاً من أمر “reboot” لإعادة تشغيل جهاز الكمبيوتر الخاص بي؟](https://unix.stackexchange.com/questions/434560/what-differences-it-will-make-if-i-use-telinit-6-instead-of-reboot-command)

</details>

<details>
<summary><b>لقد نسيت كلمة مرور الجذر! ماذا أفعل في BSD؟ ما الغرض من الإقلاع إلى وضع المستخدم المفرد؟</b></summary><br>

أعد تشغيل النظام، واكتب `boot -s` عند موجه `Boot:` للدخول إلى **وضع المستخدم المفرد**.

عند السؤال عن الصدفة التي تريد استخدامها، اضغط `Enter` وسيظهر موجه `#`.

أدخل `mount -urw /` لإعادة تحميل نظام الملفات الجذر كقابل للقراءة/الكتابة، ثم شغّل `mount -a` لإعادة تحميل جميع أنظمة الملفات.

شغّل `passwd root` لتغيير كلمة مرور الجذر ثم شغّل `exit` لمواصلة الإقلاع.

**وضع المستخدم المفرد** يجب أن يسمح لك أساسًا بتسجيل الدخول بصلاحيات الجذر وتغيير أي شيء تقريبًا. على سبيل المثال، قد تستخدم وضع المستخدم المفرد عند استعادة قاعدة بيانات رئيسية تالفة أو قاعدة بيانات نظام، أو عند تغيير خيارات تكوين الخادم (مثل استعادة كلمة المرور).

موارد مفيدة:

- [إعادة تعيين أو استرداد كلمة مرور الجذر في FreeBSD](https://www.cyberciti.biz/tips/howto-freebsd-reset-recover-root-password.html)
- [تعريف وضع المستخدم المفرد](http://www.linfo.org/single_user_mode.html)

</details>

<details>
<summary><b>كيف يمكنك تعديل ملف نصي بدون استخدام محرر نصوص؟</b></summary><br>

على سبيل المثال:<br>```bash
# cat  >filename ... - overwrite file
# cat >>filename ... - append to file
cat > filename << __EOF__
data
__EOF__
```
</details>

<details>
<summary><b>كيفية تغيير معاملات النواة؟ ما هي خيارات النواة التي قد تحتاج إلى ضبطها؟ ***</b></summary><br>
تنزيل الأداة
نوع الفصلعدد الأسئلةوصف مختصر
مقدمة
🔸 أسئلة بسيطة14 سؤالًامريحة وممتعة وبسيطة - رائعة لبدء كل شيء.
معرفة عامة
🔸 مسؤول مبتدئ65 سؤالًامعقولة وبسيطة ومباشرة تعتمد على المعرفة الأساسية.
🔸 مسؤول عادي94 سؤالًاالمستوى المتوسط من الأسئلة إذا كانت لديك معرفة سليمة.
🔸 مسؤول كبير99 سؤالًاأسئلة صعبة وألغاز. تحقق منها إذا كنت تريد أن تكون جيدًا.
معرفة سرية
🔸 مسؤول خبير12 سؤالًاأسئلة عميقة حقًا للتعرف على المسؤول الخبير.
  • البحث في تاريخ الأوامر باستخدام CTRL + R
  • popd/pushd وأوامر shell المضمنة الأخرى التي تسمح لك بالتلاعب بمكدس الدليل
  • اختصارات لوحة المفاتيح للتحرير مثل CTRL + U و CTRL + E
  • سيتم توسيع التوليفات تلقائيًا:
    • !* - جميع وسائط الأمر الأخير
    • !! - الأمر الأخير بأكمله
    • !ssh - آخر أمر يبدأ بـ ssh

موارد مفيدة:

  • تعريف واجهة سطر الأوامر
  • ما هي أفضل خدعة سطر أوامر باستخدام Bash؟
  • ما هي ميزات أو حيل سطر الأوامر المفضلة لديك؟

Read more