سؤال

ال fuser يتيح لي الأمر معرفة العمليات التي تستخدم ملفًا أو دليلاً.

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


تحديث

نسيت أن أذكر أنه لنظام سولاريس.

هل كانت مفيدة؟

المحلول

على الرغم من أنني لا أحسد أي شخص على تعلم Dtrace أو اكتساب خبرة في تثبيت البرامج، إلا أنه يوجد في Solaris يكون أمر لرؤية الملفات التي فتحتها العملية:/usr/bin/pfiles

% tail -f /etc/motd &
[1] 6033

% pfiles 6033
6033:   tail -f /etc/motd

      Current rlimit: 256 file descriptors
       0: S_IFREG mode:0644 dev:182,65538 ino:163065 uid:0 gid:3 size:54
          O_RDONLY|O_LARGEFILE
          /etc/motd
       1: S_IFCHR mode:0620 dev:299,0 ino:718837882 uid:101 gid:7 rdev:24,3
          O_RDWR|O_NOCTTY|O_LARGEFILE
          /dev/pts/3
       2: S_IFCHR mode:0620 dev:299,0 ino:718837882 uid:101 gid:7 rdev:24,3
          O_RDWR|O_NOCTTY|O_LARGEFILE
          /dev/pts/3

نصائح أخرى

lsof -p <pid>

من هنا

lsof تعني "قائمة الملفات المفتوحة".يبدو أمر الصدفة هذا بسيطًا بشكل مخادع:فهو يسرد معلومات حول الملفات المفتوحة بواسطة العمليات الموجودة على مربع UNIX.

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

  • الدلائل
  • التدفقات أو ملفات الشبكة (على سبيل المثال، مآخذ توصيل مجال الإنترنت أو UNIX وملفات NFS)
  • المكتبات الأصلية (على سبيل المثال، مكتبات .soor .dylibdynamic المرتبطة بعملية ما)
  • حظر الملفات الخاصة وتمييزها (على سبيل المثال، وحدة تخزين القرص، أو محرك الأقراص الثابتة الخارجي، أو وحدة التحكم، أو الماوس)
  • أنابيب

انتظر، لا يمكنني العثور على lsof على نظامي!

lsof هي أداة شائعة لدرجة أنه تم نقلها إلى جميع لهجات UNIX تقريبًا (Linux وMac OS X وBSD وSolaris وما إلى ذلك).إذا لم يكن متوفرًا على صندوقك، فاستخدم نظام إدارة الحزم المعتاد لتثبيته.يمكنك العثور على حزم lsof لـ Solaris على برنامج الشمس المجاني.

هذا هو التطبيق الكلاسيكي ل com.dtrace.

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

في بعض أنظمة يونكس، (IE:Linux)، جميع الملفات التي يتم فتحها بواسطة عملية لها معرف FD.

يمكن رؤية هذه تحت

/proc/$PID/fd

ls -la /proc/2055/fd 
total 0
dr-x------ 2 kent kent  0 Nov 19 21:44 .
dr-xr-xr-x 7 kent kent  0 Nov 19 21:42 ..
lr-x------ 1 kent kent 64 Nov 19 21:44 0 -> /dev/null
l-wx------ 1 kent kent 64 Nov 19 21:44 1 -> /home/kent/.xsession-errors
lrwx------ 1 kent kent 64 Nov 19 21:44 10 -> socket:[3977613]
lrwx------ 1 kent kent 64 Nov 19 21:44 11 -> /home/kent/.googleearth/Cache/dbCache.dat
lrwx------ 1 kent kent 64 Nov 19 21:44 12 -> /home/kent/.googleearth/Cache/dbCache.dat.index
lrwx------ 1 kent kent 64 Nov 19 21:44 13 -> socket:[3978765]
lrwx------ 1 kent kent 64 Nov 19 21:44 14 -> socket:[3978763]
lrwx------ 1 kent kent 64 Nov 19 21:44 15 -> socket:[3978766]
lrwx------ 1 kent kent 64 Nov 19 21:44 17 -> socket:[3978764]
l-wx------ 1 kent kent 64 Nov 19 21:44 2 -> /home/kent/.xsession-errors
lr-x------ 1 kent kent 64 Nov 19 21:44 3 -> pipe:[3977583]
l-wx------ 1 kent kent 64 Nov 19 21:44 4 -> pipe:[3977583]
lr-x------ 1 kent kent 64 Nov 19 21:44 5 -> pipe:[3977584]
l-wx------ 1 kent kent 64 Nov 19 21:44 6 -> pipe:[3977584]
lr-x------ 1 kent kent 64 Nov 19 21:44 7 -> pipe:[3977587]
l-wx------ 1 kent kent 64 Nov 19 21:44 8 -> pipe:[3977587]
lrwx------ 1 kent kent 64 Nov 19 21:44 9 -> socket:[3977588]

بالإضافة إلى ذلك، في بعض الأحيان تحصل على "FDINFO" (أعتقد أن هذه علامة kernel على Linux)

cat /proc/2055/fdinfo/11 
pos:    232741818
flags:  02

يمكنك الحصول على lsof من http://www.sunfreeware.com/programlistparc10.html#lsof

يمكنك أيضًا تجربة ملفات pfiles:

http://docs.Oracle.com/cd/E23823_01/html/816-5165/pfiles-1.html#scrolltoc

  1. يمكنك استخدام ليرة سورية أمر و grep لمعرفة الملفات المستخدمة بواسطة chrome

$ ls -l/proc/*/fd | جريب "كروم"

lrwx------ 1 ba abc 64 16 يوليو 22:19 104 -> /home/abc/.config/google-chrome/Default/Cookies

lr-x------ 1 abc abc 64 16 يوليو 22:19 113 -> /opt/google/chrome/nacl_irt_x86_64.nexe

lrwx------ 1 abc abc 64 16 يوليو 22:19 121 -> /home/abc/.cache/google-chrome/Default/Cache/data_0

lrwx------ 1 abc abc 64 16 يوليو 22:19 122 -> /home/abc/.cache/google-chrome/Default/Cache/data_1

lrwx------ 1 abc abc 64 16 يوليو 22:19 123 -> /home/abc/.cache/google-chrome/Default/Cache/data_2

lr-x------ 1 abc abc 64 16 يوليو 22:19 125 -> /home/abc/.config/google-chrome/Dictionaries/en-US-3-0.bdic

أمر آخر لمعرفة النتيجة باستخدام lsof و grep

$ lsof | جريب "كروم"

كروم 2204 ABC CWD DIR 8,5 4096 1441794 /home/abc

كروم 2204 اي بي سي rtd دير 8,5 4096 2 /

كروم 2204 اي بي سي تكست ريج 8,5 87345336 5111885 /opt/google/chrome/chrome

chrome 2204 abc mem REG 8,5 4202496 1443927 /home/abc/.cache/google-chrome/Default/Media Cache/data_3

chrome 2204 abc mem REG 8,5 1056768 1443926 /home/abc/.cache/google-chrome/Default/Media Cache/data_2

chrome 2204 abc mem REG 8,5 270336 1443925 /home/abc/.cache/google-chrome/Default/Media Cache/data_1

chrome 2204 abc mem REG 8,5 45056 1443924 /home/abc/.cache/google-chrome/Default/Media Cache/data_0

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top