مقدمة في Lsof

تحت Linux ، تعتبر العديد من الكائنات ملفًا ، بغض النظر عما إذا كان الكائن هو بالفعل ملف أو جهاز أو دليل أو مقبس. يعد إدراج ملف أمرًا سهلاً ، فهناك غلاف مدمج lsلذلك. ولكن ماذا لو أراد المستخدم معرفة الملفات التي يتم فتحها حاليًا بواسطة عملية خادم الويب؟ أو إذا أراد هذا المستخدم معرفة الملفات التي يتم فتحها في دليل معين؟ وهنا lsofيأتي دور اللعب. تخيل lsofأنه lsمع إضافة "الملفات المفتوحة".

يرجى ملاحظة أنه في حين أن BSD لها فائدة مختلفة لهذه الوظيفة fstat، إلا أن العديد من النكهات الأخرى لـ Unix (Solaris ، على سبيل المثال) تمتلك أيضًا lsof. تختلف الخيارات والأعلام على الأنظمة الأساسية الأخرى ، بالإضافة إلى مظهر الإخراج ، ولكن بشكل عام يجب أن تكون المعرفة في هذه المقالة قابلة للتطبيق عليها أيضًا.

أولاً ، دعنا نلقي نظرة على تنسيق lsofالمخرجات وكيفية قراءتها. الناتج المعتاد lsofبدون أي معلمات يشبه ما يلي. تم اقتطاع هذا من أجل سهولة القراءة.

COMMAND    PID  TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init         1            root  cwd       DIR              254,1      4096          2 /
init         1            root  rtd       DIR              254,1      4096          2 /
init         1            root  txt       REG              254,1     36992    7077928 /sbin/init
init         1            root  mem       REG              254,1     14768    7340043 /lib/x86_64-linux-gnu/libdl-2.13.so
init         1            root  mem       REG              254,1   1603600    7340040 /lib/x86_64-linux-gnu/libc-2.13.so
init         1            root  mem       REG              254,1    126232    7340078 /lib/x86_64-linux-gnu/libselinux.so.1
init         1            root  mem       REG              254,1    261184    7340083 /lib/x86_64-linux-gnu/libsepol.so.1
init         1            root  mem       REG              254,1    136936    7340037 /lib/x86_64-linux-gnu/ld-2.13.so
init         1            root   10u     FIFO               0,14       0t0       4781 /run/initctl

هذه الأعمدة تعني ما يلي:

  • الأمر - العملية التي ينتمي إليها ملف مفتوح ، في هذا المثال يرتبط كل شيء init.
  • PID - رقم تعريف العملية المذكورة.
  • المستخدم - المستخدم الذي تعمل العملية ضمنه. ل init، وانها دائما تقريبا root.
  • FD - واصف الملف ، الأكثر شيوعًا:
    • cwd- دليل العمل الحالي (قد تلاحظ التشابه مع pwdالأمر الذي يطبع دليل العمل الحالي).
    • rtd - الدليل الجذر للعملية.
    • txt- أ text file، يمكن أن يعني هذا إما ملف تكوين متعلق بالعملية أو "شفرة المصدر" المتعلقة (أو التي تنتمي) إلى العملية.
    • mem - ما يسمى بـ "ملف الذاكرة المعنونة" ، وهذا يعني جزء من الذاكرة الافتراضية (اقرأ: ذاكرة الوصول العشوائي) التي تم تخصيصها للملف.
    • رقم - يمثل الرقم واصف الملف الفعلي ، والحرف بعد الرقم هو الوضع الذي يتم فيه فتح الملف:
    • r - اقرأ.
    • w - كتابة.
    • u - اقرا و اكتب.
  • النوع - يحدد النوع الفعلي للملف ، والأكثر شيوعًا هو:
    • REG - ملف عادي.
    • DIR - دليل.
    • FIFO - أول من يخرج أولاً.
  • الجهاز - الرقم الرئيسي والثانوي للجهاز الذي يحمل الملف.
  • SIZE - حجم الملف بالبايت.
  • NODE - رقم inode للملف.
  • NAME - اسم الملف.

