مقابلة

أسئلة Linux في المقابلات: 24 سؤالاً مع إجاباتها

آخر تحديث: · Skillaria.Top

تدور أكثر أسئلة مقابلات لينكس حول بنية نظام الملفات وinode، والروابط الصلبة والرمزية، والصلاحيات وsudo، والعمليات والإشارات، وإقلاع النظام، وأيضاً الشبكة: كيف تتحقق من المنافذ المفتوحة، وكيف يعمل تحويل DNS، وماذا تفعل إذا تعذر الوصول إلى الخادم.

تُطرح أسئلة Linux في مقابلات مهندسي DevOps ومديري الأنظمة ومهندسي SRE ومطوري الخلفيات. ونادراً ما يتوقع المحاور أن تحفظ خيارات الأوامر عن ظهر قلب، بل يهمه أن تفهم كيف يعمل النظام، وأن تستطيع الوصول إلى سبب المشكلة. فيما يلي أكثر أسئلة Linux شيوعاً، من الأساسيات حتى التشخيص، مع إجابات وأوامر.

نصيحة: عندما تجيب، اذكر الأمر الذي تتحقق به من كلامك. عبارة «سأتحقق عبر ss -tlnp» أقوى من الكلام العام.

نظام الملفات

1. ما هو FHS، وما الذي يوجد في المجلدات الأساسية؟

FHS (Filesystem Hierarchy Standard) هو المعيار الذي يحدد أماكن المجلدات. تبدأ شجرة المجلدات كلها من الجذر /، ولا توجد أقراص منفصلة بحروف، بل تُركَّب أنظمة الملفات الأخرى داخل مجلدات الشجرة.

  • /etc: إعدادات النظام والخدمات؛
  • /var: البيانات المتغيرة: السجلات (/var/log)، والذاكرة المؤقتة، والطوابير، وقواعد البيانات؛
  • /home: المجلدات الشخصية للمستخدمين، و/root المجلد الشخصي لـ root؛
  • /usr: البرامج والمكتبات، وفي التوزيعات الحديثة تكون /bin و/sbin عادةً روابط إلى /usr/bin و/usr/sbin؛
  • /tmp: ملفات مؤقتة، و/boot: النواة والمُحمِّل؛
  • /proc و/sys: أنظمة ملفات افتراضية تحوي معلومات العمليات والنواة، و/dev: ملفات الأجهزة.

2. ما هو inode؟

inode بنية في نظام الملفات تحفظ بيانات الملف الوصفية: النوع، والصلاحيات، والمالك، والحجم، والطوابع الزمنية، وعدد الروابط الصلبة، ومؤشرات إلى كتل البيانات. لا يحتوي inode على اسم الملف، فالاسم يُحفظ في المجلد على شكل «اسم ← رقم inode».

يعرض الأمر ls -i رقم inode، ويعرض stat file التفاصيل. وعدد الـ inodes في نظام الملفات محدود، ويعرض df -i عدد المستخدم منها. ومن هنا الموقف الكلاسيكي: «المساحة متوفرة على القرص، ومع ذلك لا يمكن إنشاء ملف»، والسبب أن ملايين الملفات الصغيرة استنفدت الـ inodes.

3. ما الفرق بين الرابط الصلب والرابط الرمزي؟

الرابط الصلب (ln file link) اسم آخر للـ inode نفسه. والاسمان متساويان، ولا تُحذف البيانات إلا عندما يصل عدد الروابط إلى صفر. ومن قيوده أنه لا يمكن إنشاء رابط صلب لمجلد، ولا يمكن أن يتجاوز حدود نظام ملفات واحد.

الرابط الرمزي (ln -s target link) ملف مستقل له inode خاص، ويحتوي على مسار الهدف. يمكن أن يشير إلى مجلد أو إلى نظام ملفات آخر، لكنه «ينكسر» إذا حُذف الهدف أو نُقل.

4. امتلأ القرص، لكن du يعرض مساحة أقل من df. لماذا؟

