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`