lsof - نمایش لیستی از فایل‌های باز

lsof - لیستی از تمام فایل‌های باز شده و همچنین پروسه‌هایی که آن فایل‌ها را باز کرده‌اند را در خروجی نمایش می‌دهد.

شکل کلی دستور:

$ lsof [options]

این دستور مخفف List Open Files می‌باشد. از آن‌جایی که هرچیزی در گنو/لینوکس یک فایل است، پس منظور از فایل می‌تواند: از تنظیمات گراب گرفته تا تنظیمات شبکه، حتی پارتیشن‌ها، کارت گرافیک و یا بالاتر از آن CPU باشد! این قابلیت باعث می شود که گنو/لینوکس کاملا در اختیار کاربر بوده و بتواند آن را شخصی سازی کند.

این دستور اطلاعات زیادی به کاربر می‌دهد. قبل از این‌که با این دستور آشنا شویم بهتر است یک‌بار از آن خروجی بگیریم، ساده‌ترین شکل استفاده آن، به صورت زیر است:

lsof
COMMAND    PID  TID       USER   FD      TYPE     DEVICE SIZE/OFF   NODE NAME
gnome-ses 1799          masoud  cwd       DIR       8,15     4096 288995 /home/masoud
gnome-ses 1799          masoud  rtd       DIR       8,15     4096      2 /
gnome-ses 1799          masoud  txt       REG       8,15   241244 287914 /usr/bin/gnome-session
gnome-ses 1799          masoud  mem       REG       8,15   173524 395328 /usr/lib/i386-linux-gnu/libvorbis.so.0.4.5
gnome-ses 1799          masoud  mem       REG       8,15    38524 395065 /usr/lib/i386-linux-gnu/libltdl.so.7.3.0
gnome-ses 1799          masoud  mem       REG       8,15    71316 395275 /usr/lib/i386-linux-gnu/libtdb.so.1.2.10
gnome-ses 1799          masoud  mem       REG       8,15    63248 394721 /usr/lib/i386-linux-gnu/libcanberra.so.0.2.5
gnome-ses 1799          masoud  mem       REG       8,15    17944 394719 /usr/lib/i386-linux-gnu/libcanberra-gtk3.so.0.1.8
gnome-ses 1799          masoud  mem       REG       8,15    18020 395939 /usr/lib/i386-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders

خروجی این دستور بسیار طولانی است! انتظار ما هم همین است چرا که ما قبلا اشاره کردیم که همه‌چیز در گنو/لینوکس «یک فایل» است و خروجی هم همین را برای ما ثابت می‌کند.

در خروجی بالا با ۱۰ ستون روبرو می‌شوید که به ترتیب:

COMMAND: این ستون نشان می‌دهد که کدام دستور، از کدام فایل دارد استفاده می‌کند.

PID: شماره‌شناسه دستور.

TID: مخفف Thread IDentifier می‌باشد. بحث در مورد TID زیاد هست و گاهی گفتن تفاوت آن با PID کمی مشکل می‌شود برای مثال وقتی که یک فرآیند فقط یک Thread دارد، همیشه TID و PID یکسان خواهد بود و  هر تابعی که با TID کار می‌کند به‌صورت خودکار با PID کار می‌کند (برنامه‌نویسان مطالعه بیشتری در این مورد باید داشته باشند).

USER: نام کاربر مورد استفاده کننده از فایل.

FD: توصیف‌گر فایل یا File Descriptor، دارای مقادیر گوناگونی است، به اختصار:

  • cwd: مخفف Current Work Directory است، که بیان کننده آن است که دستور از آن‌جا آغاز شده است.
  • txt: متن برنامه که شامل کد و داده‌ها هستند.
  • rtd: مخفف Root Directory بیان‌کننده مسیر ریشه .
  • و...

علاوه براین، در این ستون مقادیر همراه با حروف دیده می‌شود:

  • r: بیان کننده‌ی read-only است.
  • w: بیان کننده‌ی write  است.
  • u: بیان کننده‌ی  read/write  است.

که نشان می‌دهد هر دستور چگونه باز شده است.

TYPE: این دستور هم دارای مقادیری مختلفی است:

  • REG: نشان‌دهنده‌ی فایل‌های منظم است.
  • CHR: برای ابزارهای کاراکتری.
  • DIR: برای مسیر(دایرکتوری) است.
  • و...

DEVICE: شماره دستگاه

SIZE/OFF: سایز فایل

NODE: شماره نماگره (inode)

NAME: نام فایل

گزینه های اختیاری:

u-: توسط این دستور و وارد کردن نام کاربری شخص، می‌توان تمامی فایل‌های باز شده توسط کاربر را لیست کرد.

lsof -u masoud
COMMAND    PID   USER   FD      TYPE     DEVICE SIZE/OFF     NODE NAME
gnome-ses 1799 masoud  txt       REG       8,15   241244   287914 /usr/bin/gnome-session
gnome-ses 1799 masoud  mem       REG       8,15   173524   395328 /usr/lib/i386-linux-gnu/libvorbis.so.0.4.5
gnome-ses 1799 masoud  mem       REG       8,15    38524   395065 /usr/lib/i386-linux-gnu/libltdl.so.7.3.0
gnome-ses 1799 masoud  mem       REG       8,15    71316   395275 /usr/lib/i386-linux-gnu/libtdb.so.1.2.10
gnome-ses 1799 masoud  mem       REG       8,15    63248   394721 /usr/lib/i386-linux-gnu/libcanberra.so.0.2.5
gnome-ses 1799 masoud  mem       REG       8,15   113404   286340 /usr/share/mime/mime.cache

