وظیفه دستور lsof لیست کردن فایل‌های باز در سیستم است. در اینجا،  فایل الزاماً به معنای pdf یا یک فایل متنی نیست؛ بلکه شامل فایل‌های دیسک یا pipeهایی نیز می‌تواند باشد که توسط فرایندها در پس زمینه استفاده می‌شوند. در این آموزش، نحوه استفاده از دستور lsof و گزینه‌های مختلف آن شرح داده شده است.

 

 

این مطلب نیز ممکن است برای شما مفید باشد: دستور Ls در لینوکس (لیست کردن فایل ها و دایرکتوری ها)

 

دستور lsof، ابزاری مفیدی برای مدیران سیستم در جهت رفع اشکال سیستم عامل است.

اگرچه دستور lsof یک ابزار از پیش نصب شده در لینوکس است، با این حال اگر این ابزار را در سیستم Ubuntu / Debian خود نصب ندارید، می‌توانید با استفاده از apt آن را به صورت زیر نصب کنید:

sudo apt install lsof

سایر کاربران لینوکس نیز می‌توانند از طریق دستور نصب استاندارد سیستم خود و به دنبال آن عبارت lsof، این ابزار را نصب نمایند.

 

نمایش تمام فایل‌های باز شده در سیستم

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

sudo lsof | less

 

با فشار دادن "ENTER" یا دکمه علامت سمت پایین، می‌توانید در این لیست به پایین حرکت کنید.

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

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

PID: شناسه فرآیند نگهدارنده فایل.

TID: شناسه thread فرآیند مربوطه.

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

FD: توصیف کننده فایل که توسط فرایند برای ارتباط با فایل استفاده می‌شود. این گزینه می‌تواند یکی از موارد زیر باشد:

cwd: دایرکتوری فعال فعلی.

rtd: دایرکتوری root.

txt: یک برنامه متنی مانند برخی از کدها.

mem: فایل نگاشت حافظه.

 

این مطلب نیز ممکن است برای شما مفید باشد: خالی کردن فایل گزارش در لینوکس

 

TYPE: نوع فایل که می‌تواند به صورت زیر باشد:

REG: فایل معمولی.

DIR: دایرکتوری.

CHR: فایل کاراکتر.

LINK: فایل لینک نمادین (symbolic link).

DEVICE: شماره دستگاه‌های مربوط به فایل.

SIZE/OFF: اندازه فایل یا offset آن به بایت.

NODE: شماره inode.

NAME: نام فایل.

توجه: اگر دستور با مجوزهای کاربر root اجرا نشود، ممکن است برخی از اطلاعات مانند inode یا شماره دستگاه تغییر یابد.

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

 

نمایش تمام فایل‌های باز شده توسط یک کاربر خاص با استفاده از دستور lsof

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

sudo lsof -u <USER_NAME> | less

 

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

 

این مطلب نیز ممکن است برای شما مفید باشد: مخفی کردن فایل ها و پوشه ها در اوبونتو

 

نمایش فایل‌های باز یک دایرکتوری خاص

همانطور که می‌دانید فایل‌ها در دایرکتوری قرار دارند. بنابراین کاملاً بدیهی است که بتوانید فایل‌های باز یک دایرکتوری خاص را استخراج کنید.

lsof +D <DIR_NAME>

 

با دستور بالا، فایل‌های بازی که در پوشه Documents قرار دارند، نمایش داده می‌شوند. در اینجا تنها یک فایل در دایرکتوری Document باز است که آن فایل یک فایل ++ C معمولی است.

 

نمایش فایل‌های باز در یک سیستم فایل خاص با دستور lsof

به جای یک دایرکتوری واحد، دستور lsof می‌تواند فایل‌های باز از یک سیستم فایل خاص را لیست کند. این امر با قرار دادن نام سیستم فایل پس از دستور lsof حاصل می‌شود.

lsof <FILE_SYSTEM>

 

در شکل بالا، فایل‌های باز موجود در سیستم فایل /proc نمایش داده شده است.

 

این مطلب نیز ممکن است برای شما مفید باشد: مقایسه دو فایل در لینوکس با استفاده از diff ،vimdiff و colordiff

 

نمایش فایل‌های باز شده توسط یک فرآیند خاص

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

lsof -p <PID>

 

دستور بالا، لیستی از فایل‌های باز شده توسط فرآیندی با  شناسه 3404 را نشان می‌دهد.

توجه: از نماد caret (یعنی ^) برای نفی پارامترها در دستور lsof استفاده می‌شود. به عنوان مثال lsof -p ^ 3404، همه فایل‌های باز به جز فایل‌هایی را نمایش می‌دهد که توسط فرآیندی با شناسه 3404 باز شده‌اند.

 

نمایش فایل‌های باز شبکه

لینوکس طیف وسیعی از فایل‌های شبکه را برای ذخیره آدرس‌های IP یا پیکربندی رابط شبکه ذخیره می‌کند. این نوع فایل‌های باز را می‌توان با گزینه -i فیلتر کرد.

lsof -i 

 

این فایل‌ها دارای ویژگی‌های خاصی مانند انواع پروتکل‌های شبکه هستند. این فایل‌های باز را می‌توان با استفاده از پارامترهای خاص زیر فیلتر کرد:

'4': فایل‌های شبکه برای IPv4

‘6’: فایل‌های شبکه برای IPv6

'TCP': فایل‌های شبکه برای TCP

‘UDP’: فایل‌های شبکه برای UDP

‘TCP: 25’: فایل‌های شبکه برای TCP، با شماره پورت 25

‘TCP: 1-25’: فایل‌های شبکه برای TCP، با شماره پورت از 1 تا 25

 

این مطلب نیز ممکن است برای شما مفید باشد: راهنمای سیستم فایل 'proc/' در لینوکس

 

به عنوان مثال:

lsof -i 6

 

استفاده از دستور lsof برای جستجوی فایل‌های باز بر اساس دستور

با هزاران فایل باز در سیستم، جستجوی خطی یک دستور خاص غیرممکن به نظر می‌رسد. با این حال، دستور lsof گزینه -c را برای فیلتر کردن فایل‌های باز بر اساس یک دستور خاص دارد.

lsof -c <COMMAND>

 

 

 

منبع:

journaldev