نظرة عامة
يمكن حل مشكلات مثل “تعارض المنافذ” أو “عدم انخفاض مساحة القرص حتى بعد حذف الملفات” التي تحدث أثناء إدارة أنظمة لينكس على الفور باستخدام الأمر lsof. في هذا المقال، سنتعرف على التقنيات الأساسية لتطبيق lsof عملياً في بيئة لينكس التي تعامل كل شيء كملف. سنستعرض خطوة بخطوة خبرات استكشاف الأخطاء وإصلاحها الأساسية لمهندسي الأنظمة، بدءاً من تتبع المنافذ وحتى تحرير أقفال الملفات.
الفحص الأساسي لأمر lsof والتحقق من الملفات المفتوحة لمستخدم أو عملية معينة
للتحقق مما إذا كان الأمر lsof مثبتاً على النظام، وتثبيت الحزمة في حال لم تكن مثبتة، قم بتشغيل الأمر command -v lsof >/dev/null 2>&1 || (apt-get update -qq && apt-get install -y lsof).

للتحقق من الإصدار المثبت ومعلومات البناء للأمر lsof، قم بتشغيل الأمر lsof -v.
⚙️ [الخيارات الرئيسية]
-u : يعرض قائمة بالملفات والعمليات المفتوحة بواسطة حساب مستخدم محدد.-c : يصفي قائمة الملفات المفتوحة بواسطة العمليات التي تبدأ باسم العملية المحدد.-p : يتحقق من قائمة الملفات المفتوحة بواسطة معرف عملية محدد (PID).-i : يستعلم عن مآخذ الشبكة والعمليات التي تستخدم منافذ معينة.+D : يبحث بشكل متكرر (تكراري) عن قائمة الملفات المفتوحة في الدليل المحدد ومساراته الفرعية.-t : يخرج فقط معرفات العمليات (PID) بإيجاز سطراً بسطر، مما يجعله مفيداً لدمجه في البرامج النصية (السكربتات).

لإعداد دليل اختبار وملف تجريبي للتطبيق العملي على lsof، قم بتشغيل الأمر mkdir -p /tmp/lsof_lab && echo '테스트 파일 내용' > /tmp/lsof_lab/sample.txt.

لتتبع الملف التجريبي الذي تم إنشاؤه في الخلفية بحيث تظل العملية فاتحةً له باستمرار، قم بتشغيل الأمر tail -f /tmp/lsof_lab/sample.txt &.

يعرض الأمر lsof -u $(whoami) | head -n 15 أول 15 سطراً من قائمة الملفات التي تشغلها العمليات التي يقوم بتشغيلها المستخدم المسجل دخوله حالياً.
يمكنك التحقق من تفاصيل الملفات المفتوحة بواسطة الحساب الحالي، مثل مكتبات النظام الأساسية والملفات التنفيذية.

يبحث الأمر lsof -c tail ويعرض قائمة الملفات والمكتبات المفتوحة بواسطة العمليات التي تحمل اسم tail.
يتيح لك ذلك التحقق من واصفات الملفات والمكتبات المشتركة التي يشير إليها الأمر tail قيد التشغيل في الخلفية.

بعد الانتهاء من التدريب، قم بتشغيل الأمر killall tail 2>/dev/null || true لإنهاء عملية tail قيد التشغيل في الخلفية بأمان وتنظيفها.

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

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

انتظر لمدة ثانية واحدة حتى ترتبط عملية خادم الويب قيد التشغيل في الخلفية بالمنفذ 8080 بشكل صحيح.

يستعلم الأمر lsof -i :8080 عن العملية التي تستخدم المنفذ 8080.
من خلال النتائج، يمكنك التأكد من أن عملية python3 ذات المعرف PID 371 في حالة انتظار LISTEN على المنفذ 8080.

يعرض الأمر lsof -i -P -n | head -n 15 قائمة مآخذ الشبكة في النظام بسرعة بصيغة أرقام دون تحويل أرقام المنافذ وعناوين IP إلى أسماء.
نظراً لتجاوز البحث العكسي لـ DNS وتعيين أسماء منافذ الخدمة، يمكنك فهم حالة إشغال المنافذ بسرعة ودون أي تأخير.