p-: لیست کردن فایل‌ها بر اساس PID فرآیند مورد نظر، که به این صورت فایل‌هایی که توسط یک فرآیند باز شده است لیست می‌شود.

lsof -p 1838
COMMAND    PID   USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME
dbus-laun 1838 masoud  cwd    DIR       8,15     4096      2 /
dbus-laun 1838 masoud  rtd    DIR       8,15     4096      2 /
dbus-laun 1838 masoud  txt    REG       8,15    26312 265987 /usr/bin/dbus-launch
dbus-laun 1838 masoud  mem    REG       8,15    47072 261556 /lib/i386-linux-gnu/libnss_files-2.15.so
dbus-laun 1838 masoud  mem    REG       8,15    42664 261560 /lib/i386-linux-gnu/libnss_nis-2.15.so
dbus-laun 1838 masoud  mem    REG       8,15    92028 261550 /lib/i386-linux-gnu/libnsl-2.15.so
dbus-laun 1838 masoud  mem    REG       8,15    30552 261552 /lib/i386-linux-gnu/libnss_compat-2.15.so
dbus-laun 1838 masoud  mem    REG       8,15    21888 394617 /usr/lib/i386-linux-gnu/libXdmcp.so.6.0.0
dbus-laun 1838 masoud  mem    REG       8,15     9608 394606 /usr/lib/i386-linux-gnu/libXau.so.6.0.0
dbus-laun 1838 masoud  mem    REG       8,15    13952 261506 /lib/i386-linux-gnu/libdl-2.15.so
dbus-laun 1838 masoud  mem    REG       8,15   132680 395359 /usr/lib/i386-linux-gnu/libxcb.so.1.1.0
dbus-laun 1838 masoud  mem    REG       8,15  1730024 261491 /lib/i386-linux-gnu/libc-2.15.so
dbus-laun 1838 masoud  mem    REG       8,15  1268672 394602 /usr/lib/i386-linux-gnu/libX11.so.6.3.0
dbus-laun 1838 masoud  mem    REG       8,15   134376 261469 /lib/i386-linux-gnu/ld-2.15.so
dbus-laun 1838 masoud    0r   CHR        1,3      0t0   6052 /dev/null
dbus-laun 1838 masoud    1u   CHR        1,3      0t0   6052 /dev/null
dbus-laun 1838 masoud    2u   CHR        1,3      0t0   6052 /dev/null
dbus-laun 1838 masoud    4u   CHR        1,3      0t0   6052 /dev/null
dbus-laun 1838 masoud    8r  FIFO        0,8      0t0  14048 pipe

c-: لیست کردن فایل‌هایی که، پروسه‌ی آن‌ها با یک کاراکتر شروع می‌شود.

lsof -u masoud -c g
COMMAND     PID   USER   FD      TYPE     DEVICE SIZE/OFF     NODE NAME
gnome-ses  1799 masoud  txt       REG       8,15   241244   287914 /usr/bin/gnome-session
gnome-ses  1799 masoud  mem       REG       8,15   173524   395328 /usr/lib/i386-linux-gnu/libvorbis.so.0.4.5
gnome-ses  1799 masoud  mem       REG       8,15    38524   395065 /usr/lib/i386-linux-gnu/libltdl.so.7.3.0
gnome-ses  1799 masoud  mem       REG       8,15    71316   395275 /usr/lib/i386-linux-gnu/libtdb.so.1.2.10
gnome-ses  1799 masoud  mem       REG       8,15    63248   394721 /usr/lib/i386-linux-gnu/libcanberra.so.0.2.5
gnome-ses  1799 masoud  mem       REG       8,15   113404   286340 /usr/share/mime/mime.cache
gnome-ses  1799 masoud  mem       REG       8,15    50456   261610 /lib/i386-linux-gnu/libudev.so.0.13.0
gnome-ses  1799 masoud  mem       REG       8,15    26256   395919 /usr/lib/i386-linux-gnu/gconv/gconv-modules.cache
gnome-ses  1799 masoud  mem       REG       8,15   215360   396156 /usr/lib/i386-linux-gnu/gvfs/libgvfscommon.so

i-: برای نمایش سوکت‌های شبکه مورد استفاده قرار می‌گیرد به این صورت که شماره‌ی پورت، آدرس یا پروتکل مورد نظر را در جلوی آن می‌نویسیم:

lsof -i:80

 

lsof -i tcp; lsof -i udp;

D+: لیست کردن فایل‌های باز شده در زیر دایرکتوری مشخص.

lsof +D /var

نکته: این دستور کاربردها فراوانی دارد و با همین چند مثال ختم نمی‌شود. برای نمونه، در مثال زیر تمام فرآیند‌هایی که وابسته با کاربر مشخص شده است، با دستور kill، به پایان می‌رسند.

مثال:

kill -9 `lsof -u masoud`