قد يكون هذا مربكًا بعض الشيء في الوقت الحالي ، ولكن إذا كنت تعمل lsofعدة مرات ، فسوف يغرق بسرعة في دماغك.

كما ذكر أعلاه ، lsofتم اختصار الناتج هنا. بدون أي حجج أو فلاتر ، lsofينتج المئات من خطوط الإخراج التي ستجعلك مرتبكًا فقط.

هناك طريقتان أساسيتان لحل هذه المشكلة:

  • استخدم واحدًا أو أكثر من lsofخيارات سطر الأوامر لتضييق النتائج.
  • قم بتوصيل الإخراج ، على سبيل المثال ، grep.

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

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

lsof /path/to/your/file

سيؤدي هذا إلى إخراج مشابه لما يلي:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
vim 2679 root    5w   REG  254,1   121525 6035622 /root/lsof.txt

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

lsof +D /path/to/your/directory/

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

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
mocp    5637  music    4r   REG   0,19 10147719 102367344 /home/Music/RMS_GNU_SONG.ogg

وهذا يعني أن العملية mocp، مع PID 5637، التي تنتمي للمستخدم musicقد فتحت ملفًا يسمى RMS_GNU_SONG.ogg. ومع ذلك ، حتى بعد إغلاق هذه العملية ، لا تزال هناك مشكلة - لا يمكن إلغاء تحميل وحدة تخزين NFS.

lsofيحتوي على -cعلامة تعرض الملفات التي فتحت اسم عملية عشوائية.

lsof -c mocp

سينتج عن هذا الناتج مثل هذا:

mocp    9383  music    4r   REG   0,19 10147719 102367344 /home/Music/ANOTHER_RMS_GNU_SONG.ogg

في هذا المثال ، هناك مثيل آخر mocpللتشغيل ، يمنعك من إلغاء تحميل المشاركة. بعد إغلاق هذه العملية ، تريد التأكد من أن المستخدم musicليس لديه ملفات أخرى يحتمل أن تكون مفتوحة. lsofيحتوي على -uعلامة لإظهار الملفات المفتوحة من قبل مستخدم معين. تذكر أن الملف ليس دائمًا مجرد ملف عادي على القرص الثابت الخاص بك!

lsof -u music

يمكنك أيضًا تمرير عدة مستخدمين ، مفصولة بفواصل:

lsof -u music,moremusic

و مهمة مذكرة بشأن السلوك الافتراضي lsof: كانت النتائج أو المستندة، مما يعني أنك سوف نرى نتائج ملف افتتح العمليات التي يملكها إما المستخدم music، أو المستخدم moremusic. إذا كنت ترغب في رؤية نتائج مطابقة النتائج التي يمتلكها كلا المستخدمين ، فسيتعين عليك تمرير العلامة -a:

lsof -au music, moremusic

نظرًا لأن كلا المستخدمين في المجموعة musicusers، فيمكنك أيضًا إدراج الملفات بناءً على المجموعة:

lsof -g musicusers

يمكنك أيضًا دمج علامات سطر الأوامر:

lsof -u music,moremusic -c mocp

or

lsof -u ^music +D /home/Music

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

في الأمثلة السابقة ، نظرنا في الغالب في الملفات العادية. ماذا عن المقابس واتصالات الشبكة؟

لسرد جميع اتصالات الشبكة الحالية lsofلديها -iالعلم:

lsof -i

يبدو الناتج مشابهًا لما رأيناه حتى الآن ...

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
owncloud  3509  myuser   25u  IPv4  44946      0t0  TCP strix.local:34217->myserver.vultr.com:https (ESTABLISHED)
firefox   3612  myuser   82u  IPv4  49663      0t0  TCP strix.local:43897->we-in-f100.1e100.net:https (ESTABLISHED)
ssh       3784  myuser    3u  IPv4  10437      0t0  TCP strix.local:51416->someserver.in:ssh (ESTABLISHED)
wget      4140  myuser    3w  IPv4  45586      0t0  TCP strix.local:54460->media.ccc.de:http (CLOSE_WAIT)