السبب الأكثر شيوعاً أن ملفاً حُذف بينما ما زالت عملية تفتحه، مثل حذف سجل كبير لخدمة تعمل. فالاسم لم يعد موجوداً، لذلك لا يراه du، لكن الكتل ما زالت مشغولة، وdf يحسبها.

للعثور على هذه الملفات استخدم lsof +L1 أو lsof | grep deleted. والحل إعادة تشغيل العملية، أو تفريغ الملف عبر واصف الملف: : > /proc/PID/fd/N. ولاحقاً عند تنظيف السجلات استخدم truncate أو تدوير logrotate، لا rm.

5. كيف يتم إقلاع Linux؟

تُهيّئ البرمجيات الثابتة (BIOS أو UEFI) العتاد، ثم تسلّم التحكم إلى المُحمِّل، وغالباً GRUB. يقرأ المُحمِّل الإعدادات، ثم يحمّل النواة وinitramfs إلى الذاكرة. وinitramfs نظام ملفات جذر مؤقت يحتوي على التعريفات اللازمة للوصول إلى الجذر الحقيقي.

تُهيّئ النواة الأجهزة، وتُركّب نظام الملفات الجذري، وتشغّل أول عملية في فضاء المستخدم بالمعرّف PID 1، وهي في معظم التوزيعات systemd. ثم يشغّل systemd الخدمات حتى الهدف الافتراضي، مثل multi-user.target. ويعرض systemd-analyze زمن كل مرحلة.

6. ما وظيفة الأمر mount؟ وأين يُضبط التركيب التلقائي؟

يربط mount نظام ملفات من جهاز بمجلد (نقطة تركيب): mount /dev/sdb1 /mnt/data. وتعرض التركيبات الحالية الأمر findmnt أو mount دون وسائط.

يُضبط التركيب عند الإقلاع في /etc/fstab. ومن الأفضل كتابة الأجهزة بمعرّف UUID (يعرضه blkid) بدلاً من الاسم مثل /dev/sdb1، لأن الاسم قد يتغير. وقبل إعادة التشغيل تحقق من التغييرات بالأمر mount -a، فخطأ في fstab قد يمنع الإقلاع.

المستخدمون والصلاحيات

7. كيف تعمل صلاحيات Linux؟

لكل ملف مالك ومجموعة وثلاث مجموعات من الصلاحيات: للمالك، وللمجموعة، وللآخرين. كل مجموعة تتكون من r (القراءة)، وw (الكتابة)، وx (التنفيذ). وفي الصيغة الرقمية: r=4، وw=2، وx=1، لذلك يمنح chmod 640 file المالك القراءة والكتابة، والمجموعة القراءة، والآخرين لا شيء.

$ ls -l app.conf
-rw-r----- 1 deploy www-data 512 Oct 12 10:03 app.conf

يُغيَّر المالك بالأمر chown user:group file، والصلاحيات بالأمر chmod.

8. ماذا تعني الصلاحيات r وw وx للمجلد؟

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

والنتيجة المهمة أن من يملك حق الكتابة في المجلد يستطيع حذف ملف داخله حتى لو لم يكن الملف ملكه. وبدون x على المجلد لا تنفع r: تظهر الأسماء، لكن الملفات لا تُفتح.

9. ما هي SUID وSGID وsticky bit؟

يجعل بت SUID على الملف التنفيذي البرنامج يعمل بصلاحيات مالكه لا بصلاحيات من شغّله. والمثال الكلاسيكي هو /usr/bin/passwd: فهو ملك root ويستطيع تعديل /etc/shadow. ويفعل SGID الشيء نفسه للمجموعة، وعلى المجلد يجعل الملفات الجديدة ترث مجموعة المجلد، وهذا مفيد للمجلدات المشتركة.

وsticky bit على المجلد يسمح بحذف الملفات لمالكها فقط، حتى لو كان المجلد قابلاً للكتابة للجميع. وهكذا يعمل /tmp: يظهر ls -ld /tmp الصلاحيات drwxrwxrwt. ولمراجعة كل ملفات SUID في النظام استخدم find / -perm -4000 -type f 2>/dev/null.

