كيفية سرد الملفات المفتوحة لعملية على Linux

دليل لاستخدام الأمر "lsof" لعملية

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

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

سيرشدك هذا البرنامج التعليمي للعثور على جميع الملفات المفتوحة لعملية معينة في Linux.

مقدمة ل lsof يأمر

يكمن جمال نظام Linux في أنه يمكنك التحكم في نظامك بالكامل وإدارته من خلال Terminal ، بشرط أن تعرف الأوامر جيدًا. بمجرد معرفة الأوامر ، تصبح جميع المهام الموجودة على الجهاز بمثابة نزهة.

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

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

ملحوظة: تأكد من استخدام ملفات سودو أثناء تنفيذ الأوامر.

باستخدام lsof يأمر

سوف ندرس ناتج lsof الأمر بالتفصيل. ادرس الأمر التالي.

sudo lsof | أقل

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

انتاج:

gaurav @ ubuntu: ~ $ sudo lsof | أقل الأمر PID TID USER FD TYPE DEVICE SIZE / OFF NODE NAME kdevtmpfs 31 root cwd DIR 0،6 4400 2 / kdevtmpfs 31 root rtd DIR 0،6 4400 2 / kdevtmpfs 31 root txt unknown / proc / 31 / exe netns 32 root cwd DIR 8،8 4096 2 / netns 32 root rtd DIR 8،8 4096 2 / netns 32 root txt unknown / proc / 32 / exe rcu_tasks 33 root cwd DIR 8،8 4096 2 / rcu_tasks 33 root rtd DIR 8،8 4096 2 / rcu_tasks 33 root txt unknown / proc / 33 / exe kauditd 34 root cwd DIR 8،8 4096 2 / kauditd 34 root rtd DIR 8،8 4096 2 / kauditd 34 root txt unknown / proc / 34 / exe 

فيما يلي السمات التي يتم عرضها باستخدام ملف lsof يأمر.

معاملوصف
يأمريظهر اسم الأمر الذي يفتح الملف.
PIDرقم معرف العملية للعملية التي تفتح الملف.
TIDرقم معرف الموضوع. يمكن أن يكون إما موضوع أو رقم مهمة.
مستخدممعرف المستخدم أو اسم المستخدم صاحب العملية.
فديظهر واصف ملف الملف.
نوعنوع العقدة المرتبطة بالملف.
جهازيظهر أرقام الجهاز.
الحجم / إيقافيظهر حجم الملف بالبايت.
العقدةيظهر رقم inode الدليل أو الدليل الأصل.
اسميظهر اسم نظام الملفات حيث توجد العملية.

سرد العمليات

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

يمكنك استخدام الأوامر مثل أعلى, ملاحظة, htop, pstree لسرد العمليات على الجهاز.

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

بناء الجملة:

sudo الأعلى

انتاج:

gaurav @ ubuntu: ~ $ sudo top PID USER PR NI VIRT RES SHR S٪ CPU٪ MEM TIME + COMMAND 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 87: 48.08 محتوى الويب 1173 mongodb 20 0 288536 6776 3428 S 5.9 0.2 2: 34.41 mongod 13765 gaurav 20 0 2931568 131408 47496 S 5.9 3.3 1: 42.34 محتوى الويب 1 root 20 0 225904 6824 4900 S 0.0 0.2 0: 27.25 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0: 00.05 kthreadd 4 root 0-20 0 0 0 I 0.0 0.0 0: 00.00 kworker / 0: 0H 6 root 0 -20 0 0 0 I 0.0 0.0 0: 00.00 mm_percpu_wq 7 root 20 0 0 0 0 S 0.0 0.0 0: 01.89 ksoftirqd / 0 8 root 20 0 0 0 0 I 0.0 0.0 0: 22.32 rcu_sched 9 جذر 20 0 0 0 0 I 0.0 0.0 0: 00.00 rcu_bh 10 الجذر rt 0 0 0 0 S 0.0 0.0 0: 03.13 الهجرة / 0 

في المربع أعلاه ، يمكننا رؤية جميع المعلومات المتعلقة بالعملية في مكان واحد. من هنا يمكننا العثور على PID للعملية التي يتعين علينا من خلالها عرض الملفات المفتوحة باستخدام امتداد lsof يأمر.

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

بناء الجملة:

sudo أعلى | grep [اسم_المعالجة]

مثال:

gaurav @ ubuntu: ~ $ أعلى | grep Terminal 13819 gaurav 20 0 803336 19728 9160 S 0.3 0.5 0: 53.63 gnome-terminal- 13819 gaurav 20 0 803336 19728 9160 S 1.0 0.5 0: 53.66 gnome-terminal- 13819 gaurav 20 0 803336 19728 9160 S 0.3 0.5 0: 53.67 جنوم -ترمينال- gaurav @ ubuntu: ~ $

هنا عرضنا على وجه التحديد معرف العملية للعملية التي تحتوي على السلسلة "Terminal" في اسم العملية. تكون هذه الطريقة مفيدة عندما لا تكون على دراية باسم العملية الكاملة أو معرف المنتج.

عرض الملفات المفتوحة المتعلقة بعملية باستخدام PID

في الكتلة أعلاه ، تعلمنا كيفية الحصول على المعلومات المتعلقة بالعملية بمساعدة القيادة العليا. الآن سوف نستخدم ملف PID المطابق لأي عملية على النظام وحاول عرض قائمة الملفات المفتوحة المتعلقة بهذه العملية باستخدام lsof يأمر.

من الناتج المذكور أعلاه ، دعونا نأخذ العملية المقابلة لـ PID 1173 الذي تم تمييزه. سنستخدم ملف lsof -p [PID] الأمر للقيام بذلك.

بناء الجملة:

sudo lsof -p [PID]