... باستثناء فرق واحد: بدلاً من أسماء الملفات أو الأدلة ، NAMEيعرض العمود الآن معلومات الاتصال. يتكون كل اتصال من الأجزاء التالية:

  • بروتوكول.
  • اسم المضيف المحلي.
  • منفذ مصدر الاتصال.
  • اسم DNS الوجهة.
  • ميناء الوصول.
  • حالة الاتصال.

كما هو الحال مع العديد من الأدوات الأخرى ، يمكنك إلغاء تحديد حل أسماء ومنافذ DNS ( -nو -P، على التوالي). -iيأخذ العلم معلمات إضافية. يمكنك تحديد ما إذا كان أو لا تظهر tcp، udpأو icmpاتصالات أو بعض الموانئ:

lsof -i :25
or
lsof -i :smtp

مرة أخرى ، يمكن دمج المعلمات. المثال التالي ...

lsof -i tcp:80

... سيعرض لك اتصالات TCP فقط باستخدام المنفذ 80. يمكنك أيضًا دمجها مع الخيارات التي تعرفها بالفعل من الملفات "الكلاسيكية":

lsof -a -u httpd -i tcp

سيظهر لك هذا جميع اتصالات TCP التي فتحها المستخدم httpd. لاحظ -aالعلم الذي يغير السلوك الافتراضي لـ lsof(كما ذكرنا سابقًا). كما هو الحال مع معظم أدوات سطر الأوامر ، يمكنك التعمق بشكل كبير. يعرض لك ما يلي فقط اتصالات TCP التي تكون حالتها "ESTABLISHED":

lsof -i -s TCP:ESTABLISHED

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

اترك تعليقاً

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

نظرة ثاقبة على 26 أسلوبًا لتحليل البيانات الضخمة: الجزء الأول

وظائف طبقات معمارية مرجعية للبيانات الضخمة

وظائف طبقات معمارية مرجعية للبيانات الضخمة

اقرأ المدونة لمعرفة الطبقات المختلفة في بنية البيانات الضخمة ووظائفها بأبسط طريقة.

6 أشياء شديدة الجنون حول نينتندو سويتش

6 أشياء شديدة الجنون حول نينتندو سويتش

يعرف الكثير منكم أن Switch سيصدر في مارس 2017 وميزاته الجديدة. بالنسبة لأولئك الذين لا يعرفون ، قمنا بإعداد قائمة بالميزات التي تجعل "التبديل" "أداة لا غنى عنها".

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

وعود التكنولوجيا التي لم يتم الوفاء بها بعد

هل تنتظر عمالقة التكنولوجيا للوفاء بوعودهم؟ تحقق من ما تبقى دون تسليم.

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

كيف يمكن للذكاء الاصطناعي نقل أتمتة العمليات إلى المستوى التالي؟

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

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

التفرد التكنولوجي: مستقبل بعيد للحضارة الإنسانية؟

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

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

CAPTCHA: ما هي المدة التي يمكن أن تظل تقنية قابلة للتطبيق للتميز بين الإنسان والذكاء الاصطناعي؟

لقد أصبح حل CAPTCHA صعبًا جدًا على المستخدمين في السنوات القليلة الماضية. هل ستكون قادرة على أن تظل فعالة في اكتشاف البريد العشوائي والروبوتات في المستقبل القريب؟

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

التطبيب عن بعد والرعاية الصحية عن بعد: المستقبل هنا

ما هو التطبيب عن بعد والرعاية الصحية عن بعد وأثره على الأجيال القادمة؟ هل هو مكان جيد أم لا في حالة الوباء؟ اقرأ المدونة لتجد طريقة عرض!

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

هل تساءلت يومًا كيف يربح المتسللون الأموال؟

ربما سمعت أن المتسللين يكسبون الكثير من المال ، لكن هل تساءلت يومًا كيف يجنون هذا النوع من المال؟ دعنا نناقش.

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

يتسبب التحديث الإضافي لنظام macOS Catalina 10.15.4 في حدوث مشكلات أكثر من حلها

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