10. ما هو umask؟

umask قناع يُزيل صلاحيات من الملفات والمجلدات الجديدة. الصلاحيات الأساسية هي 666 للملفات و777 للمجلدات، ويطرح umask منها البتات المحددة. وعند قيمة شائعة مثل 022 تُنشأ الملفات بصلاحيات 644 والمجلدات بصلاحيات 755. وتُعرض القيمة الحالية بالأمر umask.

11. أين تُحفظ بيانات المستخدمين وكلمات المرور؟

تُحفظ بيانات الحسابات في /etc/passwd: الاسم، والمعرّف UID، ومعرّف المجموعة الأساسية GID، والمجلد الشخصي، والواجهة. أما تجزئات كلمات المرور فتُنقل إلى /etc/shadow الذي لا يقرؤه إلا root، فلا يستطيع المستخدم العادي الحصول على التجزئات لتخمينها. وتُحفظ المجموعات في /etc/group.

لعرض معلومات المستخدم استخدم id user وgetent passwd user، والثاني يأخذ في الحسبان مصادر خارجية مثل LDAP.

12. كيف يعمل sudo؟ ولماذا هو أفضل من تسجيل الدخول بحساب root؟

ينفّذ sudo أمراً باسم مستخدم آخر (root افتراضياً) وفق القواعد الموجودة في /etc/sudoers وفي الملفات داخل /etc/sudoers.d/. يُدخل المستخدم كلمة مروره هو لا كلمة مرور root، وتُسجَّل كل عملية مع اسم من نفّذها.

يمكن أن تسمح القاعدة بكل شيء (alena ALL=(ALL:ALL) ALL) أو بأوامر محددة. ويجب تحرير sudoers عبر visudo، فهو يفحص الصياغة قبل الحفظ، ولا يؤدي الخطأ إلى فقدان sudo. وفي Ubuntu تُمنح صلاحيات المدير بالانتماء إلى مجموعة sudo، وفي أنظمة RHEL بالانتماء إلى مجموعة wheel.

13. كيف تضيف مستخدماً إلى مجموعة؟ ولماذا لم يُطبَّق التغيير؟

يضيف الأمر usermod -aG docker alena المستخدم إلى مجموعة إضافية. الخيار -a ضروري، فمن دونه يستبدل -G قائمة المجموعات كلها.

لا يسري التغيير إلا بعد تسجيل الدخول من جديد، لأن الجلسة الحالية تحتفظ بقائمة المجموعات القديمة. ويمكنك إعادة تسجيل الدخول، أو فتح واجهة جديدة بالمجموعة الجديدة عبر newgrp docker. والتحقق يكون بالأمر id.

العمليات

14. ما هي العملية و PID؟ وكيف تعرض العمليات؟

العملية برنامج قيد التشغيل، له فضاء عناوين خاص وملفات مفتوحة ومعرّف PID. ولكل عملية أب (PPID)، والسلف المشترك لكل العمليات هو العملية التي معرّفها 1. تُعرض قائمة العمليات بـ ps aux وps -ef، وشجرة العمليات بـ pstree أو ps -ef --forest، والمتابعة اللحظية بـ top وhtop.

15. ما الفرق بين SIGTERM وSIGKILL؟

يرسل kill PID افتراضياً الإشارة SIGTERM (15)، وهو طلب مهذب بالإنهاء. يمكن للعملية أن تلتقطه، فتغلق الاتصالات وتحفظ البيانات ثم تخرج. أما SIGKILL (9، أي kill -9) فلا يمكن التقاطه: تنهي النواة العملية فوراً دون أي تنظيف.

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

16. ما هي العملية الزومبية؟

العملية الزومبية هي عملية انتهت، لكن أبها لم يقرأ رمز إنهائها بالاستدعاء wait(). وهي لا تستهلك تقريباً أي موارد، لكنها تبقى مدخلاً في جدول العمليات. وتظهر حالتها في ps بالحرف Z.