يأخذ هذا الأمر PID للعملية كمدخل ويسرد جميع الملفات المقابلة لمعرف PID هذا.

انتاج:

gaurav @ ubuntu: ~ $ sudo lsof -p 1173 lsof: تحذير: لا يمكن إحصاء () fuse.gvfsd-fuse file system / run / user / 1000 / gvfs قد تكون معلومات الإخراج غير كاملة. COMMAND PID USER FD TYPE DEVICE SIZE / OFF NODE NAME mongod 1173 mongodb cwd DIR 8،8 4096 2 / mongod 1173 mongodb rtd DIR 8،8 4096 2 / mongod 1173 mongodb txt REG 8،8 38379496 2885608 / usr / bin / mong 1173 mongodb mem REG 8،8 71776 2624380 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb mem REG 8،8 101168 2624643 /lib/x86_64-linux-gnu/librodolv-2.27.so mongbod 1173 mongbod mem REG 8،8 26936 2624439 /lib/x86_64-linux-gnu/libnss_dns-2.27.so mongod 1173 mongodb mem REG 8،8 10160 2626002 /lib/x86_64-linux-gnu/libnss_mdns4_minimal.so.2 mongbod 1173 mongod 8،8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mongod 1173 mongodb mem REG 8،8 3004224 2909671 / usr / lib / locale / locale-archive mongod 1173 mongodb mem REG 8،8 2030544 2621501 / lib / x86_64-linux-gnu / libc-2.27.so mongod 1173 mongodb mem REG 8،8 144976 2624627 /lib/x86_64-linux-gnu/libpthread-2.27.so mongod 1173 mongodb mem REG 8،8 96616 2624649 / lib / x86_64-linux-gnu / libgcc_s.so.1 mongod 1173 mongodb me m REG 8،8 1700792 2622735 /lib/x86_64-linux-gnu/libm-2.27.so mongod 1173 mongodb mem REG 8،8 14560 2621535 /lib/x86_64-linux-gnu/libdl-2.27.so mongod 1173 mongodb mem REG 8،8 31680 2624646 /lib/x86_64-linux-gnu/librt-2.27.so mongod 1173 mongodb mem REG 8،8 2357760 2890079 /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 gaurav @ ubuntu : ~ $

يتم عرض الملفات المفتوحة للعملية بمعرف العملية 1713 باستخدام ملحق lsof يأمر.

ملحوظة: قد يواجه مستخدمو جنوم التحذير أدناه. يمكنك تجاهلها بأمان.

lsof: تحذير: لا يمكن stat () fuse.gvfsd-fuse file system / run / user / 1000 / gvfs قد تكون معلومات الإخراج غير كاملة.

سرد الملفات المفتوحة ذات الصلة بعملية باستخدام اسم العملية

ال lsof يوفر لك الأمر أيضًا خيارًا لسرد الملفات المفتوحة باستخدام أسماء العمليات. يجب توفير الأسماء للأمر كسلسلة إدخال. راجع بناء الجملة أدناه لاستخدام هذا الخيار.

بناء الجملة:

sudo lsof -c [اسم العملية]

مثال:

sudo lsof -c mysql

انتاج:

gaurav @ ubuntu: ~ $ sudo lsof -c mysql lsof: تحذير: لا يمكن stat () fuse.gvfsd-fuse file system / run / user / 1000 / gvfs قد تكون معلومات الإخراج غير كاملة. الأمر PID USER FD TYPE DEVICE SIZE / OFF NODE NAME mysqld 1266 mysql cwd DIR 8،8 4096 3154135 / var / lib / mysql mysqld 1266 mysql rtd DIR 8،8 4096 2 / mysqld 1266 mysql txt REG 8،8 24691368 2889411 / usr / sbin / mysqld mysqld 1266 mysql mem REG 8،8 6288 5505444 /usr/lib/mysql/plugin/auth_socket.so mysqld 1266 mysql DEL REG 0،18 28127 / [aio] mysqld 1266 mysql DEL REG 0،18 28126 / [ aio] mysqld 1266 mysql DEL REG 0،18 28125 / [aio] mysqld 1266 mysql mem REG 8،8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mysqld 1266 mysql mem REG 8،8 47576 2624592 / lib / x86_64-linux-gnu / libnss_nis-2.27.so mysqld 1266 mysql mem REG 8،8 39744 2624438 /lib/x86_64-linux-gnu/libnss_compat-2.27.so 

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

سرد الملفات التي تم فتحها بواسطة اتصالات الشبكة

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

sudo lsof -i

انتاج:

gaurav @ ubuntu: ~ $ sudo lsof -i COMMAND PID USER FD TYPE DEVICE SIZE / OFF NODE NAME systemd-r 969 systemd-solution 12u IPv4 17357 0t0 UDP localhost: domain systemd-r 969 systemd-solution 13u IPv4 17358 0t0 TCP localhost: المجال (LISTEN) systemd-r 969 systemd-solution 15u IPv4 1685575 0t0 UDP ubuntu: 48090 -> _ gateway: domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDP *: mdns avahi-dae 1028 avahi 13u IPv6 23811: 0t0 UDP avahi-dae 1028 avahi 14u IPv4 23812 0t0 UDP *: 58999 avahi-dae 1028 avahi 15u IPv6 23813 0t0 UDP *: 37512 mongod 1173 mongodb 6u IPv4 28149 0t0 TCP localhost: 27017 (LISTEN) 25lqldu 12664 myshost mysql (LISTEN) apache2 1283 الجذر 4u IPv6 28140 0t0 TCP *: http (LISTEN) gaurav @ ubuntu: ~ $

هنا يمكننا رؤية المعلومات حول الملفات المفتوحة بواسطة اتصال الشبكة باستخدام lsof -i يأمر.

استنتاج

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