يقوم الأمر lsof -i TCP:8080 -sTCP:LISTEN بتصفية وعرض الاتصالات على المنفذ 8080 التي تستخدم بروتوكول TCP وفي حالة LISTEN بدقة فقط.
هذا مفيد عند استبعاد جلسات الاتصال غير الضرورية وتحديد عمليات الخدمات الخلفية (daemons) التي تنتظر الاتصالات على هذا المنفذ بدقة.

بعد الانتهاء من التدريب، قم بإنهاء عملية خادم الويب في الخلفية التي كانت تشغل منفذ TCP رقم 8080 قسراً لتنظيف الموارد المحجوزة.

تتبع دليل معين والملفات التي تعيق إلغاء التثبيت (Device Busy)
لإعادة إنشاء موقف إشغال الدليل وإعاقة إلغاء التثبيت، قم بإنشاء دليل للتدريب وانتقل إلى هذا المسار.

لإنشاء ملف سجل مستهدف لتقوم العملية بقراءته، شغّل الأمر echo '작업 중인 파일' > active_work.log.

قم بتشغيل عملية sleep في الخلفية لتشير إلى الملف المنشأ عبر الإدخال القياسي وتشغله باستمرار.

للتحقق من الحالة من خارج الدليل المحجوز، قم بتغيير مسار العمل إلى الدليل الرئيسي (home).

يتتبع الأمر lsof +D /tmp/mount_test جميع الملفات والعمليات المفتوحة بشكل تكراري في الدليل المحدد ومساراته الفرعية ويعرضها.
من خلال النتائج، يمكنك التأكد من أن عملية sleep ذات المعرف PID 450 تشير إلى هذا الدليل كدليل العمل الحالي (cwd)، وفاتحة للملف active_work.log في وضع القراءة (0r)، وهو ما يمثل السبب في إعاقة إلغاء التثبيت.

بعد الانتهاء من التدريب، أنهِ عملية sleep في الخلفية التي كانت تشغل الدليل والملف بأمان.

احذف الدليل المؤقت للاختبار والملفات الفرعية المستخدمة في التدريب لتنظيف موارد النظام.

استعادة وتنظيف الملفات الشبحية المحذوفة التي ما زالت تشغل مساحة القرص (deleted)
لاختبار تسرب مساحة القرص، أنشئ دليلاً للاختبار وأنشئ ملف اختبار كبيراً بحجم 10 ميغابايت.

تتبع في الخلفية بحيث تحتفظ العملية بمقبض الملف الكبير الذي تم إنشاؤه.

احذف الملف الكبير المحجوز قسراً من نظام الملفات لإعادة تمثيل حالة تسرب الملفات الشبحية.

يستعلم الأمر lsof | grep '(deleted)' | head -n 5 عن قائمة الملفات التي تم حذفها من نظام الملفات ولكن لا تزال العملية تبقيها مفتوحة وتشغل مساحة من القرص.
يتيح لك ذلك تتبع الملفات الشبحية التي لم يتم استرجاع مساحة القرص الخاصة بها رغم حذفها بأمر rm والعمليات المرتبطة بها بسرعة.

استناداً إلى معرف العملية المستخرج عبر lsof -t، استعلم عن قائمة واصفات الملفات في الدليل /proc/$TARGET_PID/fd/.
من خلال التحقق المباشر من رقم واصف الملف الذي تشير إليه العملية، يمكنك تفريغ المساحة دون إعادة تشغيل العملية، أو استعادة البيانات الأصلية المحذوفة عبر واصف الملف هذا إذا لزم الأمر.
![TARGET_PID=$(lsof -t /tmp/leak_test/large.img 2>/dev/null | head -n 1) && [ -n “$TARGET_PID” ] && ls -l /proc/$TARGET_PID/fd/ || true](/ubuntu/20261007_150808_104/captures/s04_c05_TARGET_PID___lsof_-t__tmp_leak_test_large_img_2__d.png)
بعد الانتهاء من التدريب، أنهِ العملية قيد التشغيل في الخلفية التي واصلت حجز الملف الشبحي بأمان لاستعادة مساحة القرص بالكامل.

احذف الدليل المؤقت للاختبار بالكامل لتنظيف موارد النظام.

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