لا يمكن قتل الزومبية مباشرة، لأنها ميتة أصلاً. يجب أن يحصدها أبوها: إما بإصلاح البرنامج الأب، أو بإنهاء الأب، فتتبناها العملية PID 1 وتحصدها.

17. ماذا يعني load average؟

الأعداد الثلاثة في uptime وtop هي متوسط عدد العمليات القابلة للتنفيذ في قائمة الانتظار خلال آخر 1 و5 و15 دقيقة. وفي Linux تُحسب هنا أيضاً العمليات في حالة الانتظار غير القابل للمقاطعة (الحالة D)، وغالباً ما تكون في انتظار القرص.

تُقارن القيمة بعدد أنوية المعالج (nproc): الحمل 4 على 4 أنوية يعني تحميلاً كاملاً، وعلى 16 نواة يعني ربعاً فقط. والحمل المرتفع مع استخدام منخفض للمعالج يشير غالباً إلى مشكلة في الإدخال والإخراج، ويُتحقق منها بـ iostat أو بالحقل wa في top.

الشبكة

18. كيف تعرض عناوين IP والمسارات والمنافذ المفتوحة؟

عناوين الواجهات تُعرض بـ ip a، وجدول التوجيه بـ ip r. والأدوات القديمة ifconfig وnetstat من حزمة net-tools غير مثبتة افتراضياً في كثير من التوزيعات.

المنافذ المستمعة والعمليات التي تفتحها تعرضها ss -tlnp: t لـ TCP، وl للمستمعين فقط، وn بدون تحويل الأسماء، وp لإظهار العملية. ولـ UDP استخدم ss -ulnp.

$ sudo ss -tlnp
State  Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0      511          0.0.0.0:80        0.0.0.0:*     users:(("nginx",pid=812,fd=6))
LISTEN 0      128          0.0.0.0:22        0.0.0.0:*     users:(("sshd",pid=640,fd=3))

19. الخدمة تستمع على 127.0.0.1:8080، فهل يمكن الاتصال بها من الخارج؟

لا. العنوان 127.0.0.1 هو واجهة الاسترجاع (loopback)، ولا يُوصل إليه إلا من الجهاز نفسه. ولقبول الاتصالات الخارجية يجب أن تستمع الخدمة على عنوان الواجهة الخارجية، أو على 0.0.0.0 (جميع عناوين IPv4). وهذا سبب شائع لعبارة «المنفذ مفتوح، لكنه لا يعمل من الخارج»، إلى جانب جدار الحماية.

20. كيف يحوّل Linux اسم المضيف إلى عنوان IP؟

يحدد ترتيب المصادر السطر hosts: في /etc/nsswitch.conf، وعادةً يُقرأ /etc/hosts أولاً، ثم يُسأل DNS. وعناوين خوادم DNS تُؤخذ من /etc/resolv.conf. وفي الأنظمة التي تستخدم systemd-resolved يظهر هناك العنوان المحلي 127.0.0.53، أما الخوادم الفعلية فيعرضها resolvectl status.

للتحقق استخدم dig example.com أو dig @1.1.1.1 example.com للاستعلام من خادم محدد. ومن التفاصيل المهمة أن dig وnslookup يستعلمان من DNS مباشرة ولا يقرآن /etc/hosts، أما getent hosts example.com فيسلك الطريق نفسه الذي تسلكه التطبيقات.

21. ما الفرق بين TCP وUDP؟

يُنشئ TCP اتصالاً (المصافحة الثلاثية: SYN وSYN-ACK وACK)، ويضمن وصول البيانات وترتيبها، ويعيد إرسال الحزم المفقودة. ويعمل عليه HTTP وSSH ومعظم قواعد البيانات. أما UDP فيرسل رسائل مستقلة دون اتصال ودون ضمانات، لكن زمن استجابته أقل، ويُستخدم في استعلامات DNS والمكالمات المرئية والألعاب.

22. الموقع لا يفتح. كيف تبحث عن السبب؟

تسير من الأسماء نحو التطبيق طبقةً طبقة:

  1. هل يتم حل الاسم: dig site.example، وهل العنوان هو المتوقع؟
  2. هل المضيف متاح: ping (وقد يكون محظوراً)، وtraceroute أو mtr.
  3. هل المنفذ مفتوح: nc -zv host 443 أو curl -v https://site.example.
  4. على الخادم: هل الخدمة تعمل (systemctl status nginx)، وهل تستمع على المنفذ (ss -tlnp)، وهل يحجب جدار الحماية (sudo nft list ruleset، sudo ufw status).
  5. سجلات التطبيق وjournalctl -u للخدمة.

ما يهم المحاور هو الترتيب المنهجي، لا مجموعة أدوات محددة.

23. ما هي حالة TIME_WAIT؟

بعد إغلاق اتصال TCP، يُبقي الطرف الذي أغلقه أولاً المقبس في حالة TIME_WAIT لفترة، حتى لا تدخل حزم متأخرة من الاتصال القديم إلى اتصال جديد يستخدم العناوين والمنافذ نفسها. وكثرة TIME_WAIT طبيعية في الخوادم المحملة أو في العملاء الذين يفتحون اتصالات قصيرة كثيرة. ولعدّها استخدم ss -tan state time-wait | wc -l.

24. ما الفرق بين /etc/hosts وDNS؟ ومتى تحتاج إلى /etc/hosts؟

/etc/hosts جدول ثابت «عنوان ← اسم» على جهاز بعينه. وعند إعداد nsswitch الافتراضي يُقرأ قبل DNS، وهو مفيد للاختبار، مثلاً لتوجيه نطاق إلى خادم جديد قبل تغيير سجلات DNS. أما DNS فنظام موزّع تكون ردوده واحدة لجميع العملاء. والخطأ في /etc/hosts سبب شائع لحالة «الموقع يفتح عندي ولا يفتح عند الآخرين».

الخلاصة

تختبر أسئلة Linux في المقابلات ثلاثة أمور: هل تفهم نموذج النظام (inode والصلاحيات والعمليات والإقلاع)، وهل تعرف أدوات التشخيص (ss وdig وjournalctl وlsof)، وهل تستطيع البحث عن السبب خطوة بخطوة. وأجب مع الأوامر والأمثلة من الممارسة. ويُشرح نظام الملفات والصلاحيات والشبكة بالتفصيل والتطبيق في دورة لينكس.

الأسئلة الشائعة

ما الذي يُسأل عن Linux في مقابلة DevOps للمبتدئين؟

عادةً الأساسيات: التنقل والصلاحيات، والعمليات وsystemctl، وقراءة السجلات، وأوامر الشبكة مثل ip وss وdig وcurl، ومبادئ سكريبتات Bash. وكثيراً ما تُعطى مهمة عملية مثل «اعثر على ما يملأ القرص».

هل يجب أن أحفظ خيارات الأوامر كلها؟

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

أي توزيعة أتعلمها للمقابلة؟

أي توزيعة خادم شائعة تناسبك: Ubuntu أو Debian أو Rocky Linux المتوافق مع RHEL. الأساسيات مشتركة، والفرق الرئيسي في مدير الحزم وأسماء بعض الخدمات.

كيف أستعد للجزء العملي من المقابلة؟

شغّل جهازاً افتراضياً وحل مهام حقيقية: اضبط خادم ويب كخدمة systemd، وفعّل الدخول بمفتاح SSH، واضبط جدار الحماية، وابحث عن العملية بحسب المنفذ. والتحدث بصوت عالٍ عن خطواتك جزء من الاستعداد.

تعلّم هذا الموضوع بالفيديو

يُشرح هذا الموضوع بالتفصيل مع التطبيق العملي في دورة «Linux: с нуля до уверенного администрирования».

الانتقال إلى الدورة