| LSOF(8) | System Manager's Manual | LSOF(8) |
نام (NAME)
lsof - فهرست کردن فایلهای باز
خلاصه دستور (SYNOPSIS)
lsof [ -?abChHlnNOPQRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D D ] [ +|-e s ] [ +|-E ] [ +|-f [cfgGn] ] [ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k ] [ -K k ] [ +|-L [l] ] [ +|-m m ] [ +|-M ] [ -o [o] ] [ -p s ] [ +|-r [t[m<fmt>]] ] [ -s [p:s] ] [ -S [t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -x [fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [names]
توضیحات (DESCRIPTION)
دستور Lsof نسخه 4.99.7 اطلاعات مربوط به فایلهای باز شده توسط فرایندها را برای لهجههای یونیکس (UNIX dialects) زیر در خروجی استاندارد خود فهرست میکند:
Apple Darwin 9, Mac OS X 10, macOS 11 and above FreeBSD 8.2 and above Linux 2.1.72 and above NetBSD 1.2 and above OpenBSD 7.2 and above Solaris 9, 10 and 11 and above OpenIndiana 5.11 and above
(برای اطلاعات درباره نحوه دریافت آخرین نسخه lsof، بخش DISTRIBUTION این صفحه راهنما را ببینید.)
یک فایل باز میتواند یک فایل معمولی، دایرکتوری، فایل ویژه بلوکی (block special file)، فایل ویژه کاراکتری (character special file)، یک مرجع متنی در حال اجرا (executing text reference)، کتابخانه، یک جریان (stream) یا فایل شبکه (سوکت اینترنت، فایل NFS یا سوکت دامنه یونیکس) باشد. یک فایل خاص یا تمامی فایلهای موجود در یک سیستمفایل را میتوان بر اساس مسیر انتخاب کرد.
بهجای نمایش قالببندیشده، lsof میتواند خروجی قابل تجزیه و پردازش توسط سایر برنامهها تولید کند. برای اطلاعات بیشتر به توضیحات گزینه -F و بخش OUTPUT FOR OTHER PROGRAMS مراجعه کنید.
علاوه بر تولید یک فهرست خروجی منفرد، lsof میتواند در حالت تکرار (repeat mode) اجرا شود. در حالت تکرار، خروجی را تولید کرده، مکث میکند، و سپس عملیات خروجی را تکرار میکند تا زمانی که با سیگنال وقفه (interrupt) یا خروج (quit) متوقف شود. برای اطلاعات بیشتر به توضیحات گزینه +|-r [t[m<fmt>]] مراجعه کنید.
گزینهها (OPTIONS)
در صورت عدم تعیین هرگونه گزینه، lsof تمامی فایلهای باز متعلق به تمامی فرایندهای فعال را فهرست میکند.
اگر هرگونه گزینه درخواست فهرست مشخص شود، سایر درخواستهای فهرست باید صریحاً درخواست شوند - برای مثال، اگر -U برای فهرست کردن فایلهای سوکت یونیکس مشخص شود، فایلهای NFS فهرست نخواهند شد مگر اینکه -N نیز مشخص شده باشد؛ یا اگر فهرستی از کاربران با گزینه -u مشخص شده باشد، فایلهای سوکت دامنه یونیکس متعلق به کاربرانی که در فهرست نیستند، فهرست نخواهند شد مگر اینکه گزینه -U نیز تعیین شده باشد.
بهطور معمول، گزینههای فهرستی که صریحاً مشخص شدهاند با هم OR منطقی (یا) میشوند - یعنی مشخص کردن گزینه -i بدون آدرس به همراه گزینه -ufoo فهرستی از تمامی فایلهای شبکه یا فایلهای متعلق به فرایندهای کاربر «foo» را تولید میکند. استثناها عبارتند از:
- 1)
- نام ورود یا شناسه کاربر (UID) نفیشده با «^»، مشخصشده با گزینه -u؛
- 2)
- شناسه فرایند (PID) نفیشده با «^»، مشخصشده با گزینه -p؛
- 3)
- شناسه گروه فرایند (PGID) نفیشده با «^»، مشخصشده با گزینه -g؛
- 4)
- دستور نفیشده با «^»، مشخصشده با گزینه -c؛
- 5)
- نامهای وضعیت پروتکل TCP یا UDP نفیشده با («^»)، مشخصشده با گزینه -s [p:s] .
از آنجا که این موارد نشاندهنده استثنائات (حذف) هستند، بدون عملیات OR یا AND اعمال شده و پیش از اعمال هرگونه معیار انتخاب دیگری تأثیر میگذارند.
گزینه -a میتواند برای AND کردن (و منطقی) انتخابها استفاده شود. برای مثال، تعیین -a، -U و -ufoo فهرستی تنها از فایلهای سوکت یونیکس متعلق به فرایندهای متعلق به کاربر «foo» تولید میکند.
احتیاط: گزینه -a باعث AND شدن تمامی گزینههای انتخاب فهرست میشود؛ نمیتوان از آن برای AND کردن جفتهای خاصی از گزینهها با قرار دادنش میان آنها استفاده کرد، هرچند قرار دادن آن در آنجا مجاز است. در هر کجایی که -a قرار گیرد، باعث AND شدن تمامی گزینههای انتخابی میشود.
آیتمهای متعلق به یک مجموعه انتخاب یکسان - نامهای دستور، توصیفکنندههای فایل (file descriptors)، آدرسهای شبکه، شناسههای فرایند، شناسههای کاربر، نامهای ناحیه (zone names)، بافتهای امنیتی (security contexts) - در یک مجموعه OR منفرد ترکیب شده و پیش از آنکه نتیجه در AND کردن شرکت کند اعمال میشوند. بنابراین، برای مثال، تعیین -i@aaa.bbb، -i@ccc.ddd، -a و -ufff,ggg فهرستی از فایلهایی را انتخاب میکند که متعلق به نام کاربری «fff» یا «ggg» بوده و اتصالات شبکهای به میزبان aaa.bbb یا ccc.ddd داشته باشند.
گزینهها را میتوان پس از یک پیشوند منفرد با یکدیگر گروهبندی کرد -- به عنوان مثال، مجموعه گزینههای «-a -b -C» را میتوان بهصورت -abC بیان کرد. با این حال، از آنجا که مقادیر پس از +|-f، -F، -g، -i، +|-L، -o، +|-r، -s، -S، -T، -x و -z اختیاری هستند، هنگامی که مقداری برای آنها ندارید مراقب باشید که کاراکتر بعدی مبهم نباشد. به عنوان مثال، -Fn ممکن است بیانگر گزینههای -F و -n باشد، یا نشاندهنده نویسه شناسه فیلد n پس از گزینه -F باشد. هنگامی که احتمال ابهام وجود دارد، یک گزینه جدید را با کاراکتر «-» آغاز کنید - برای مثال «-F -n». اگر گزینه بعدی نام یک فایل است، پس از گزینه مبهم «--» قرار دهید - برای مثال «-F -- name».
هر یک از پیشوندهای «+» یا «-» را میتوان برای گروهی از گزینهها به کار برد. گزینههایی که برای هر پیشوند معانی جداگانهای به خود نمیگیرند - مانند -i - را میتوان تحت هر یک از پیشوندها گروهبندی کرد. بنابراین، به عنوان مثال «+M -i» را میتوان بهصورت «+Mi» بیان کرد و این گروه همان معنای گزینههای جداگانه را دارد. هنگامی که یک یا چند گزینه در گروه تحت پیشوندهای مختلف معانی متفاوتی دارند - مانند +|-M - مراقب گروهبندی پیشوندها باشید؛ عبارت «-iM» همان درخواست «-i +M» نیست. در صورت تردید، از گزینههای جداگانه با پیشوندهای مناسب استفاده کنید.
- -? -h
- این دو گزینه معادل، یک خروجی راهنما و نحوه استفاده (usage) را انتخاب میکنند. Lsof هنگامی که خطایی در گزینههای ارائهشده به آن شناسایی کند، پس از نمایش پیامهای توضیحدهنده هر خطا، شکل کوتاهشدهای از این خروجی را نمایش میدهد. (کاراکتر «?» را طبق نیاز پوسته خود اسکیپ کنید.)
- -a
- همانطور که در بالا توضیح داده شد، باعث میشود گزینههای انتخاب فهرست با یکدیگر AND شوند.
- -A A
- روی سیستمهای پیکربندیشده برای AFS که کد کرنل AFS آنها از طریق ماژولهای پویا پیادهسازی شده، در دسترس است. این گزینه به کاربر lsof امکان میدهد تا A را به عنوان یک فایل جایگزین فهرست نامها (name list file) تعیین کند که ممکن است آدرسهای کرنل ماژولهای پویا در آن یافت شوند. برای اطلاعات بیشتر درباره ماژولهای پویا، نمادهای آنها و نحوه تأثیرگذاری آنها بر lsof، به FAQ نرمافزار lsof (بخش FAQ مکان آن را مشخص میکند) مراجعه کنید.
- -b
- باعث میشود lsof از توابع کرنل که ممکن است مسدودکننده (blocking) باشند اجتناب کند - lstat(2)، readlink(2) و stat(2).
- برای اطلاعات درباره استفاده از این گزینه، بخشهای BLOCKS AND TIMEOUTS و AVOIDING KERNEL BLOCKS را ببینید.
- -c c
- فهرست کردن فایلها را برای فرایندهایی که دستوری را اجرا میکنند که با کاراکترهای c شروع میشود، انتخاب میکند. میتوان چندین دستور را با استفاده از چند گزینه -c تعیین کرد. آنها قبل از شرکت در انتخاب با گزینه AND، در یک مجموعه OR منفرد ترکیب میشوند.
- اگر c با یک «^» آغاز شود، کاراکترهای بعدی نام دستوری را مشخص میکنند که فرایندهای آن باید نادیده گرفته شوند (مستثنی شوند).
- اگر c با یک اسلش ('/') آغاز و پایان یابد، نویسههای بین اسلشها به عنوان یک عبارت باقاعده (regular expression) تفسیر میشوند. فراکاراکترهای پوسته (shell meta-characters) در عبارت باقاعده باید نقلقول شوند تا از تفسیر آنها توسط پوسته جلوگیری شود. پس از اسلش پایانی میتوان این اصلاحکنندهها را قرار داد:
-
b عبارت باقاعده از نوع پایه (basic) است. i بزرگی و کوچکی حروف نادیده گرفته شود. x عبارت باقاعده از نوع توسعهیافته (extended) است (پیشفرض).
- برای اطلاعات بیشتر درباره عبارتهای باقاعده پایه و توسعهیافته، به FAQ نرمزار lsof (بخش FAQ مکان آن را مشخص میکند) مراجعه کنید.
- ابتدا مشخصه دستور ساده آزمایش میشود. اگر آن آزمایش ناموفق باشد، عبارت باقاعده دستور اعمال میشود. اگر آزمایش دستور ساده موفقیتآمیز باشد، آزمایش عبارت باقاعده دستور انجام نمیشود. این امر ممکن است در صورت تعیین گزینه -V دستور lsof منجر به پیامهای «no command found for regex:» شود.
- +c w
- حداکثر تعداد کاراکترهای اولیه نام دستور یونیکس ارائهشده توسط لهجه یونیکس و مرتبط با یک فرایند را برای چاپ در ستون COMMAND مشخص میکند. (مقدار پیشفرض lsof نه کاراکتر است.)
- توجه داشته باشید که بسیاری از لهجههای یونیکس تمامی کاراکترهای نام دستور را در فایلها و ساختارهایی که lsof نام دستور را از آنها به دست میآورد، به lsof ارائه نمیدهند. اغلب لهجهها تعداد کاراکترهای ارائهشده در آن منابع را محدود میکنند. برای مثال، لینوکس 2.4.27 و سولاریس 9 هر دو طول نام دستور را به ۱۶ کاراکتر محدود میکنند.
- اگر w برابر صفر ('0') باشد، تمام نویسههای دستور که از سوی نگارش یونیکس به lsof ارائه شدهاند چاپ خواهند شد.
- اگر w از طول عنوان ستون، یعنی "COMMAND" کمتر باشد، به همان میزان افزایش خواهد یافت.
- -C
- گزارشدهی هرگونه از بخشهای نام مسیر از حافظه موقت نام هسته (kernel's name cache) را غیرفعال میکند. برای اطلاعات بیشتر بخش KERNEL NAME CACHE را ببینید.
- +d s
- باعث میشود lsof برای تمام نمونههای باز از دایرکتوری s و فایلها و دایرکتوریهای موجود در بالاترین سطح آن جستجو کند. +d درخت دایرکتوری با ریشه s را پیمایش نمیکند (به زیرشاخهها وارد نمیشود). میتوان از گزینه +D D برای درخواست جستجوی پیمایش کامل درخت دایرکتوری با ریشه D استفاده کرد.
- پردازش گزینه +d پیوندهای نمادین داخل s را دنبال نمیکند مگر اینکه گزینه -x یا -x l نیز مشخص شده باشد. همچنین در نقاط اتصال سیستم فایل روی زیردایرکتوریهای s به دنبال فایلهای باز نمیگردد مگر اینکه گزینه -x یا -x f نیز مشخص شده باشد.
- نکته: اختیارات کاربری که از این گزینه استفاده میکند، جستجو را به فایلهایی محدود میسازد که کاربر مجوز بررسی آنها را با تابع سیستمی stat(2) داشته باشد.
- -d s
- فهرستی از توصیفکنندههای فایل (FDها) را برای مستثنی کردن یا گنجاندن در فهرست خروجی مشخص میکند. توصیفکنندههای فایل در مجموعه جداشده با کامای s مشخص میشوند - مانند "cwd,1,3"، "^6,^2". (نباید هیچ فاصلهای در مجموعه وجود داشته باشد.)
- اگر تمام ورودیهای مجموعه با `^` شروع شوند، فهرست از نوع استثنا (exclusion) خواهد بود. اگر هیچ ورودی با `^` شروع نشود، فهرست از نوع گنجاندن (inclusion) است. فهرستهای ترکیبی مجاز نیستند.
- محدودهای از شمارههای توصیفکننده فایل میتواند در مجموعه باشد به شرطی که هیچ عضوی خالی نباشد، هر دو عضو عدد باشند و عضو پایانی بزرگتر از عضو آغازین باشد - مانند "0-7" یا "3-10". محدودهها در صورتی که پیشوند `^` داشته باشند میتوانند برای استثنا کردن مشخص شوند - مانند "^0-7" که تمام توصیفکنندههای فایل 0 تا 7 را مستثنی میکند.
- چندین شماره توصیفکننده فایل پیش از شرکت در انتخاب گزینههای منطقی AND، در یک مجموعه با منطق OR ادغام میشوند.
- هنگامی که اعضای استثنا و گنجاندن به طور همزمان در مجموعه وجود داشته باشند، lsof آنها را به عنوان خطا گزارش کرده و با کد بازگشتی غیرصفر خارج میشود.
- برای اطلاعات بیشتر درباره نامهای توصیفکننده فایل، توضیحات مقادیر خروجی توصیفکننده فایل (FD) را در بخش OUTPUT ببینید.
- fd یک نام شبهتوصیفکننده فایل برای مشخص کردن کل محدوده شمارههای ممکن توصیفکننده فایل است. fd در ستون FD خروجی ظاهر نمیشود.
- +D D
- باعث میشود lsof برای تمام نمونههای باز از دایرکتوری D و تمام فایلها و دایرکتوریهای موجود در آن تا عمق کامل جستجو کند.
- پردازش گزینه +D پیوندهای نمادین داخل D را دنبال نمیکند مگر اینکه گزینه -x یا -x l نیز مشخص شده باشد. همچنین در نقاط اتصال سیستم فایل روی زیردایرکتوریهای D به دنبال فایلهای باز نمیگردد مگر اینکه گزینه -x یا -x f نیز مشخص شده باشد.
- نکته: اختیارات کاربری که از این گزینه استفاده میکند، جستجو را به فایلهایی محدود میسازد که کاربر مجوز بررسی آنها را با تابع سیستمی stat(2) داشته باشد.
- نکته بیشتر: lsof ممکن است این گزینه را به کندی پردازش کند و برای انجام آن به مقدار زیادی حافظه پویا نیاز داشته باشد. زیرا باید کل درخت دایرکتوری با ریشه D را پیمایش کند، تابع stat(2) را برای هر فایل و دایرکتوری فراخوانی کند، فهرستی از تمام فایلهای یافتهشده بسازد، و آن فهرست را برای تطابق با تکتک فایلهای باز جستجو کند. هنگامی که دایرکتوری D بزرگ باشد، این مراحل میتوانند زمان زیادی ببرند، بنابراین از این گزینه با احتیاط استفاده کنید.
- -D D
- استفاده lsof از فایل حافظه موقت دستگاه (device cache file) را هدایت میکند. استفاده از این گزینه گاهی محدود است. برای اطلاعات بیشتر درباره این گزینه، بخش DEVICE CACHE FILE و بخشهای پس از آن را ببینید.
- -D باید با یک حرف عملکرد (function letter) همراه باشد؛ این حرف عملکرد میتواند اختیاری با یک نام مسیر دنبال شود. Lsof این حروف عملکرد را شناسایی میکند:
-
? - گزارش مسیرهای فایل حافظه موقت دستگاه b - ساخت فایل حافظه موقت دستگاه i - نادیده گرفتن فایل حافظه موقت دستگاه r - خواندن فایل حافظه موقت دستگاه u - خواندن و بهروزرسانی فایل حافظه موقت دستگاه
- عملکردهای b، r و u به همراه نام مسیر، گاهی محدود هستند. هنگامی که این عملکردها محدود باشند، در توضیحات گزینه -D که همراه با خروجی گزینههای -h یا -? میآید ظاهر نخواهند شد. برای اطلاعات بیشتر درباره این عملکردها و زمان محدود بودن آنها، بخش DEVICE CACHE FILE و بخشهای پس از آن را ببینید.
- عملکرد ? مسیرهای فقطخواندنی و قابلنوشتن را که lsof میتواند برای فایل حافظه موقت دستگاه استفاده کند، نام متغیرهای محیطی که مقادیرشان توسط lsof هنگام تشکیل مسیر فایل حافظه موقت دستگاه بررسی میشود، و قالب مسیر فایل حافظه موقت دستگاه شخصی را گزارش میدهد. (نویسه `?` را بر اساس نیاز شل خود اسکیپ کنید.)
- در صورت در دسترس بودن، عملکردهای b، r و u میتوانند با مسیر فایل حافظه موقت دستگاه دنبال شوند. پیشفرض استاندارد .lsof_hostname در دایرکتوری خانگی شناسه کاربری واقعی که lsof را اجرا میکند است، اما این مقدار ممکن است هنگام پیکربندی و کامپایل lsof تغییر یافته باشد. (خروجی گزینههای -h و -? پیشوند پیشفرض فعلی را نشان میدهند - مانند ".lsof".) پسوند hostname اولین بخش از نام میزبان است که توسط gethostname(2) برگردانده میشود.
- در صورت در دسترس بودن، عملکرد b به lsof دستور میدهد تا یک فایل حافظه موقت دستگاه جدید در مسیر پیشفرض یا مشخصشده بسازد.
- عملکرد i به lsof دستور میدهد تا فایل حافظه موقت دستگاه پیشفرض را نادیده بگیرد و اطلاعات مربوط به دستگاهها را از طریق فراخوانیهای مستقیم به هسته به دست آورد.
- عملکرد r به lsof دستور میدهد تا حافظه موقت دستگاه را در مسیر پیشفرض یا مشخصشده بخواند، اما در صورتی که فایلی وجود نداشته باشد یا فایل موجود ساختار نادرستی داشته باشد، از ایجاد یک فایل حافظه موقت دستگاه جدید جلوگیری میکند. عملکرد r هنگامی که بدون نام مسیر مشخص شود، از بهروزرسانی فایل حافظه موقت نادرست یا قدیمی توسط lsof یا ساخت فایل جدید به جای آن جلوگیری میکند. عملکرد r هنگامی که بدون آرگومان نام مسیر مشخص شود همیشه در دسترس است؛ این عملکرد ممکن است توسط مجوزهای فرآیند lsof محدود شود.
- در صورت در دسترس بودن، عملکرد u به lsof دستور میدهد تا در صورت امکان فایل حافظه موقت دستگاه را در مسیر پیشفرض یا مشخصشده بخواند، و در صورت لزوم آن را بازسازی کند. این عملکرد، عملکرد پیشفرض فایل حافظه موقت دستگاه در زمانی است که هیچ گزینه -D مشخص نشده باشد.
- +|-e s
- سیستم فایلی را که نام مسیر آن s است، از قرار گرفتن در معرض فراخوانیهای توابع هسته که ممکن است مسدودکننده (blocking) باشند معاف میکند. گزینه +e فراخوانیهای توابع هسته stat(2)، lstat(2) و بیشتر فراخوانیهای readlink(2) را معاف میسازد. گزینه -e تنها فراخوانیهای توابع هسته stat(2) و lstat(2) را معاف میکند. میتوان چندین سیستم فایل را با مشخصکنندههای جداگانه +|-e تعیین کرد و هر کدام میتوانند فراخوانیهای readlink(2) معافشده داشته باشند یا خیر.
- این گزینه در حال حاضر فقط برای لینوکس پیادهسازی شده است.
- هشدار: این گزینه به سادگی ممکن است به اشتباه روی سیستم فایلی غیر از سیستم فایل مورد نظر اعمال شود، زیرا از نام مسیر به جای شمارههای قابلاعتمادتر دستگاه و inode استفاده میکند. (شمارههای دستگاه و inode از طریق فراخوانی بالقوه مسدودکننده هسته stat(2) به دست میآیند و بنابراین در دسترس نیستند، اما گزینه +|-m m را به عنوان یک راهکار جایگزین ممکن برای ارائه شمارههای دستگاه ببینید.) از این گزینه با احتیاط بسیار استفاده کنید و نام مسیر سیستم فایل مورد نظر برای معافیت را به طور کامل مشخص نمایید.
- هنگامی که فایلهای باز روی سیستمهای فایل معافشده گزارش میشوند، ممکن است دریافت تمام اطلاعات آنها امکانپذیر نباشد. بنابراین، برخی ستونهای اطلاعاتی خالی خواهند بود، نویسههای "UNKN" در ابتدای مقادیر ستون TYPE قرار میگیرند، و گزینه معافیت مربوطه داخل پرانتز به انتهای ستون NAME اضافه میشود. (برخی اطلاعات شماره دستگاه ممکن است از طریق گزینه +|-m m در دسترس قرار گیرند.)
- +|-E
- +E مشخص میکند که pipe لینوکس، UNIX socket لینوکس، INET(6) socket لینوکس بسته شده در میزبان محلی، فایلهای pseudoterminal لینوکس، پیادهسازی POSIX Message Queue در لینوکس، و eventfd لینوکس باید همراه با اطلاعات نقطه پایانی (endpoint) نمایش داده شوند و فایلهای نقاط پایانی نیز باید نمایش یابند.
- نکته ۱: اطلاعات نقطه پایانی فایل UNIX socket تنها زمانی در دسترس است که خط قابلیتهای فعال در خروجی -v شامل uxsockept باشد، و اطلاعات نقطه پایانی pseudoterminal تنها زمانی در دسترس است که خط قابلیتهای فعال شامل ptyept باشد.
- نکته ۲: اطلاعات نقطه پایانی فایل POSIX Message Queue تنها زمانی در دسترس است که سیستم فایل mqueue سوار (mount) شده باشد.
- اطلاعات نقطه پایانی pipe در ستون NAME به شکل "PID,cmd,FDmode" نمایش داده میشود، که در آن PID شناسه فرآیند نقطه پایانی است؛ cmd دستور فرآیند نقطه پایانی است؛ FD توصیفکننده فایل نقطه پایانی است؛ و mode حالت دسترسی فایل نقطه پایانی است.
- اطلاعات نقطه پایانی Pseudoterminal در ستون NAME به صورت "->/dev/ptsmin PID,cmd,FDmode" یا "PID,cmd,FDmode" نمایش داده میشود. شکل نخست برای یک دستگاه master و شکل دوم برای یک دستگاه slave است. min شماره دستگاه فرعی (minor device number) یک دستگاه slave است؛ و PID, cmd, FD و mode مشابه اطلاعات نقطه پایانی pipe هستند. نکته: اطلاعات نقطه پایانی pseudoterminal تنها زمانی در دسترس است که خط قابلیتهای فعال در خروجی -v شامل ptyept باشد. علاوه بر این، این قابلیت روی هستههای لینوکس بالاتر از 4.13.0 کار میکند.
- اطلاعات
نقطه
پایانی
فایل UNIX socket در
ستون NAME به
شکل
"type=TYPE ->INO=INODE PID,cmd,FDmode"، که در آن TYPE نوع سوکت است؛ INODE شماره i-node سوکت متصلشده است؛ و PID, cmd, FD و mode مشابه اطلاعات نقطه پایانی pipe هستند. نکته: اطلاعات نقطه پایانی فایل UNIX socket تنها زمانی در دسترس است که خط قابلیتهای فعال در خروجی -v شامل uxsockept باشد. - اطلاعات
نقطه
پایانی (endpoint)
فایل سوکت INET
به مقدار
موجود در
ستون NAME با
قالب
`` -> PID,cmd,FDmode'' درج میشود، که در آن PID, cmd, FD و mode مشابه اطلاعات نقطه پایانی پایپ هستند. اطلاعات نقطه پایانی تنها زمانی در دسترس است که سوکت برای IPC محلی استفاده شود؛ هر دو نقطه پایانی به یک آدرس محلی IPv4 یا IPv6 متصل (bind) شده باشند. - اطلاعات نقطه پایانی فایل صف پیام POSIX در ستون NAME با همان قالب پایپ نمایش داده میشود.
- اطلاعات نقطه پایانی eventfd در ستون NAME با همان قالب پایپ نمایش داده میشود. این ویژگی در هستههای لینوکس بالاتر از 5.2.0 کار میکند.
- چندین مورد از این اطلاعات میتواند در ستون NAME یک فایل ظاهر شود.
- -E مشخص میکند که فایلهای پشتیبانیشده از نقطه پایانی باید به همراه اطلاعات نقطه پایانی نمایش داده شوند، اما نه فایلهای مربوط به خود نقاط پایانی.
- +|-f [cfgGn]
- حرف f بهتنهایی نحوه تفسیر آرگومانهای نام مسیر را مشخص میکند. هنگامی که با c، f، g، G یا n در هر ترکیبی همراه شود، مشخص میکند که فهرستکردن اطلاعات ساختار فایل هسته فعال شود (`+') یا غیرفعال گردد (`-').
- بهطور معمول یک آرگومان نام مسیر به عنوان نام سیستمفایل در نظر گرفته میشود اگر با نام دایرکتوری مانتشده گزارششده توسط mount(8) مطابقت داشته باشد، یا اگر یک دستگاه بلوکی را نشان دهد که در خروجی mount نام برده شده و به یک نام دایرکتوری مانتشده مرتبط باشد. هنگامی که +f مشخص شود، تمام آرگومانهای نام مسیر به عنوان نام سیستمفایل در نظر گرفته میشوند و lsof در صورت عدم تطابق هر یک از آنها خطا اعلام خواهد کرد. این میتواند مفید باشد، برای مثال زمانی که نام سیستمفایل (دستگاه مانتشده) یک دستگاه بلوکی نباشد. این حالت برای برخی سیستمفایلهای CD-ROM رخ میدهد.
- هنگامی که -f بهتنهایی مشخص شود، تمام آرگومانهای نام مسیر به عنوان فایلهای ساده در نظر گرفته میشوند. بنابراین، برای مثال، آرگومانهای ``-f -- /'' به lsof دستور میدهند تا به دنبال فایلهای باز با نام مسیر `/' بگردد، نه تمام فایلهای باز در سیستمفایل `/' (ریشه).
- دقت کنید که +f و -f بهدرستی خاتمه یافته باشند و بعد از آنها کاراکتری (مثلاً از نام فایل یا سیستمفایل) قرار نگیرد که ممکن است به عنوان پارامتر در نظر گرفته شود. برای مثال، پس از +f و -f همانند این مثالها از ``--'' استفاده کنید.
-
$ lsof +f -- /file/system/name $ lsof -f -- /file/name
- فهرست کردن اطلاعات از ساختارهای فایل هسته که با قالب گزینه +f [cfgGn] درخواست میشود، بهطور معمول غیرفعال است و به صورت کامل یا جزئی برای برخی نسخهها در دسترس نیست - برای مثال، هستههای لینوکس مبتنی بر /proc پایینتر از 2.6.22. هنگامی که پیشوند f علامت مثبت (`+') باشد، این کاراکترها اطلاعات ساختار فایل را درخواست میکنند:
-
c تعداد استفاده از ساختار فایل (بهجز لینوکس) f آدرس ساختار فایل (بهجز لینوکس) g اختصارات پرچمهای فایل (لینوکس 2.6.22 به بالا) Abbrev. Flag in C code (see open(2)) W O_WRONLY RW O_RDWR CR O_CREAT EXCL O_EXCL NTTY O_NOCTTY TR O_TRUNC AP O_APPEND ND O_NDELAY SYN O_SYNC ASYN O_ASYNC DIR O_DIRECT DTY O_DIRECTORY NFLK O_NOFOLLOW NATM O_NOATIME DSYN O_DSYNC RSYN O_RSYNC LG O_LARGEFILE CX O_CLOEXEC TMPF O_TMPFILE G پرچمهای فایل در مبنای شانزده (لینوکس 2.6.22 به بالا) n آدرس گره ساختار فایل (بهجز لینوکس)
- هنگامی که پیشوند منفی (`-') باشد، همین کاراکترها نمایش مقادیر مشخصشده را غیرفعال میکنند.
- آدرسهای ساختار فایل، شمارندههای استفاده، پرچمها و آدرسهای گره ممکن است برای تشخیص آسانتر فایلهای یکسان به ارث رسیده توسط فرآیندهای فرزند و فایلهای یکسان مورد استفاده توسط فرآیندهای مختلف استفاده شوند. خروجی ستونی lsof میتواند بر اساس ستونهای خروجی شامل این مقادیر مرتبسازی و فهرست شود تا استفاده از فایلهای یکسان شناسایی گردد، یا خروجی فیلدی lsof میتواند توسط یک اسکریپت فیلتر پسپردازش AWK یا Perl، یا توسط یک برنامه C تجزیه شود.
- -F f
- فهرستی از کاراکترها را مشخص میکند، f، که فیلدهای خروجی را جهت پردازش توسط برنامهای دیگر، و کاراکتری که هر فیلد خروجی را خاتمه میدهد، تعیین میکند. هر فیلدی که قرار است در خروجی قرار گیرد با یک کاراکتر تکی در f مشخص میشود. پایاندهنده فیلد بهطور پیشفرض NL است، اما میتواند به NUL (000) تغییر یابد. برای توضیحات کاراکترهای شناسایی فیلد و فرآیند خروجی فیلد، بخش OUTPUT FOR OTHER PROGRAMS را مشاهده کنید.
- هنگامی که فهرست کاراکترهای انتخاب فیلد خالی باشد، تمام فیلدهای استاندارد انتخاب میشوند (به جز فیلد دستگاه خام، بافت امنیتی و فیلد منطقه به دلایل سازگاری) و از پایاندهنده فیلد NL استفاده میشود.
- هنگامی که فهرست کاراکترهای انتخاب فیلد فقط شامل یک صفر (`0') باشد، تمام فیلدها انتخاب میشوند (به جز فیلد دستگاه خام به دلایل سازگاری) و از کاراکتر پایاندهنده NUL استفاده میشود.
- سایر ترکیبات فیلدها و کاراکتر پایاندهنده فیلد مرتبط با آنها باید با ورودیهای صریح در f تنظیم شوند، همانطور که در بخش OUTPUT FOR OTHER PROGRAMS شرح داده شده است.
- هنگامی که یک کاراکتر انتخاب فیلد، موردی را مشخص کند که lsof بهطور معمول فهرست نمیکند - مانند PPID که با -R انتخاب میشود - مشخص کردن کاراکتر فیلد - مانند ``-FR'' - نیز فهرستکردن آن مورد را انتخاب میکند.
- هنگامی که فهرست کاراکترهای انتخاب فیلد حاوی کاراکتر تکی `?' باشد، lsof یک فهرست راهنما از کاراکترهای شناسایی فیلد را نمایش میدهد. (کاراکتر `?' را بر اساس نیاز پوسته خود با گریز/escape مشخص کنید.)
- -g [s]
- فهرست کردن فایلها را برای فرآیندهایی که شمارههای شناسایی گروه فرآیند (PGID) اختیاری آنها در مجموعه جداشده با ویرگولِ s قرار دارد، مستثنی یا انتخاب میکند - برای مثال، ``123'' یا ``123,^456''. (نباید هیچ فاصلهای در مجموعه وجود داشته باشد.)
- شمارههای PGID که با `^' (نفی) شروع میشوند نشاندهنده موارد استثنا هستند.
- چندین شماره PGID قبل از شرکت در گزینش AND، در یک مجموعه واحد با عملگر OR ترکیب میشوند. با این حال، استثنائات PGID بدون OR یا AND اعمال شده و قبل از اعمال سایر معیارهای انتخاب اثر میکنند.
- گزینه -g همچنین نمایش شمارههای PGID را در خروجی فعال میکند. هنگامی که بدون مجموعهای از PGID مشخص شود، تنها همین کار را انجام میدهد.
- -H
- به lsof دستور میدهد اندازهها را به شکل خوانا برای انسان چاپ کند، مثلاً 123.4K 456.7M.
- -J
- حالت خروجی JSON را انتخاب میکند. به جای خروجی سنتی جدولی یا خروجی فیلدی -F، دستور lsof یک شیء JSON واحد را در خروجی استاندارد تولید میکند که شامل یک آرایه processes است. هر شیء فرآیند شامل فیلدهای مربوط به خود و یک آرایه files از مدخلهای فایلهای باز است.
- انتخاب فیلد از همان قوانین -F پیروی میکند: از -F با کاراکترهای فیلد استفاده کنید تا مشخص شود کدام فیلدها در خروجی JSON ظاهر شوند. بدون -F، مجموعه فیلدهای پیشفرض استفاده میشود.
- گزینه -J با -j و -t مانعةالجمع است. هشدارها و خطاها به stderr ارسال میشوند؛ خروجی استاندارد همیشه یک JSON معتبر است (بخش یادداشت کدگذاری نویسهها در زیر را ببینید).
- -j
- حالت خروجی JSON Lines را انتخاب میکند. هر فایل باز یک شیء JSON در هر خط تولید میکند، که فیلدهای فرآیند و فایل را در یک رکورد غیرنرمالشده واحد ترکیب میکند. این قالب برای خطوط لوله جریانی، دریافت لاگها (Splunk، Datadog، Elastic) و ابزارهای خطمحور مناسب است.
- انتخاب فیلد از همان قوانین -J پیروی میکند.
- گزینه -j با -J و -t مانعةالجمع است.
- یادداشت کدگذاری نویسهها: استاندارد JSON (RFC 8259) الزامی میکند که رشتهها UTF-8 معتبر باشند. با این حال، نامهای فایل در سیستمهای شبهیونیکس توالیهای دلخواهی از بایتها هستند و ممکن است حاوی بایتهایی باشند که UTF-8 معتبر نیستند. هنگامی که چنین بایتهایی ظاهر شوند، lsof آنها را بدون تغییر به خروجی منتقل میکند. این بدان معناست که خروجی کاملاً منطبق بر استاندارد JSON نیست، اما نام اصلی فایل قابل بازیابی است. این رفتار با عملکرد lsfd(1)، ip(8) (-j) و سایر ابزارهای لینوکس که خروجی JSON تولید میکنند، سازگار است. مصرفکنندگانی که نیازمند انطباق دقیق با RFC 8259 هستند باید این مقادیر را فیلتر یا مجدداً کدگذاری کنند (مثلاً با استفاده از iconv(1) یا گرداننده خطای surrogateescape در پایتون).
- -i [i]
- فهرست کردن فایلهایی را انتخاب میکند که آدرس اینترنتی هر یک از آنها با آدرس مشخصشده در i مطابقت داشته باشد. اگر هیچ آدرسی مشخص نشود، این گزینه فهرست کردن تمام فایلهای شبکه اینترنت و x.25 (در HP-UX) را انتخاب میکند.
- اگر -i4 یا -i6 بدون آدرس بعدی مشخص شود، تنها فایلهای مربوط به نسخه IP مشخصشده، یعنی IPv4 یا IPv6، نمایش داده میشوند. (تعیین IPv6 تنها در صورتی قابل استفاده است که نسخه سیستمعامل از IPv6 پشتیبانی کند، همانطور که با ``[46]'' و ``IPv[46]'' در خروجی -h یا -? دستور lsof مشخص شده است.) مشخص کردن متوالی -i4 به دنبال -i6 همانند مشخص کردن -i است و برعکس. مشخص کردن -i4 یا -i6 پس از -i همانند مشخص کردن -i4 یا -i6 بهتنهایی است.
- چندین آدرس (حداکثر تا ۱۰۰ مورد) را میتوان با چندین گزینه -i مشخص کرد. (محدوده شماره پورت یا نام سرویس به عنوان یک آدرس محاسبه میشود.) آنها قبل از شرکت در گزینش شرط AND، در یک مجموعه واحد با عملگر OR ترکیب میشوند.
- یک آدرس اینترنتی به این فرمت مشخص میشود (موارد درون قلاب اختیاری هستند):
-
[46][protocol][@hostname|hostaddr][:service|port]
- که در آن:
46 نسخه IP (IPv4 یا IPv6) که برای آدرس بعدی اعمال میشود را مشخص میکند. '6' تنها در صورتی میتواند مشخص شود که سیستمیونیکس از IPv6 پشتیبانی کند. اگر هیچکدام از '4' یا '6' مشخص نشود، آدرس زیر برای تمام نسخههای IP اعمال میگردد. protocol نام پروتکل است - TCP، UDP یا UDPLITE. hostname نام میزبان اینترنتی است. مگر اینکه یک نسخه خاص IP مشخص شده باشد، فایلهای شبکه باز مرتبط با نامهای میزبان در تمام نسخهها انتخاب خواهند شد. hostaddr یک آدرس اینترنتی عددی IPv4 به فرمت نقطهدار است؛ یا یک آدرس عددی IPv6 به فرمت دونقطه، محصور در قلاب، در صورتی که سیستمیونیکس از IPv6 پشتیبانی کند. هنگامی که یک نسخه IP انتخاب شود، فقط آدرسهای عددی همان نسخه میتوانند مشخص شوند. service نامی از /etc/services است - مانند smtp - یا فهرستی از آنها. port شماره پورت یا فهرستی از آنها است.
- گزینههای IPv6 تنها زمانی قابل استفاده هستند که گویش یونیکس از IPv6 پشتیبانی کند. برای بررسی اینکه آیا این گویش از IPv6 پشتیبانی میکند، lsof را با گزینه -h یا -? (راهنما) اجرا کنید. اگر توضیحات نمایشدادهشده برای گزینه -i حاوی «[46]» و «IPv[46]» باشد، IPv6 پشتیبانی میشود.
- اگر انتخاب فایل شبکه با -i 6 به IPv6 محدود شده باشد، نامهای میزبان و آدرسهای IPv4 را نمیتوان مشخص کرد. اگر انتخاب فایل شبکه با -i 4 به IPv4 محدود شده باشد، نامهای میزبان و آدرسهای IPv6 را نمیتوان مشخص کرد. هنگامی که آدرس یک فایل شبکه باز IPv4 در یک آدرس IPv6 نگاشت شده باشد، نوع فایل باز IPv6 خواهد بود نه IPv4، و نمایش آن با «6» انتخاب میشود نه «4».
- حداقل یکی از مولفههای آدرس - 4، 6، protocol، hostname، hostaddr، یا service - باید مشخص شود. نویسه «@» در ابتدای مشخصات میزبان همیشه الزامی است؛ همانطور که «:» در ابتدای مشخصات پورت الزامی است. یا hostname یا hostaddr را مشخص کنید. یا فهرست نامهای service یا فهرست شمارههای port را تعیین کنید. اگر فهرستی از نامهای service مشخص شده باشد، در صورتی که شماره پورتهای TCP، UDP و UDPLITE برای آن نام سرویس متفاوت باشند، ممکن است نیاز به تعیین protocol نیز باشد. برای protocol میتوان از هر حالتی - حروف کوچک یا بزرگ - استفاده کرد.
- نامهای Service و شمارههای port را میتوان در فهرستی ترکیب کرد که ورودیهای آن با کاما و ورودیهای محدوده عددی با علامت منفی از هم جدا میشوند. نباید هیچ فاصله خالی بین موارد وجود داشته باشد و تمام نامهای سرویس باید متعلق به protocol مشخصشده باشند. از آنجا که نامهای سرویس ممکن است حاوی علامت منفی باشند، ورودی شروع یک محدوده نمیتواند نام سرویس باشد؛ با این حال میتواند یک شماره پورت باشد.
- چند نمونه
آدرس:
-i6 - فقط IPv6 TCP:25 - پروتکل TCP و پورت 25 @1.2.3.4 - آدرس میزبان IPv4 اینترنتی 1.2.3.4 @[3ffe:1ebc::1]:1234 - آدرس میزبان IPv6 اینترنتی 3ffe:1ebc::1، پورت 1234 UDP:who - پورت سرویس who روی UDP TCP@lsof.itap:513 - پروتکل TCP، پورت 513 و نام میزبان lsof.itap tcp@foo:1-10,smtp,99 - پروتکل TCP، پورتهای 1 تا 10، نام سرویس smtp، پورت 99، نام میزبان foo tcp@bar:1-smtp - پروتکل TCP، پورتهای 1 تا smtp، میزبان bar :time - پورت سرویس زمان روی TCP، UDP یا UDPLITE
- -K k
- در گویشهایی که از گزارش تسکها (نخها) پشتیبانی میشود، فهرست کردن تسکها (نخها)ی فرآیندها را انتخاب میکند. (اگر خروجی راهنما - یعنی خروجی گزینههای -h یا -? - این گزینه را نشان دهد، گزارش تسک (نخ) توسط گویش پشتیبانی میشود.)
- اگر پس از -K مقداری برای k آورده شود، این مقدار باید «i» باشد. این کار باعث میشود lsof تسکها را نادیده بگیرد، بهویژه در حالت پیشفرض فهرست کردن همه چیز، زمانی که هیچ گزینه دیگری مشخص نشده است.
- در لینوکس هنگامی که هم -K و هم -a مشخص شوند و تسکهای یک فرآیند اصلی با گزینههای دیگر انتخاب شده باشند، فرآیند اصلی نیز بهگونهای فهرست میشود که گویی یک تسک است، اما بدون شناسه تسک. (توضیحات ستون TID را در بخش OUTPUT ببینید.)
- در نسخههایی از FreeBSD که از نخها پشتیبانی میکنند، همه نخها همراه با شناسه (ID) خود فهرست خواهند شد.
- بهطور کلی نخها و تسکها فایلهای فراخواننده را به ارث میبرند، اما ممکن است برخی را ببندند و فایلهای دیگری را باز کنند؛ بنابراین lsof همیشه تمامی فایلهای باز نخها و تسکها را گزارش میدهد.
- -k k
- یک فایل فهرست نام هسته، k، را به جای /vmunix، /mach و غیره مشخص میکند. -k در AIX روی IBM RISC/System 6000 در دسترس نیست.
- -l
- از تبدیل شماره شناسههای کاربری به نامهای کاربری لاگین جلوگیری میکند. این گزینه همچنین زمانی که جستجوی نام کاربری به درستی یا با کندی انجام میشود مفید است.
- +|-L [l]
- فهرست کردن تعداد پیوندها (link count) برای فایلها را در صورت وجود فعال («+») یا غیرفعال («-») میکند - به عنوان مثال، این تعداد برای سوکتها یا بیشتر FIFOها و pipeها در دسترس نیست.
- هنگامی که +L بدون عدد پس از آن مشخص شود، تعداد تمام پیوندها فهرست میشود. هنگامی که -L مشخص شود (حالت پیشفرض)، هیچ تعداد پیوندی فهرست نخواهد شد.
- هنگامی که پس از +L عددی بیاید، تنها فایلهایی که تعداد پیوند آنها کمتر از آن عدد باشد فهرست میشوند. (هیچ عددی نباید پس از -L بیاید.) تعیین به صورت «+L1» فایلهای بازی را انتخاب میکند که پیوند آنها حذف شده است (unlinked). تعیین به صورت «+aL1 <file_system>» فایلهای باز حذفشده (unlinked) را در سیستم فایل مشخصشده انتخاب میکند.
- برای سایر مقایسههای تعداد پیوند، از خروجی فیلدی (-F) و یک اسکریپت یا برنامه پسپردازش استفاده کنید.
- +|-m m
- یک فایل حافظه هسته جایگزین را مشخص میکند یا پردازش مکمل جدول سوار کردن (mount) را فعال میسازد.
- شکل گزینه -m m یک فایل حافظه هسته، m، را به جای /dev/kmem یا /dev/mem مشخص میکند - مانند یک فایل crash dump.
- شکل گزینه +m درخواست میکند که یک فایل مکمل mount در فایل خروجی استاندارد نوشته شود. تمام گزینههای دیگر بدون هیچ پیامی نادیده گرفته میشوند.
- برای هر سیستم فایل سوارشده، یک خط در فایل مکمل mount وجود خواهد داشت که شامل دایرکتوری سیستم فایل سوارشده، به دنبال آن یک فاصله، و سپس شماره دستگاه در قالب هگزادسیمال «0x» است - مانند:
-
/ 0x801
- دستور Lsof میتواند از فایل مکمل mount برای بهدست آوردن شماره دستگاههای سیستمهای فایل استفاده کند، در صورتی که نتواند آنها را از طریق stat(2) یا lstat(2) بهدست آورد.
- شکل گزینه +m m فایل m را به عنوان یک فایل مکمل mount مشخص میکند.
- نکته: گزینههای +m و +m m برای تمام گویشهای پشتیبانیشده در دسترس نیستند. خروجی گزینههای -h یا -? در lsof را بررسی کنید تا از در دسترس بودن گزینههای +m و +m m اطمینان حاصل کنید.
- +|-M
- گزارش ثبتهای portmapper را برای پورتهای محلی TCP، UDP و UDPLITE در جایی که نگاشت پورت پشتیبانی میشود، فعال (+) یا غیرفعال (-) میکند. (برای اطلاعات در مورد اینکه گزارش ثبت portmapper در کجا پشتیبانی میشود، به آخرین پاراگراف توضیحات این گزینه مراجعه کنید.)
- حالت گزارشدهی پیشفرض توسط سازنده lsof با تعریف HASPMAPENABLED #define در فایل سرآیند machine.h گویش مربوطه تنظیم میشود؛ lsof بهصورت پیشفرض با HASPMAPENABLED غیرفعال توزیع میشود، بنابراین گزارش portmapper به طور پیشفرض غیرفعال است و باید با +M درخواست شود. مشخص کردن گزینه -h یا -? در lsof حالت پیشفرض را گزارش میدهد. غیرفعال کردن ثبت portmapper زمانی که قبلاً غیرفعال بوده، یا فعال کردن آن هنگامی که قبلاً فعال بوده، مجاز است. هنگامی که گزارش ثبت portmapper فعال باشد، lsof ثبت portmapper (در صورت وجود) را برای پورتهای محلی TCP، UDP یا UDPLITE در کروشه بلافاصله پس از شماره پورتها یا نامهای سرویس نمایش میدهد - مانند «:1234[name]» یا «:name[100083]». اطلاعات ثبت ممکن است بر اساس آنچه برنامه ثبتکننده هنگام ثبت پورت به portmapper ارائه داده، نام یا شماره باشد.
- هنگامی که گزارش ثبت portmapper فعال باشد، در صورت شلوغی یا توقف دسترسی به portmapper، ممکن است lsof کمی کندتر اجرا شود یا حتی مسدود گردد. حالت گزارشدهی را معکوس کنید تا متوجه شوید که آیا گزارش ثبت portmapper باعث کندی یا مسدود شدن lsof میشود یا خیر.
- برای اهداف گزارش ثبت portmapper، دستور lsof یک پورت TCP، UDP یا UDPLITE را محلی در نظر میگیرد اگر: در بخش محلی ساختار هسته نگهدارنده آن پیدا شود؛ یا اگر در بخش خارجی (foreign) ساختار هسته نگهدارنده آن قرار داشته باشد و آدرسهای اینترنتی محلی و خارجی یکسان باشند؛ یا اگر در بخش خارجی ساختار هسته نگهدارنده آن قرار داشته باشد و آدرس اینترنتی خارجی INADDR_LOOPBACK (127.0.0.1) باشد. این قاعده ممکن است باعث شود lsof برخی از پورتهای خارجی را در رایانههایی با چند رابط شبکه که آدرس اینترنتی خارجی روی رابط متفاوتی از رابط محلی است، نادیده بگیرد.
- برای توضیحات بیشتر در مورد مسائل گزارش ثبت portmapper، به بخش پرسشهای متداول lsof (محل آن در بخش FAQ آمده است) مراجعه کنید.
- گزارش ثبت portmapper فقط در گویشهایی پشتیبانی میشود که فایلهای سرآیند RPC دارند. (برخی از توزیعهای لینوکس با GlibC 2.14 فاقد آنها هستند.) هنگامی که گزارش ثبت portmapper پشتیبانی شود، خروجی راهنمای -h یا -? گزینه +|-M را نشان میدهد.
- -n
- از تبدیل شمارههای شبکه به نامهای میزبان برای فایلهای شبکه جلوگیری میکند. جلوگیری از این تبدیل ممکن است سرعت اجرای lsof را افزایش دهد. همچنین هنگامی که جستجوی نام میزبان به درستی کار نمیکند، مفید است.
- -N
- فهرست کردن فایلهای NFS را انتخاب میکند.
- -o
- به lsof دستور میدهد که آفست فایل (file offset) را در همه حال نمایش دهد. این کار باعث میشود عنوان ستون خروجی SIZE/OFF به OFFSET تغییر یابد. نکته: در برخی از گویشهای یونیکس، lsof نمیتواند اطلاعات دقیق یا سازگاری از آفست فایل را از منابع داده هسته خود بهدست آورد، که گاهی تنها برای انواع خاصی از فایلها (مانند فایلهای سوکت) است. برای اطلاعات بیشتر به پرسشهای متداول lsof (محل آن در بخش FAQ مشخص شده است) مراجعه کنید.
- گزینههای -o و -s مانعةالجمع هستند؛ هر دو نمیتوانند همزمان مشخص شوند. هنگامی که هیچکدام مشخص نشده باشند، lsof هر مقداری را که - اندازه یا آفست - با نوع فایل متناسب و در دسترس باشد، نمایش میدهد.
- -o o
- تعداد ارقام دهدهی (o) را تعریف میکند که باید بعد از «0t» برای آفست فایل چاپ شوند، پیش از آنکه قالب به «0x...» تغییر کند. مقدار صفر (نامحدود) برای o به lsof دستور میدهد که از قالب «0t» برای تمام خروجیهای آفست استفاده کند.
- این گزینه به lsof دستور نمیدهد که آفست را در همه حال نمایش دهد؛ برای این کار -o (بدون عدد پس از آن) را مشخص کنید. -o o تنها تعداد ارقام پس از «0t» را در خروجیهای ترکیبی اندازه و آفست یا فقط آفست تعیین میکند. بنابراین، به عنوان مثال، برای اینکه به lsof دستور دهید آفست را در همه حال با تعداد ۱۰ رقم دهدهی نمایش دهد، از دستور زیر استفاده کنید:
-
-o -o 10 یا -oo10
- تعداد پیشفرض ارقام مجاز پس از "0t" معمولاً 8 است، اما ممکن است توسط سازنده lsof تغییر یافته باشد. برای تعیین مقدار پیشفرضی که در حال حاضر فعال است، به توضیحات گزینه -o o در خروجی گزینه -h یا -? مراجعه کنید.
- -O
- به lsof دستور میدهد راهکاری را که برای جلوگیری از مسدود شدن توسط برخی از عملیاتهای هسته استفاده میکند - یعنی انجام آنها در فرایندهای فرزند فورکشده (forked) - دور بزند. برای اطلاعات بیشتر در مورد عملیاتهای هسته که ممکن است lsof را مسدود کنند، بخشهای BLOCKS AND TIMEOUTS و AVOIDING KERNEL BLOCKS را ببینید.
- اگرچه استفاده از این گزینه سربار راهاندازی lsof را کاهش میدهد، اما ممکن است در صورت عدم پاسخگویی هسته به یک تابع، باعث قفل شدن (hang) lsof شود. از این گزینه با احتیاط استفاده کنید.
- -p s
- فهرست کردن فایلها را برای فرایندهایی که شناسههای اختیاری فرایند (PID) آنها در مجموعه جداشده با کامای s قرار دارد، مستثنی کرده یا انتخاب میکند - مانند "123" یا "123,^456". (نباید هیچ فاصلهای در مجموعه وجود داشته باشد.)
- شمارههای PID که با `^` (نفی) شروع میشوند نشاندهنده موارد استثنا هستند.
- چندین شناسه فرایند پیش از شرکت در انتخاب با گزینه AND، در یک مجموعه با منطق OR ادغام میشوند. با این حال، موارد استثنای PID بدون اعمال منطق OR یا AND اعمال شده و پیش از بررسی سایر معیارهای انتخاب اثرگذار میشوند.
- -P
- از تبدیل شمارههای پورت به نام پورت برای فایلهای شبکه جلوگیری میکند (این نگاشت معمولاً از /etc/services خوانده میشود). جلوگیری از این تبدیل ممکن است باعث شود lsof کمی سریعتر اجرا شود. همچنین زمانی که جستجوی نام پورت به درستی کار نمیکند مفید است.
- -Q
- عبارتهای جستجوی ناموفق را نادیده میگیرد. زمانی که به lsof دستور داده میشود به دنبال کاربران یک فایل، یا کاربران یک دستگاه، یا یک PID خاص، یا پروتکلهای خاص مورد استفاده آن PID و غیره بگردد، در صورتی که هر یک از نتایج جستجو خالی باشد lsof یک خطا بازمیگرداند. گزینه -Q این رفتار را تغییر میدهد تا lsof حتی در صورت خالی بودن هر یک از نتایج جستجو، یک کد خروج موفقیتآمیز (0) برگرداند. علاوه بر این، عبارتهای جستجوی یافتنشده به stderr گزارش نخواهند شد.
- +|-r [t[c<N>][m<fmt>]]
- دستور lsof را در حالت تکرار قرار میدهد. در این حالت lsof فایلهای باز انتخابشده توسط سایر گزینهها را فهرست میکند، t ثانیه مکث میکند (پیشفرض پانزده ثانیه است)، سپس فهرست کردن را تکرار میکند؛ این مکث و فهرست کردن را به صورت متوالی تکرار میکند تا زمانی که با شرطی که توسط پیشوند گزینه مشخص شده متوقف شود.
- اگر پیشوند `-` باشد، حالت تکرار بیپایان خواهد بود. Lsof باید با یک سیگنال وقفه (interrupt) یا خروج (quit) پایان یابد. `c<N>` برای تعیین محدودیت تعداد تکرارها است؛ اگر تعداد تکرارها به `<N>` برسد، Lsof به طور خودکار متوقف میشود.
- اگر پیشوند `+` باشد، حالت تکرار در اولین چرخهای که هیچ فایل بازی در آن فهرست نشود به پایان میرسد - و البته زمانی که lsof با یک سیگنال وقفه یا خروج متوقف شود نیز پایان مییابد. هنگامی که حالت تکرار به دلیل فهرست نشدن هیچ فایلی پایان مییابد، کد خروج فرایند در صورتی که حداقل یک بار فایلی فهرست شده باشد صفر و اگر هرگز فایلی فهرست نشده باشد یک خواهد بود.
- دستور Lsof پایان هر فهرست را علامتگذاری میکند: اگر خروجی فیلدی در حال اجرا باشد (گزینه -F مشخص شده باشد)، نشانگر پیشفرض `m` است؛ در غیر این صورت نشانگر پیشفرض "========" خواهد بود. پس از نشانگر یک نویسه NL (خط جدید) میآید.
- آرگومان اختیاری "m<fmt>" قالبی را برای خط نشانگر تعیین میکند. نویسههای <fmt> پس از `m` به عنوان مشخصات قالب برای تابع strftime(3) تفسیر میشوند، البته در صورتی که هم این تابع و هم تابع localtime(3) در کتابخانه C لهجه مورد نظر در دسترس باشند. برای مواردی که میتوانند در مشخصات قالب آن قرار گیرند، به مستندات strftime(3) مراجعه کنید. توجه داشته باشید که وقتی خروجی فیلدی با گزینه -F درخواست شده است، <fmt> نمیتواند شامل قالب خط جدید "%n" باشد. همچنین توجه داشته باشید که وقتی <fmt> شامل فاصلهها یا نویسههای دیگری است که بر تفسیر آرگومانها توسط پوسته اثر میگذارند، <fmt> باید به درستی داخل نقلقول قرار گیرد.
- حالت تکرار سربار راهاندازی lsof را کاهش میدهد، بنابراین استفاده از این حالت کارآمدتر از فراخوانی مکرر lsof از درون یک اسکریپت پوسته است.
- برای استفاده بسیار کارآمد از حالت تکرار، گزینه +|-r را همراه با مشخص کردن سایر گزینههای انتخاب lsof به کار ببرید تا میزان دسترسی lsof به حافظه هسته در کمترین حد نگه داشته شود. گزینههایی که در سطح فرایند فیلتر میکنند - مانند -c، -g، -p، -u – کارآمدترین انتخابکنندهها هستند.
- حالت تکرار زمانی که با خروجی فیلدی (توضیحات گزینه -F را ببینید) و یک اسکریپت ناظر awk یا Perl یا یک برنامه C همراه شود بسیار مفید است.
- -R
- به lsof دستور میدهد شماره شناسه فرایند والد (PPID) را در ستون PPID فهرست کند.
- -s [p:s]
- استفاده از s به تنهایی به lsof دستور میدهد اندازه فایل را همیشه نمایش دهد. این کار باعث میشود عنوان ستون خروجی SIZE/OFF به SIZE تغییر یابد. اگر فایل اندازه نداشته باشد، چیزی نمایش داده نمیشود.
- حالت اختیاری -s p:s تنها برای برخی از لهجهها در دسترس است و فقط زمانی فعال است که در خروجی راهنمای -h یا -? فهرست شده باشد.
- هنگامی که حالت اختیاری در دسترس باشد، s میتواند با یک نام پروتکل (p)، یعنی TCP یا UDP، یک دونقطه (`:`) و یک فهرست جداشده با کاما از نامهای وضعیت پروتکل همراه شود؛ این گزینه باعث میشود فایلهای باز TCP و UDP در صورتی که نام وضعیت آنها در فهرست (s) با یک `^` شروع شده باشد مستثنی شوند؛ یا اگر نام آنها با `^` شروع نشده باشد در خروجی گنجانده شوند.
- لهجههایی که از این گزینه پشتیبانی میکنند ممکن است فقط از یک پروتکل پشتیبانی کنند. هنگامی که یک پروتکل پشتیبانینشده مشخص شود، پیامی نمایش داده میشود که نشان میدهد نامهای وضعیت برای آن پروتکل در دسترس نیستند.
- هنگامی که یک فهرست گنجاندن تعریف میشود، تنها فایلهای شبکهای که نام وضعیت آنها در فهرست آمده است در خروجی lsof حاضر خواهند بود. بنابراین، مشخص کردن یک نام وضعیت به این معنی است که تنها فایلهای شبکه با همان یک نام وضعیت فهرست خواهند شد.
- بزرگی و کوچکی حروف در نام پروتکل یا وضعیت بیاهمیت است، اما نباید هیچ فاصلهای وجود داشته باشد و قرار دادن دونقطه (`:`) برای جداسازی نام پروتکل (p) و فهرست نامهای وضعیت (s) الزامی است.
- اگر قرار است تنها فایلهای TCP و UDP مطابق با موارد استثنا و گنجاندنِ مشخصشده فهرست شوند، گزینه -i نیز باید مشخص شود. اگر قرار است تنها فایلهای یک پروتکل خاص فهرست شوند، نام آن را به عنوان یک آرگومان به گزینه -i اضافه کنید.
- برای مثال، جهت فهرست کردن تنها فایلهای شبکه با وضعیت TCP به صورت LISTEN، استفاده کنید از:
-
-iTCP -sTCP:LISTEN
- یا برای مثال، جهت فهرست کردن فایلهای شبکه با تمام وضعیتهای UDP به جز Idle، استفاده کنید از:
-
-iUDP -sUDP:^Idle
- نامهای وضعیت در لهجههای گوناگون یونیکس متفاوت است، بنابراین ارائه یک فهرست کامل امکانپذیر نیست. برخی از نامهای وضعیت رایج TCP عبارتند از: CLOSED، IDLE، BOUND، LISTEN، ESTABLISHED، SYN_SENT، SYN_RCDV، ESTABLISHED، CLOSE_WAIT، FIN_WAIT1، CLOSING، LAST_ACK، FIN_WAIT_2 و TIME_WAIT. دو نام وضعیت رایج UDP عبارتند از Unbound و Idle. سیستمعامل Apple Darwin اطلاعات وضعیت UDP را به lsof ارائه نمیدهد.
- برای اطلاعات بیشتر در مورد نحوه استفاده از استثنا و گنجاندن وضعیت پروتکل به همراه مثالها، به بخش سوالات متداول (FAQ) در lsof (بخش FAQ مکان آن را مشخص میکند) مراجعه کنید.
- گزینه -o (بدون تعداد ارقام دهدهی در ادامه) و گزینه -s (بدون نام پروتکل و فهرست نام وضعیت در ادامه) مانعةالجمع هستند؛ نمیتوان هر دو را همزمان مشخص کرد. هنگامی که هیچکدام مشخص نشده باشند، lsof هر مقداری را که مناسب و برای نوع فایل در دسترس باشد - اندازه یا آفست - نمایش میدهد.
- از آنجا که برخی از انواع فایلها اندازه واقعی ندارند - سوکتها، FIFOها، لولهها (pipes) و غیره - دستور lsof در صورت امکان مقدار دادههای موجود در بافرهای هسته مربوط به آنها را به عنوان اندازه نمایش میدهد.
- -S [t]
- یک مقدار اختیاری زمان مهلت (time-out) بر حسب ثانیه را برای توابع هسته تعیین میکند - lstat(2)، readlink(2) و stat(2) - که ممکن است در غیر این صورت دچار بنبست (deadlock) شوند. حداقل مقدار برای t عدد دو است؛ پیشفرض، پانزده؛ هنگامی که مقداری مشخص نشود، از مقدار پیشفرض استفاده میشود.
- برای اطلاعات بیشتر بخش BLOCKS AND TIMEOUTS را ببینید.
- -T [t]
- گزارشدهی برخی اطلاعات TCP/TPI را که توسط netstat(1) نیز گزارش میشوند، پس از نشانیهای شبکه کنترل میکند. در خروجی عادی، این اطلاعات داخل پرانتز نمایش داده میشوند و هر مورد به جز نام وضعیت TCP یا TPI با یک کلمه کلیدی مشخص شده، به دنبال آن علامت `=' میآید و با یک فاصله از سایر موارد جدا میشود:
-
<TCP or TPI state name> QR=<read queue length> QS=<send queue length> SO=<socket options and values> SS=<socket states> TF=<TCP flags and values> WR=<window read length> WW=<window write length>
- همه مقادیر برای تمام لهجههای یونیکس گزارش نمیشوند. مقادیر موارد (در صورت وجود) پس از نام مورد و علامت '=' گزارش میشوند.
- هنگامی که حالت خروجی فیلدی فعال است (بخش OUTPUT FOR OTHER PROGRAMS را ببینید)، هر مورد به عنوان یک فیلد با نویسه پیشرو `T' ظاهر میشود.
- گزینه -T بدون نویسههای کلیدی در ادامه، گزارشدهی اطلاعات TCP/TPI را غیرفعال میکند.
- گزینه -T با نویسههای کلیدی در ادامه، گزارشدهی اطلاعات خاص TCP/TPI را انتخاب میکند:
-
f گزارشدهی گزینهها، وضعیتها و مقادیر سوکت و پرچمها و مقادیر TCP را انتخاب میکند. q گزارشدهی طول صف را انتخاب میکند. s گزارشدهی وضعیت اتصال را انتخاب میکند. w گزارشدهی اندازه پنجره را انتخاب میکند.
- همه موارد انتخابی برای برخی لهجههای یونیکس فعال نیستند. وضعیت (state) برای تمام لهجهها قابل انتخاب است و به طور پیشفرض گزارش میشود. خروجی راهنمای -h یا -? برای گزینه -T نشان خواهد داد که چه مواردی را میتوان با آن لهجه یونیکس استفاده کرد.
- هنگامی که -T برای انتخاب اطلاعات استفاده میشود - یعنی به دنبال آن یک یا چند نویسه انتخابی میآید - نمایش وضعیت به طور پیشفرض غیرفعال میشود و باید مجدداً به صراحت در نویسههای پس از -T انتخاب شود. (در نتیجه، حالت پیشفرض معادل با -Ts است.) برای مثال، اگر طول صف و وضعیت اتصال مورد نظر باشد، از -Tqs استفاده کنید.
- گزینههای سوکت، وضعیتهای سوکت، برخی مقادیر سوکت، پرچمهای TCP و یک مقدار TCP ممکن است (در صورت در دسترس بودن در لهجه یونیکس) به شکل نامهایی که معمولاً پس از SO_، so_، SS_، TCP_ و TF_ در فایلهای هدر آن لهجه ظاهر میشوند گزارش شوند - بیشتر در <sys/socket.h>، <sys/socketvar.h> و <netinet/tcp_var.h>. برای معنی پرچمها، گزینهها، وضعیتها و مقادیر به آن فایلهای هدر مراجعه کنید.
- عبارت "SO=" پیش از گزینهها و مقادیر سوکت میآید؛ "SS=" پیش از وضعیتهای سوکت؛ و "TF=" پیش از پرچمها و مقادیر TCP قرار میگیرد.
- اگر یک پرچم یا گزینه دارای مقدار باشد، مقدار پس از یک علامت '=' و نام آن میآید -- مانند "SO=LINGER=5"، "SO=QLIM=5"، "TF=MSS=512". هفت مقدار زیر ممکن است گزارش شوند:
-
Name Reported Description (Common Symbol) KEEPALIVE keep alive time (SO_KEEPALIVE) LINGER linger time (SO_LINGER) MSS maximum segment size (TCP_MAXSEG) PQLEN partial listen queue connections QLEN established listen queue connections QLIM established listen queue limit RCVBUF receive buffer length (SO_RCVBUF) SNDBUF send buffer length (SO_SNDBUF)
- جزئیات مربوط به اینکه چه گزینهها و مقادیر سوکت، وضعیتهای سوکت، و فلگها و مقادیر TCP برای گویشهای خاص یونیکس نمایش داده میشوند، در پاسخ به پرسشهای "Why doesn't lsof report socket options, socket states, and TCP flags and values for my dialect?" و "Why doesn't lsof report the partial listen queue connection count for my dialect?" در lsof FAQ موجود است (بخش FAQ مکان آن را مشخص میکند). در لینوکس این گزینه همچنین وضعیت سوکتهای دامنه یونیکس (UNIX domain sockets) را چاپ میکند.
- -t
- خروجی
فشرده و
خلاصهای
را تولید
میکند که
فقط شامل
شناسههای
فرایند (PIDها
بدون هدر)
است، تا
استفاده
برنامهنویسیشده
از آن آسان
باشد؛ به
عنوان مثال:
# reload anything using old SSL lsof -t /lib/*/libssl.so.* | xargs -r kill -HUP # get list of processes and then iterate over them (Bash only) mapfile -t pids < <( lsof -wt /var/log/your.log ) for pid in "${pids[@]}" ; do your_command -p "$pid" doneگزینه -t به طور ضمنی گزینه -w را نیز فعال میکند. - -u s
- فهرستبندی فایلها را برای کاربری انتخاب میکند که نامهای ورود یا شناسههای کاربری (UIDهای) آنها در مجموعه جداشده با کامای s قرار دارند - مانند "abe"، یا "548,root". (نباید هیچ فاصلهای در مجموعه وجود داشته باشد.)
- چندین نام ورود یا شماره شناسه کاربری پیش از شرکت در انتخاب گزینههای AND، در یک مجموعه واحد با عملگر OR ادغام میشوند.
- اگر یک نام ورود یا شناسه کاربری با `^' شروع شود، به یک نفی (negation) تبدیل میشود - یعنی فایلهای فرایندهای متعلق به آن نام ورود یا شناسه کاربری هرگز فهرست نخواهند شد. انتخاب نفیشده نام ورود یا شناسه کاربری نه با سایر انتخابها AND میشود و نه OR؛ این شرط پیش از تمام انتخابهای دیگر اعمال شده و به طور قطعی فهرست شدن فایلهای آن فرایند را مستثنی میکند. به عنوان مثال، برای هدایت lsof به مستثنی کردن فهرست فایلهای متعلق به فرایندهای کاربر ریشه (root)، مقدار "-u^root" یا "-u^0" را مشخص کنید.
- -U
- فهرستبندی فایلهای سوکت دامنه یونیکس (UNIX domain socket files) را انتخاب میکند.
- -v
- فهرست کردن اطلاعات نسخه lsof را انتخاب میکند، از جمله: شماره بازبینی (revision number)؛ زمانی که باینری lsof ساخته شده است؛ چه کسی و در کجا باینری را ساخته است؛ نام کامپایلر استفادهشده برای ساخت باینری lsof؛ شماره نسخه کامپایلر در صورت در دسترس بودن؛ فلگهای کامپایلر و لودر استفادهشده برای ساخت باینری lsof؛ و اطلاعات سیستم، که معمولاً خروجی گزینه -a از دستور uname است.
- -V
- دستور lsof را هدایت میکند تا مواردی را که برای فهرستبندی از آن خواسته شده بود اما موفق به یافتن آنها نشد مشخص کند - نامهای دستور، نامهای فایل، آدرسها یا فایلهای اینترنت، نامهای ورود، فایلهای NFS، شناسههای PID، PGID و UID.
- هنگامی که گزینههای دیگر با گزینههای جستجو AND میشوند، یا گزینههای زمان کامپایل فهرستبندی برخی فایلها را محدود میکنند، ممکن است lsof عدم موفقیت در یافتن یک مورد جستجو را هنگامی که یک گزینه ANDشده یا گزینه زمان کامپایل مانع فهرست شدن فایل باز حاوی مورد جستجوی یافتشده میشود، گزارش نکند.
- برای مثال، دستور "lsof -V -iTCP@foobar -a -d 999" ممکن است عدم موفقیت در یافتن فایلهای باز در "TCP@foobar" را گزارش نکند و هیچ فایلی را نیز فهرست نکند، در صورتی که هیچکدام شماره توصیفکننده فایل 999 را نداشته باشند. وضعیت مشابهی زمانی رخ میدهد که HASSECURITY و HASNOSOCKSECURITY در زمان کامپایل تعریف شده باشند و مانع از فهرستبندی فایلهای باز شوند.
- +|-w
- فرونشانی و عدم نمایش پیامهای هشدار را فعال (+) یا غیرفعال (-) میکند.
- سازنده lsof میتواند انتخاب کند که پیامهای هشدار به طور پیشفرض غیرفعال یا فعال باشند. وضعیت پیشفرض پیامهای هشدار در خروجی گزینه -h یا -? نشان داده میشود. غیرفعال کردن پیامهای هشدار هنگامی که از قبل غیرفعال هستند، یا فعال کردن آنها در زمانی که از قبل فعال هستند بلامانع است.
- گزینه -t به طور ضمنی گزینه -w را نیز فعال میکند.
- -x [fl]
- میتواند همراه با گزینههای +d و +D استفاده شود تا پردازش آنها را برای عبور از پیوندهای نمادین و/یا نقاط اتصال سیستم فایل که هنگام پویش دایرکتوری (+d) یا درخت دایرکتوری (+D) با آنها مواجه میشوند هدایت کند.
- اگر -x به تنهایی و بدون پارامتر بعدی مشخص شود، پردازش عبور از هر دو مورد پیوندهای نمادین و نقاط اتصال سیستم فایل فعال میشود. توجه داشته باشید که وقتی -x بدون پارامتر مشخص میشود، آرگومان بعدی باید با '-' یا '+' آغاز شود.
- پارامتر اختیاری 'f' پردازش عبور از نقاط اتصال سیستم فایل را فعال میکند؛ و 'l' پردازش عبور از پیوندهای نمادین را فعال میسازد.
- گزینه -x نمیتواند بدون تعیین یکی از گزینههای +d یا +D ارائه شود.
- -X
- این یک گزینه وابسته به گویش سیستمعامل (dialect-specific) است.
AIX:
این گزینه IBM AIX
RISC/System 6000
گزارشدهی
ارجاعات
فایلهای
متنی
اجرایی و
کتابخانههای
مشترک را
درخواست
میکند.
- هشدار: از آنجا که این گزینه از تابع هسته readx() استفاده میکند، استفاده از آن در یک سیستم شلوغ AIX ممکن است باعث قفل شدن کامل یک فرایند برنامه شود، بهطوری که نتوان آن را متوقف کرد یا پایان داد (kill). من هرگز ندیدهام این اتفاق بیفتد یا گزارشی از وقوع آن دریافت نکردهام، اما فکر میکنم احتمال بسیار اندکی برای رخ دادن آن وجود دارد.
- به طور پیشفرض استفاده از readx() غیرفعال است. در AIX 5L و بالاتر lsof ممکن است برای انجام اقداماتی که این گزینه درخواست میکند، به مجوز setuid-root نیاز داشته باشد.
- سازنده lsof میتواند مشخص کند که گزینه -X فقط به فرایندهایی محدود شود که UID واقعی آنها ریشه (root) است. اگر چنین کاری انجام شده باشد، گزینه -X در خروجی راهنمای -h یا -? ظاهر نخواهد شد مگر اینکه UID واقعی فرایند lsof کاربر root باشد. توزیع پیشفرض lsof به هر UID اجازه میدهد تا -X را مشخص کند، بنابراین به طور پیشفرض در خروجی راهنما نمایش داده میشود.
- هنگامی که استفاده از readx() در AIX غیرفعال باشد، lsof ممکن است نتواند اطلاعات مربوط به تمام ارجاعات فایلهای text و loader را گزارش کند، اما همچنین میتواند از تشدید خطای جستجوی دایرکتوری در هسته AIX، موسوم به باگ Stale Segment ID جلوگیری نماید.
- تابع readx() که توسط lsof یا هر برنامه دیگری برای دسترسی به بخشهایی از حافظه مجازی هسته استفاده میشود، میتواند باگ Stale Segment ID را تحریک کند. این باگ میتواند باعث شود تابع dir_search() در هسته به اشتباه تصور کند بخشی از نسخه درونحافظهای یک دایرکتوری سیستم فایل صفر شده است. یک فرایند برنامه دیگر، مجزا از lsof، که از هسته میخواهد دایرکتوری را جستجو کند - برای مثال با استفاده از open(2) - میتواند باعث شود dir_search() در یک حلقه بیپایان بیفتد و در نتیجه فرایند برنامه قفل شود.
- برای شرح کاملتر باگ Stale Segment ID، شماره APAR آن، و روشهای تعریف استفاده از readx() هنگام کامپایل کردن lsof، به lsof FAQ (بخش FAQ مکان آن را مشخص میکند) و فایل 00README در توزیع lsof مراجعه کنید.
Linux:
این گزینه
در لینوکس
درخواست
میکند که
lsof از گزارش
اطلاعات
مربوط به
تمام
فایلهای
باز TCP، UDP و UDPLITE در
IPv4 و IPv6 صرفنظر
کند.
- این گزینه در لینوکس بیشترین کاربرد را زمانی دارد که سیستم تعداد فوقالعاده زیادی فایل باز TCP، UDP و UDPLITE دارد که پردازش اطلاعات آنها در فایلهای /proc/net/tcp* و /proc/net/udp* زمان زیادی از lsof میگیرد و گزارش آنها نیز مورد نیاز نیست.
- از این گزینه با احتیاط و تنها زمانی استفاده کنید که مطمئن هستید اطلاعاتی که میخواهید lsof نمایش دهد به فایلهای سوکت باز TCP، UDP یا UDPLITE مرتبط نیست.
Solaris 10 and above:
این گزینه
در Solaris 10 و
بالاتر
گزارش
مسیرهای
کششده (cached paths)
برای
فایلهایی
که حذف
شدهاند -
یعنی با rm(1)
یا unlink(2) پاک
شدهاند - را
درخواست
میکند.
- مسیر کششده با رشته " (deleted)" دنبال میشود تا نشان دهد مسیری که فایل از طریق آن باز شده بود حذف شده است.
- از آنجا که تغییرات میانی اعمالشده روی مسیر - یعنی تغییر نام با mv(1) یا rename(2) - در مسیر کش ثبت نمیشوند، آنچه lsof گزارش میکند تنها مسیری است که فایل از طریق آن باز شده بود، نه مسیر نهایی احتمالاً متفاوت آن.
- -z [z]
- مشخص میکند که اطلاعات ناحیه (zone) در Solaris 10 و بالاتر چگونه مدیریت شوند.
- بدون آرگومان بعدی - یعنی بدون z - این گزینه مشخص میکند که نامهای ناحیه باید در ستون خروجی ZONE فهرست شوند.
- گزینه -z میتواند با یک نام ناحیه، z دنبال شود. این امر باعث میشود lsof تنها فایلهای باز مربوط به فرایندهای موجود در آن ناحیه را فهرست کند. میتوان چندین جفت گزینه و آرگومان -z z را برای تشکیل فهرستی از نواحی نامگذاریشده مشخص کرد. هر فایل باز از هر فرایندی در هر یک از نواحی، مشروط به سایر شرایط تعیینشده توسط گزینهها و آرگومانهای دیگر فهرست خواهد شد.
- -Z [Z]
- مشخص میکند که زمینههای امنیتی SELinux (security contexts) چگونه مدیریت شوند. پشتیبانی از این گزینه و نویسه خروجی فیلد 'Z' زمانی که SELinux در هسته لینوکس در حال اجرا غیرفعال باشد، مسدود میشود. برای اطلاعات بیشتر درباره نویسه خروجی فیلد 'Z' بخش OUTPUT FOR OTHER PROGRAMS را ببینید.
- بدون آرگومان بعدی - یعنی بدون Z - این گزینه مشخص میکند که زمینههای امنیتی باید در ستون خروجی SECURITY-CONTEXT فهرست شوند.
- گزینه -Z میتواند با یک نام زمینه امنیتی همراه با نویسه عمومی (wildcard)، یعنی Z دنبال شود. این امر باعث میشود lsof تنها فایلهای باز مربوط به فرایندهای موجود در آن زمینه امنیتی را فهرست کند. میتوان چندین جفت گزینه و آرگومان -Z Z را برای تشکیل فهرستی از زمینههای امنیتی مشخص کرد. هر فایل باز از هر فرایندی در هر یک از زمینههای امنیتی، مشروط به سایر شرایط تعیینشده توسط گزینهها و آرگومانهای دیگر فهرست خواهد شد. توجه داشته باشید که Z میتواند به صورت A:B:C یا *:B:C یا A:B:* یا *:*:C باشد تا با زمینه A:B:C مطابقت داده شود.
- --
- گزینه دو علامت خط تیره نشانگری است که پایان گزینههای کلیددار را اعلام میکند. این گزینه میتواند به عنوان مثال زمانی استفاده شود که نخستین نام فایل با علامت منفی (خط تیره) شروع میشود. همچنین میتواند زمانی به کار رود که عدم وجود مقدار برای آخرین گزینه کلیددار باید با وجود علامت منفی در گزینه بعدی و پیش از شروع نامهای فایل نشان داده شود.
- names
- اینها نامهای مسیر فایلهای خاصی برای فهرستبندی هستند. پیوندهای نمادین پیش از استفاده ارزیابی و حل میشوند. نخستین نام میتواند با گزینه "--" از گزینههای قبلی جدا شود.
- اگر یک name دایرکتوری متصلشده (mounted-on) یک سیستم فایل یا دستگاه مربوط به آن سیستم فایل باشد، lsof تمام فایلهای باز روی آن سیستم فایل را فهرست میکند. برای اینکه یک سیستم فایل محسوب شود، name باید با نام یک دایرکتوری متصلشده در خروجی mount(8) مطابقت داشته باشد، یا با نام یک دستگاه بلوکی مرتبط با نام دایرکتوری متصلشده تطبیق یابد. میتوان از گزینه +|-f استفاده کرد تا lsof مجبور شود یک name را به عنوان شناسه سیستم فایل (+f) یا یک فایل ساده (-f) در نظر بگیرد.
- اگر name مسیری به یک دایرکتوری باشد که نام دایرکتوری متصلشده یک سیستم فایل نیست، دقیقاً مانند یک فایل معمولی با آن رفتار میشود - یعنی فهرستبندی آن محدود به فرایندهایی خواهد بود که آن را به عنوان یک فایل یا به عنوان یک دایرکتوری مخصوص فرایند، مانند دایرکتوری ریشه یا دایرکتوری کاری جاری (current working directory) باز کردهاند. برای درخواست از lsof جهت جستجوی فایلهای باز در داخل یک نام دایرکتوری، از گزینههای +d s و +D D استفاده کنید.
- اگر یک name نام پایه یک خانواده از فایلهای چندگانهسازیشده (multiplexed files) باشد - مثلاً /dev/pt[cs] - در AIX، دستور lsof تمام فایلهای چندگانهسازیشده مرتبط روی دستگاه را که باز هستند فهرست میکند - مانند /dev/pt[cs]/1، /dev/pt[cs]/2 و غیره.
- اگر یک name نام یک سوکت دامنه یونیکس (UNIX domain socket) باشد، lsof معمولاً تنها با نویسههای نام به دنبال آن میگردد - دقیقاً همانطور که مشخص شده و در ساختار سوکت هسته ثبت گردیده است. (برای یک استثنا در این قاعده برای لینوکس، پاراگراف بعدی را ببینید.) مشخص کردن یک مسیر نسبی - به عنوان مثال ./file - به جای مسیر مطلق فایل - مانند /tmp/file - کار نخواهد کرد زیرا lsof باید نویسههایی را که مشخص میکنید با آنچه در ساختارهای سوکت دامنه یونیکس هسته پیدا میکند تطبیق دهد.
- اگر یک name نام یک سوکت دامنه یونیکس لینوکس باشد، در یک حالت lsof قادر است آن را بر اساس شماره دستگاه و inode جستجو کند، که به name اجازه میدهد یک مسیر نسبی باشد. این حالت مستلزم آن است که مسیر مطلق -- یعنی مسیری که با یک اسلش ('/') آغاز میشود -- توسط پردازهای که سوکت را ایجاد کرده استفاده شده باشد، و بنابراین در فایل /proc/net/unix ذخیره شده باشد؛ و همچنین مستلزم آن است که lsof بتواند شمارههای دستگاه و گره (node) را برای هر دوی مسیر مطلق در /proc/net/unix و name از طریق فراخوانیهای سیستمی موفق stat(2) به دست آورد. هنگامی که آن شرایط برآورده شوند، lsof قادر خواهد بود سوکت دامنه یونیکس را زمانی که مسیری به آن در name مشخص شده است جستجو کند. بنابراین، به عنوان مثال، اگر مسیر /dev/log باشد، و جستجوی lsof زمانی آغاز شود که دایرکتوری کاری /dev است، آنگاه name میتواند ./log باشد.
- اگر یک name هیچکدام از موارد بالا نباشد، lsof هر فایل بازی را که دستگاه و inode آن با مسیر مشخصشده name مطابقت داشته باشد فهرست میکند.
- اگر گزینه -b را نیز مشخص کرده باشید، تنها nameهایی که میتوانید با خیال راحت مشخص کنید سیستمفایلهایی هستند که جدول mount شما شمارههای دستگاه جایگزین برای آنها ارائه میدهد. بخشهای AVOIDING KERNEL BLOCKS و ALTERNATE DEVICE NUMBERS را برای اطلاعات بیشتر ببینید.
- چندین نام فایل پیش از شرکت در انتخاب با گزینههای منطقی AND، در یک مجموعه واحد با پیوند منطقی OR ترکیب میشوند.
سامانه AFS (AFS)
دستور lsof از شناسایی فایلهای AFS برای این نگارشها (و نسخههای AFS) پشتیبانی میکند:
AIX 4.1.4 (AFS 3.4a) HP-UX 9.0.5 (AFS 3.4a) Linux 1.2.13 (AFS 3.3) Solaris 2.[56] (AFS 3.4a)
این دستور ممکن است فایلهای AFS را در نسخههای دیگر این نگارشها شناسایی کند، اما در آنها آزمایش نشده است. بسته به نحوه پیادهسازی AFS، lsof ممکن است فایلهای AFS را در نگارشهای دیگر شناسایی کند، یا ممکن است در شناسایی فایلهای AFS در نگارشهای پشتیبانیشده با مشکلاتی مواجه شود.
دستور lsof ممکن است در شناسایی تمام جنبههای فایلهای AFS در نگارشهای پشتیبانیشده دچار مشکل شود، زمانی که پشتیبانی هسته از AFS از طریق ماژولهای پویا که آدرسهای آنها در فهرست نام متغیرهای هسته ظاهر نمیشود پیادهسازی شده باشد. در این صورت، lsof ممکن است مجبور شود هویت فایلهای AFS را حدس بزند، و شاید نتواند اطلاعات حجم (volume) را که برای محاسبه شمارههای گره حجم AFS لازم است از هسته دریافت کند. هنگامی که lsof نتواند شمارههای گره حجم را محاسبه کند، در ستون NODE مقدار خالی گزارش میدهد.
گزینه -A A در پیادهسازی برخی از نگارشهای lsof برای مشخص کردن فایل فهرست نام (name list) که در آن آدرسهای ماژول پویای هسته ممکن است یافت شوند، در دسترس است. هنگامی که این گزینه در دسترس باشد، در خروجی راهنمای lsof که در پاسخ به گزینه -h یا -? ارائه میشود، فهرست خواهد شد.
برای اطلاعات بیشتر درباره ماژولهای پویا، نمادهای آنها، و چگونگی تأثیرگذاری آنها بر گزینههای lsof، به FAQ مربوط به lsof (بخش FAQ محل آن را مشخص میکند) مراجعه کنید.
از آنجا که به نظر نمیرسد جستجوهای مسیر AFS در عملیات حافظه موقت نام (name cache) هسته شرکت داشته باشند، lsof نمیتواند اجزای نام مسیر را برای فایلهای AFS شناسایی کند.
امنیت (SECURITY)
دستور lsof سه ویژگی دارد که ممکن است نگرانیهای امنیتی ایجاد کند. نخست، حالت کامپایل پیشفرض آن به همه اجازه میدهد تمام فایلهای باز را با آن فهرست کنند. دوم، بهطور پیشفرض یک فایل حافظه پنهان دستگاه (device cache) با قابلیت خواندن و نوشتن کاربر در دایرکتوری خانگی شناسه کاربری واقعی که lsof را اجرا میکند ایجاد مینماید. (ویژگیهای فهرست کردن تمام فایلهای باز و حافظه پنهان دستگاه میتوانند هنگام کامپایل lsof غیرفعال شوند.) سوم، گزینههای -k و -m آن فایلهای فهرست نام یا حافظه جایگزین هسته را تعیین میکنند.
محدود کردن فهرستبندی تمام فایلهای باز توسط گزینههای زمان کامپایل HASSECURITY و HASNOSOCKSECURITY کنترل میشود. هنگامی که HASSECURITY تعریف شده باشد، lsof تنها به کاربر root اجازه میدهد تمام فایلهای باز را فهرست کند. کاربر غیر root فقط میتواند فایلهای باز پردازههایی با شناسه کاربری یکسان با شناسه کاربری واقعی پردازه lsof (همان حسابی که کاربر با آن وارد شده است) را فهرست کند.
با این حال، اگر هم HASSECURITY و هم HASNOSOCKSECURITY تعریف شده باشند، هر کسی میتواند فایلهای سوکت باز را فهرست کند، به شرط آنکه با گزینه -i انتخاب شده باشند.
هنگامی که HASSECURITY تعریف نشده باشد، هر کسی میتواند تمام فایلهای باز را فهرست کند.
خروجی راهنما، که در پاسخ به گزینه -h یا -? ارائه میشود، وضعیت تعاریف HASSECURITY و HASNOSOCKSECURITY را مشخص میکند.
برای اطلاعات درباره ساخت lsof با فعال بودن گزینههای HASSECURITY و HASNOSOCKSECURITY، بخش Security از فایل 00README توزیع lsof را ببینید.
ایجاد و استفاده از فایل حافظه پنهان دستگاه با قابلیت خواندن و نوشتن توسط کاربر، با گزینه زمان کامپایل HASDCACHE کنترل میشود. برای جزئیات درباره نحوه تشکیل مسیر آن، بخش DEVICE CACHE FILE و بخشهای بعدی آن را ببینید. به منظور ملاحظات امنیتی، توجه به این نکته مهم است که در توزیع پیشفرض lsof، اگر شناسه کاربری واقعی که lsof تحت آن اجرا میشود root باشد، فایل حافظه پنهان دستگاه در دایرکتوری خانگی root نوشته خواهد شد - مثلاً / یا /root. هنگامی که HASDCACHE تعریف نشده باشد، lsof فایل حافظه پنهان دستگاه را نمینویسد و تلاشی برای خواندن آن نیز نمیکند.
هنگامی که HASDCACHE تعریف شده باشد، خروجی راهنمای lsof، که در پاسخ به گزینههای -h، -D? یا -? ارائه میشود، اطلاعات مدیریت فایل حافظه پنهان دستگاه را ارائه خواهد داد. هنگامی که HASDCACHE تعریف نشده باشد، خروجی -h یا -? حاوی هیچ توضیحی برای گزینه -D نخواهد بود.
پیش از آنکه تصمیم بگیرید ویژگی فایل حافظه پنهان دستگاه را غیرفعال کنید - فعال کردن آن با کاهش سربار زمان راهاندازی برای بررسی تمام گرهها در /dev (یا /devices) کارایی lsof را بهبود میبخشد - بحث مربوط به آن را در فایل 00DCACHE از توزیع lsof و FAQ مربوط به lsof (بخش FAQ محل آن را مشخص میکند) مطالعه کنید.
در صورت تردید، میتوانید استفاده از فایل حافظه پنهان دستگاه را بهطور موقت با گزینه -Di غیرفعال کنید.
هنگامی که کاربر lsof فایلهای جایگزین فهرست نام یا حافظه هسته را با گزینههای -k و -m تعیین میکند، lsof مجوز کاربر برای خواندن آنها را با access(2) بررسی میکند. هدف از این کار جلوگیری از این است که هرگونه اختیارات ویژهای که حالتهای lsof ممکن است به آن اعطا کنند، اجازه ندهد فایلهایی را که معمولاً از طریق اختیارات شناسه کاربری واقعی قابل دسترسی نیستند بخواند.
خروجی (OUTPUT)
این بخش اطلاعاتی را که lsof برای هر فایل باز فهرست میکند شرح میدهد. برای اطلاعات بیشتر در مورد خروجیهایی که میتوانند توسط برنامهای دیگر پردازش شوند، بخش OUTPUT FOR OTHER PROGRAMS را ببینید.
دستور lsof تنها نویسههای ۸ بیتی قابلچاپ (که توسط isprint(3) چنین اعلام شدهاند) را در خروجی میآورد. نویسههای غیرقابلچاپ به یکی از سه شکل چاپ میشوند: شکل C یعنی «\[bfrnt]»؛ شکل نویسه کنترلی «^» (مانند «^@»)؛ یا شکل هگزادسیمال با پیشوند «\x» (مانند «\xab»). فاصله در ستون COMMAND غیرقابلچاپ است («\x20») و در سایر جاها قابلچاپ است.
برای برخی نگارشها - اگر HASSETLOCALE در فایل سرآیند machine.h نگارش تعریف شده باشد - lsof نویسههای ۸ بیتی گسترشیافته لوکال زبان را چاپ خواهد کرد. به پردازه lsof باید یک متغیر محیطی لوکال زبان (مانند LANG) داده شود که مقدار آن نمایانگر یک لوکال زبانی شناختهشده باشد که در آن نویسههای گسترشیافته توسط isprint(3) قابلچاپ در نظر گرفته میشوند. در غیر این صورت lsof نویسههای گسترشیافته را غیرقابلچاپ تلقی کرده و آنها را بر اساس قواعد خود برای نویسههای غیرقابلچاپ، که در بالا بیان شد، چاپ میکند. برای نام سایر متغیرهای محیطی که ممکن است به جای LANG استفاده شوند (مانند LC_ALL، LC_CTYPE و غیره) به صفحه راهنمای setlocale(3) نگارش خود مراجعه کنید.
پشتیبانی لوکال زبان در lsof برای یک نگارش همچنین شامل نویسههای عریض (مانند UTF-8) میشود - هنگامی که HASSETLOCALE و HASWIDECHAR در فایل سرآیند machine.h نگارش تعریف شده باشند، و زمانی که یک لوکال زبانی مناسب در متغیر محیطی مربوطه برای پردازه lsof تعریف شده باشد. نویسههای عریض تحت این شرایط قابلچاپ هستند اگر iswprint(3) آنها را چنین گزارش کند. اگر HASSETLOCALE، HASWIDECHAR و یک لوکال زبانی مناسب تعریف نشده باشند، یا اگر iswprint(3) نویسههای عریضی را گزارش دهد که قابلچاپ نیستند، lsof نویسههای عریض را غیرقابلچاپ دانسته و هر یک از ۸ بیت آنها را بر اساس قواعد خود برای نویسههای غیرقابلچاپ، که در بالا بیان شد، چاپ میکند.
برای اطلاعات بیشتر به پاسخهای پرسشهای "Language locale support" در FAQ مربوط به lsof مراجعه فرمایید (بخش FAQ محل آن را مشخص میکند).
دستور lsof اندازه ستونهای خروجی را در هر بار اجرا بهطور پویا تعیین میکند و تضمین مینماید که هر ستون حداقل اندازه را داشته باشد. همچنین تضمین میکند که هر ستون با حداقل یک فاصله از ستون قبلی خود جدا شده باشد.
- COMMAND
- شامل نه نویسه نخست از نام دستور یونیکس مرتبط با پردازه است. اگر یک مقدار غیر صفر برای w به گزینه +c w داده شود، ستون شامل w نویسه نخست از نام دستور یونیکس مرتبط با پردازه تا حداکثر سقف نویسههای ارائهشده به lsof توسط نگارش یونیکس خواهد بود. (برای اطلاعات بیشتر به توضیحات دستور +c w یا FAQ مربوط به lsof مراجعه کنید. بخش FAQ محل آن را مشخص میکند.)
- اگر w از طول عنوان ستون، یعنی "COMMAND" کمتر باشد، به همان میزان افزایش خواهد یافت.
- اگر مقدار صفر برای w در گزینهٔ +c w مشخص شود، ستون شامل تمام نویسههای نام دستور یونیکس مرتبط با فرآیند خواهد بود.
- هنگامی که توصیفگر نام دستور ('c') مشخص شده باشد، تمامی نویسههای نام دستور که توسط هسته در ساختارهایش نگهداری میشوند در خروجی فیلد نمایش داده میشوند. برای اطلاعات بیشتر دربارهٔ انتخاب خروجی فیلد و توصیفگر نام دستور مرتبط، بخش OUTPUT FOR OTHER COMMANDS را ببینید.
- PID
- شمارهٔ شناسایی فرآیند (Process IDentification number) است.
- TID
- شمارهٔ شناسایی تسک (Thread/Task IDentification number) است، در صورتی که گزارش تسک (رشته) توسط گویش سیستم پشتیبانی شود و یک تسک (رشته) در حال فهرست شدن باشد. (اگر خروجی راهنما - یعنی خروجی گزینههای -h یا -? - این گزینه را نشان دهد، گزارش تسک (رشته) توسط گویش سیستم پشتیبانی میشود.)
- ستون خالی TID در لینوکس نشاندهنده یک فرآیند است - یعنی یک غیرتسک (non-task).
- TASKCMD
- نام دستور تسک است. به طور کلی این نام مشابه فرآیند نامبرده در ستون COMMAND خواهد بود، اما برخی پیادهسازیهای تسک (مانند لینوکس) به یک تسک اجازه میدهند تا نام دستور خود را تغییر دهد.
- عرض ستون TASKCMD مشمول همان محدودیت اندازهٔ ستون COMMAND است.
- ZONE
- نام منطقه (Zone) در سولاریس ۱۰ و بالاتر است. این ستون باید با گزینهٔ -z انتخاب شود.
- SECURITY-CONTEXT
- بافت امنیتی SELinux (SELinux security context) است. این ستون باید با گزینهٔ -Z انتخاب شود. توجه داشته باشید که در صورت غیرفعال بودن SELinux در هسته لینوکس در حال اجرا، گزینهٔ -Z غیرفعال میشود.
- PPID
- شماره شناسایی فرآیند والد (Parent Process IDentification number) است. این ستون تنها زمانی نمایش داده میشود که گزینهٔ -R مشخص شده باشد.
- PGID
- شماره شناسایی گروه فرآیند (Process Group IDentification number) مرتبط با فرآیند است. این ستون تنها زمانی نمایش داده میشود که گزینهٔ -g مشخص شده باشد.
- USER
- شماره شناسه کاربر یا نام کاربری (login name) کاربری است که فرآیند متعلق به اوست، و معمولاً همان مقداری است که توسط ps(1) گزارش میشود. با این حال، در لینوکس USER شماره شناسه کاربر یا نام کاربری است که مالک دایرکتوری در /proc است که lsof اطلاعات مربوط به فرآیند را در آن مییابد. معمولاً این مقدار همان مقدار گزارششده توسط ps(1) است، اما هنگامی که فرآیند شناسه کاربری مؤثر (effective user ID) خود را تغییر داده باشد ممکن است متفاوت باشد. (برای اطلاعات در مورد زمان نمایش شماره شناسه کاربر یا نام کاربری، توضیحات گزینهٔ -l را ببینید.)
- FD
- شماره توصیفگر فایل (File Descriptor) است یا:
-
cwd دایرکتوری کاری فعلی؛ Lnn ارجاعات کتابخانه (AIX)؛ ctty ترمینال کنترلی متنی (character tty)؛ DEL فایل حذفشده؛ err خطای اطلاعات FD (ستون NAME را ببینید)؛ fp. پورت فایل (Darwin)؛ jld دایرکتوری زندان یا جیل (FreeBSD)؛ ltx متن کتابخانه اشتراکی (کد و داده)؛ Mxx شماره نوع نگاشت حافظه هگزادسیمال xx؛ m86 فایل نگاشتشده DOS Merge؛ mem فایل نگاشتشده در حافظه؛ mmap دستگاه نگاشتشده در حافظه؛ NOFD برای دایرکتوری /proc/<PID>/fd در لینوکس که باز نمیشود -- مسیر دایرکتوری در ستون NAME ظاهر شده و به دنبال آن یک پیام خطا میآید؛ pd دایرکتوری والد؛ Rnn شماره pregion ناشناخته (HP-UX)؛ rtd دایرکتوری ریشه؛ twd دایرکتوری کاری فعلی برای هر تسک؛ txt متن برنامه (کد و داده)؛ v86 فایل نگاشتشده VP/ix؛
- پس از FD یکی از این نویسهها میآید که حالت باز بودن فایل را توصیف میکند:
- r برای
دسترسی
خواندن؛
w برای دسترسی نوشتن؛
u برای دسترسی خواندن و نوشتن؛
فاصله (space) در صورتی که حالت ناشناخته باشد و هیچ نویسهٔ قفلی
به دنبال آن نیاید؛
`-' در صورتی که حالت ناشناخته باشد و نویسهٔ قفل
به دنبال آن بیاید. - به دنبال نویسهٔ حالت، یکی از این نویسههای قفل میآید که نوع قفل اعمالشده روی فایل را توصیف میکند:
- N برای قفل NFS
سولاریس از
نوع
ناشناخته؛
r برای قفل خواندن روی بخشی از فایل؛
R برای قفل خواندن روی کل فایل؛
w برای قفل نوشتن روی بخشی از فایل؛
W برای قفل نوشتن روی کل فایل؛
u برای قفل خواندن و نوشتن با هر طولی؛
U برای قفلی از نوع ناشناخته؛
x برای قفل SCO OpenServer Xenix روی بخشی از فایل؛
X برای قفل SCO OpenServer Xenix روی کل فایل؛
فاصله (space) در صورتی که قفلی وجود نداشته باشد. - برای اطلاعات بیشتر درباره نویسه اطلاعات قفل، بخش LOCKS را ببینید.
- محتویات ستون FD یک فیلد منفرد را برای تجزیه در اسکریپتهای پسپردازش تشکیل میدهد. شمارههای FD بزرگتر از ۹۹۹۹ به یک "*" به همراه سه رقم پایانی خلاصه میشوند؛ مثلاً ۱۰۰۰۱ به صورت "*001" نمایش مییابد.
- TYPE
- نوع گره (Node) مرتبط با فایل است - مانند VDIR، VREG و غیره؛
- یا "ax25" برای یک سوکت AX.25 لینوکس؛
- یا "a_inode" برای یک inode ناشناس (anonymous inode)؛
- یا "icmp" برای یک سوکت ICMP؛
- یا "inet" برای یک سوکت دامنه اینترنت (Internet domain socket)؛
- یا "ipx" برای یک سوکت IPX؛
- یا "key" برای یک سوکت مدیریت کلید داخلی؛
- یا "lla" برای یک فایل دسترسی در سطح پیوند HP-UX؛
- یا "ndrv" برای یک سوکت راهانداز شبکه (net driver)؛
- یا "netlink" برای یک سوکت netlink؛
- یا "pack" برای یک سوکت بسته (packet socket)؛
- یا "ppp" برای یک سوکت PPP؛
- یا "raw" برای یک سوکت خام (raw socket)؛
- یا "raw6" برای یک سوکت خام IPv6؛
- یا "rte" برای یک سوکت AF_ROUTE؛
- یا "sock" برای یک سوکت با دامنه ناشناخته؛
- یا "systm" برای یک سوکت سیستمی؛
- یا "unix" برای یک سوکت دامنه یونیکس (UNIX domain socket)؛
- یا "x.25" برای یک سوکت x.25 در HP-UX؛
- یا "ATALK" برای یک سوکت AppleTalk؛
- یا "BLK" برای یک فایل ویژه بلوکی (block special file)؛
- یا "CHR" برای یک فایل ویژه نویسهای (character special file)؛
- یا "DEL" برای یک فایل نگاشت لینوکس که حذف شده است؛
- یا "DIR" برای یک دایرکتوری؛
- یا "DOOR" برای یک فایل VDOOR؛
- یا "EVENTFD" برای یک eventfd؛
- یا "FIFO" برای یک فایل ویژه FIFO؛
- یا "FSEVENTS" برای fsevents؛
- یا "IPv4" برای یک سوکت IPv4؛
- یا "IPv6" برای یک فایل شبکه باز IPv6 - حتی اگر نشانی آن IPv4 نگاشتشده در یک نشانی IPv6 باشد؛
- یا "KQUEUE" برای یک فایل صف رویداد هسته به سبک BSD؛
- یا "LINK" برای یک فایل پیوند نمادین؛
- یا "MPB" برای یک فایل بلوکی چندگانه (multiplexed block file)؛
- یا "MPC" برای یک فایل نویسهای چندگانه (multiplexed character file)؛
- یا "PAS" برای یک فایل /proc/as؛
- یا "PAXV" برای یک فایل /proc/auxv؛
- یا "PCRE" برای یک فایل /proc/cred؛
- یا "PCTL" برای یک فایل کنترلی /proc؛
- یا "PCUR" برای فرآیند جاری /proc؛
- یا "PCWD" برای دایرکتوری کاری جاری /proc؛
- یا "PDIR" برای یک دایرکتوری /proc؛
- یا "PETY" برای یک نوع فایل اجرایی /proc (etype)؛
- یا "PFD" برای یک توصیفگر فایل /proc؛
- یا "PFDR" برای یک دایرکتوری توصیفگر فایل /proc؛
- یا "PFIL" برای یک فایل اجرایی /proc؛
- یا "PFPR" برای یک مجموعه ثبات ممیز شناور (FP register set) /proc؛
- یا "PGD" برای یک فایل /proc/pagedata؛
- یا "PGID" برای یک فایل اعلان گروه /proc؛
- یا "PIPE" برای لولهها (pipes)؛
- یا "PLC" برای یک فایل /proc/lwpctl؛
- یا "PLDR" برای یک دایرکتوری /proc/lpw؛
- یا "PLDT" برای یک فایل /proc/ldt؛
- یا "PLPI" برای یک فایل /proc/lpsinfo؛
- یا "PLST" برای یک فایل /proc/lstatus؛
- یا "PLU" برای یک فایل /proc/lusage؛
- یا "PLWG" برای یک فایل /proc/gwindows؛
- یا "PLWI" برای یک فایل /proc/lwpsinfo؛
- یا "PLWS" برای یک فایل /proc/lwpstatus؛
- یا "PLWU" برای یک فایل /proc/lwpusage؛
- یا «PLWX» برای فایل /proc/xregs؛
- یا «PMAP» برای فایل نقشهبرداری /proc (map)؛
- یا «PMPS» برای فایل /proc/maps؛
- یا «PMEM» برای فایل تصویر حافظه /proc؛
- یا «PNTF» برای فایل اعلانگر پردازش /proc؛
- یا «POBJ» برای فایل /proc/object؛
- یا «PODR» برای دایرکتوری /proc/object؛
- یا «POLP» برای یک فایل پردازش سبکوزن با قالب قدیمی /proc؛
- یا «POPF» برای یک فایل PID با قالب قدیمی /proc؛
- یا «POPG» برای یک فایل دادههای صفحه با قالب قدیمی /proc؛
- یا «PORT» برای یک لوله نامگذاریشده در SYSV؛
- یا «PREG» برای فایل ثباتهای /proc؛
- یا «PRMP» برای فایل /proc/rmap؛
- یا «PROCDSC» برای توصیفکننده پردازنده؛
- یا «PRTD» برای دایرکتوری ریشه /proc؛
- یا «PSGA» برای فایل /proc/sigact؛
- یا «PSIN» برای فایل /proc/psinfo؛
- یا «PSTA» برای فایل وضعیت /proc؛
- یا «PSXMQ» برای فایل صف پیام POSIX؛
- یا «PSXSEM» برای فایل سمافور POSIX؛
- یا «PSXSHM» برای فایل حافظه مشترک POSIX؛
- یا «PTS» برای فایل /dev/pts؛
- یا «PUSG» برای فایل /proc/usage؛
- یا «PW» برای فایل /proc/watch؛
- یا «PXMP» برای فایل /proc/xmap؛
- یا «REG» برای یک فایل معمولی؛
- یا «SHM» برای یک فایل حافظه مشترک؛
- یا «SMT» برای یک فایل انتقال حافظه مشترک؛
- یا «STR» برای streams؛
- یا «STSO» برای یک سوکت stream؛
- یا «UNKN» برای یک فایل ناشناخته؛
- یا «UNKNcwd» برای دایرکتوری کاری فعلی نامشخص؛
- یا «UNKNdel» برای فایل حذفشده نامشخص؛
- یا «UNKNfd» برای توصیفکننده فایل نامشخص؛
- یا «UNKNmem» برای فایل نگاشتشده در حافظه نامشخص؛
- یا «UNKNrtd» برای دایرکتوری ریشه نامشخص؛
- یا «UNKNtxt» برای متن برنامه نامشخص؛
- یا «UNNM» برای فایلی با نوع بینام؛
- یا «XNAM» برای یک فایل ویژه OpenServer Xenix از نوع ناشناخته؛
- یا «XSEM» برای یک فایل سمافور OpenServer Xenix؛
- یا «XSD» برای یک فایل دادههای مشترک OpenServer Xenix؛
- یا «NPOLICY» برای خطمشی شبکه Darwin؛
- یا «UNSP» برای یک فایل پشتیبانینشده؛
- یا چهار بایت (اکتت) شماره نوع اگر نام متناظر شناختهشده نباشد.
- FILE-ADDR
- حاوی نشانی ساختار فایل در هسته است هنگامی که f برای +f مشخص شده باشد؛
- FCT
- حاوی تعداد ارجاعهای فایل از ساختار فایل هسته است هنگامی که c برای +f مشخص شده باشد؛
- FILE-FLAG
- هنگامی که g یا G برای +f مشخص شده باشد، این فیلد شامل محتویات عضو f_flag[s] از ساختار فایل هسته و پرچمهای فایل باز اختصاصی هر فرآیند در هسته (در صورت موجود بودن) است؛ گزینه `G' باعث میشود آنها در مبنای شانزده (هگزادسیمال) نمایش داده شوند؛ گزینه `g' به صورت نامهای اختصاری؛ ممکن است دو فهرست با ورودیهای جداشده با کاما نمایش داده شوند که این دو فهرست با یک نقطه-ویرگول (`;`) از هم جدا شدهاند؛ فهرست اول میتواند شامل نامهای اختصاری برای مقادیر f_flag[s] از جدول زیر باشد:
-
AIO asynchronous I/O (e.g., FAIO) AP append ASYN asynchronous I/O (e.g., FASYNC) BAS block, test, and set in use BKIU block if in use BL use block offsets BSK block seek CA copy avoid CIO concurrent I/O CLON clone CLRD CL read CR create DF defer DFI defer IND DFLU data flush DIR direct DLY delay DOCL do clone DSYN data-only integrity DTY must be a directory EVO event only EX open for exec EXCL exclusive open FSYN synchronous writes GCDF defer during unp_gc() (AIX) GCMK mark during unp_gc() (AIX) GTTY accessed via /dev/tty HUP HUP in progress KERN kernel KIOC kernel-issued ioctl LCK has lock LG large file MBLK stream message block MK mark MNT mount MSYN multiplex synchronization NATM don't update atime NB non-blocking I/O NBDR no BDRM check NBIO SYSV non-blocking I/O NBF n-buffering in effect NC no cache ND no delay NDSY no data synchronization NET network NFLK don't follow links NMFS NM file system NOTO disable background stop NSH no share NTTY no controlling TTY OLRM OLR mirror PAIO POSIX asynchronous I/O PATH path PP POSIX pipe R read RC file and record locking cache REV revoked RSH shared read RSYN read synchronization RW read and write access SL shared lock SNAP cooked snapshot SOCK socket SQSH Sequent shared set on open SQSV Sequent SVM set on open SQR Sequent set repair on open SQS1 Sequent full shared open SQS2 Sequent partial shared open STPI stop I/O SWR synchronous read SYN file integrity while writing TCPM avoid TCP collision TMPF temporary file TR truncate W write WKUP parallel I/O synchronization WTG parallel I/O synchronization VH vhangup pending VTXT virtual text XL exclusive lock
- این فهرست نامها از #defineهای *F در فایلهای سرآیند گویشها <fcntl.h>، <linux</fs.h>، <sys/fcntl.c>، <sys/fcntlcom.h> و <sys/file.h> برگرفته شده است؛ برای مشاهده فهرستی که تطابق بین نامهای اختصاری بالا و تعاریف فایلهای سرآیند را نشان میدهد، فایل سرآیند common.h را ببینید؛
- فهرست دوم (پس از نقطه-ویرگول) میتواند شامل نامهای اختصاری برای پرچمهای فایل باز به ازای هر فرآیند در هسته از این جدول باشد:
-
ALLC allocated BR the file has been read BHUP activity stopped by SIGHUP BW the file has been written CLSG closing CX close-on-exec (see fcntl(F_SETFD)) LCK lock was applied MP memory-mapped OPIP open pending - in progress RSVW reserved wait SHMT UF_FSHMAT set (AIX) USE in use (multi-threaded)
- NODE-ID
- (یا INODE-ADDR برای برخی گویشها) حاوی یک شناسه یکتا برای گره فایل است (معمولاً نشانی vnode یا inode در هسته، اما گاهی ترکیبی از شماره دستگاه و شماره گره) هنگامی که n برای +f مشخص شده باشد؛
- DEVICE
- حاوی شمارههای دستگاه، جداشده با کاما، برای یک فایل کاراکتری ویژه، بلوکی ویژه، معمولی، دایرکتوری یا فایل NFS است؛
- یا «memory» برای یک گره فایلسیستم حافظه تحت Tru64 UNIX؛
- یا نشانی ناحیه داده خصوصی یک stream سوکت Solaris؛
- یا یک نشانی مرجع هسته که فایل را مشخص میکند (برای نمونه، نشانی مرجع هسته ممکن است برای FIFOها استفاده شود)؛
- یا نشانی پایه یا نام دستگاه مربوط به یک دستگاه سوکت AX.25 لینوکس.
- معمولاً تنها ۳۲ بیت پایینی نشانیهای هسته Tru64 UNIX نمایش داده میشوند.
- SIZE، SIZE/OFF، یا OFFSET
- اندازه فایل یا آفست فایل به بایت است. مقداری در این ستون تنها در صورت در دسترس بودن نمایش داده میشود. lsof هر مقداری را که مناسب نوع فایل و نسخه lsof باشد - اندازه یا آفست - نمایش میدهد.
- در برخی گویشهای یونیکس، lsof نمیتواند اطلاعات دقیق یا سازگاری از آفست فایل را از منابع داده هسته خود به دست آورد، گاهی فقط برای نوع خاصی از فایلها (مانند فایلهای سوکت). در موارد دیگر، فایلها اندازه واقعی ندارند - مانند سوکتها، FIFOها، لولهها - بنابراین lsof برای اندازه آنها مقادیر محتوایی را که در توصیفکنندههای بافر هسته مییابد نمایش میدهد (مانند تعداد اندازه بافر سوکت یا اندازههای پنجره TCP/IP). برای اطلاعات بیشتر به FAQ دستور lsof (بخش FAQ مکان آن را مشخص میکند) مراجعه کنید.
- اندازه فایل در مبنای ۱۰ نمایش داده میشود؛ آفست معمولاً در مبنای ۱۰ با پیشوند «0t» در صورتی که ۸ رقم یا کمتر داشته باشد نمایش مییابد؛ و در صورت داشتن بیش از ۸ رقم، در مبنای ۱۶ با پیشوند «0x» نمایش داده میشود. (برای اطلاعات درباره شرایطی که ممکن است مقدار پیشفرض ۸ به مقدار دیگری تغییر کند، به توضیحات گزینه -o o مراجعه کنید).
- بنابراین، پیشوندهای «0t» و «0x» آفست را در شرایطی که ستون ممکن است حاوی هر دوی اندازه و آفست باشد (یعنی عنوان آن SIZE/OFF است) مشخص میکنند.
- اگر گزینه -o مشخص شده باشد، lsof همیشه آفست فایل را نمایش میدهد (یا در صورت عدم دسترسی به آفست هیچچیز نمایش نمیدهد) و عنوان ستون را OFFSET میگذارد. آفست همیشه همانطور که در بالا توضیح داده شد با «0t» یا «0x» شروع میشود.
- کاربر lsof میتواند تغییر وضعیت از «0t» به «0x» را با استفاده از گزینه -o o کنترل کند. برای اطلاعات بیشتر به توضیحات این گزینه مراجعه کنید.
- اگر گزینه -s مشخص شده باشد، lsof همیشه اندازه فایل را نمایش میدهد (یا در صورت عدم دسترسی به اندازه هیچچیز نمایش نمیدهد) و عنوان ستون را SIZE میگذارد. گزینههای -o و -s مانعةالجمع هستند؛ هر دو نمیتوانند همزمان مشخص شوند.
- اگر گزینه -H مشخص شده باشد، lsof اندازه فایل را در قالبی خوانا برای انسان نمایش میدهد.
- برای فایلهایی که اندازه ثابت ندارند - برای مثال، روی یک دستگاه دیسک قرار ندارند - در صورتی که اطلاعات مربوط به اندازه فعلی یا موقعیت فایل در ساختارهای کرنل تعریفکننده فایل موجود باشد، lsof اطلاعات مناسب را نمایش خواهد داد.
- یا شماره inode یک فایل NFS در میزبان سرور؛
- یا نوع پروتکل اینترنت - مانند «TCP»؛
- یا «STR» برای یک استریم؛
- یا «CCITT» برای یک سوکت HP-UX x.25؛
- یا شماره IRQ یا inode یک دستگاه سوکت Linux AX.25.
- NAME
- نام نقطه اتصال (mount point) و سیستم فایلی است که فایل روی آن قرار دارد؛
- یا نام فایلی که در گزینه names مشخص شده است (پس از برطرف شدن هرگونه پیوند نمادین)؛
- یا نام یک دستگاه خاص کاراکتری یا بلوکی؛
- یا آدرسهای اینترنتی محلی و راه دور یک فایل شبکه؛ نام میزبان محلی یا شماره IP با یک دو نقطه (':')، درگاه (port)، «->»، و آدرس دورافتاده دو بخشی دنبال میشود؛ آدرسهای IP بسته به گزینههای +|-M، -n، و -P ممکن است به صورت عدد یا نام گزارش شوند؛ شمارههای IPv6 که با دونقطه جدا شدهاند درون براکت قرار میگیرند؛ آدرسهای INADDR_ANY در IPv4 و IN6_IS_ADDR_UNSPECIFIED در IPv6 و شماره درگاههای صفر با یک ستاره ('*') نمایش داده میشوند؛ یک آدرس مقصد UDP ممکن است با مدت زمان سپری شده از زمان ارسال آخرین بسته به مقصد همراه باشد؛ آدرسهای دوردست TCP، UDP و UDPLITE ممکن است با اطلاعات TCP/TPI درون پرانتز دنبال شوند - وضعیت (مانند «(ESTABLISHED)»، «(Unbound)»)، اندازه صفها و اندازه پنجرهها (نه در همه نسخههای یونیکس) - به روشی مشابه آنچه netstat(1) گزارش میدهد؛ برای اطلاعات بیشتر در مورد وضعیت، اندازه صف و اندازه پنجره به توضیحات گزینه -T یا توضیحات فیلد TCP/TPI در بخش خروجی برای برنامههای دیگر (OUTPUT FOR OTHER PROGRAMS) مراجعه کنید؛
- یا آدرس یا نام یک سوکت دامنه یونیکس (UNIX domain socket)، که احتمالاً شامل نام دستگاه stream clone، مسیر شیء سیستم فایل، آدرسهای کرنل محلی و خارجی، اطلاعات جفت سوکت و یک آدرس vnode مقید (bound) است؛
- یا نامهای نقطه اتصال محلی و راه دور یک فایل NFS؛
- یا «STR»، به همراه نام استریم؛
- یا نام یک دستگاه کاراکتری استریم، به همراه «->» و نام استریم یا فهرستی از نامهای ماژول استریم که با «->» جدا شدهاند؛
- یا «STR:» به همراه نامهای ماژول و دستگاه استریم SCO OpenServer که با «->» جدا شدهاند؛
- یا نام دایرکتوری سیستم، « -- »، و هر تعداد از مؤلفههای مسیر که lsof بتواند در حافظه نهان نام کرنل (kernel's name cache) برای نسخههای انتخابی یونیکس بیابد (برای اطلاعات بیشتر بخش حافظه نهان نام در کرنل (KERNEL NAME CACHE) را ببینید.)؛
- یا «PIPE->»، به همراه آدرس مقصد لوله کرنل سولاریس (Solaris)؛
- یا «COMMON:»، به همراه نام دستگاه ساختار اطلاعات دستگاه vnode، برای یک vnode مشترک Solaris؛
- یا خانواده آدرس (address family)، به همراه یک اسلش (`/`)، به همراه چهارده بایت جدا شده با کاما از یک آدرس سوکت خام غیر اینترنتی؛
- یا آدرس محلی HP-UX x.25، به همراه شماره اتصال مجازی (در صورت وجود)، به همراه آدرس راه دور (در صورت وجود)؛
- یا «(dead)» برای فایلهای تفکیکشده (disassociated) یونیکس Tru64 - معمولاً فایلهای ترمینالی که با ioctl دستور TIOCNOTTY علامتگذاری شده و توسط دیمنها بسته شدهاند؛
- یا «rd=<offset>» و «wr=<offset>» برای مقادیر آفست خواندن و نوشتن یک FIFO؛
- یا «clone n:/dev/event» برای کلونهای فایل SCO OpenServer از دستگاه /dev/event که در آن n شماره دستگاه فرعی (minor device number) فایل است؛
- یا «(socketpair: n)» برای یک سوکت دامنه یونیکس Solaris 2.6، 8، 9 یا 10، ایجاد شده توسط تابع شبکه socketpair(3N)؛
- یا «no PCB» برای فایلهای سوکتی که فاقد بلوک کنترل پروتکل (protocol block) مرتبط با خود هستند، که اختیاری با «, CANTSENDMORE» در صورت غیرفعال شدن ارسال روی سوکت، یا «, CANTRCVMORE» در صورت غیرفعال شدن دریافت روی سوکت (برای مثال توسط تابع shutdown(2)) دنبال میشود؛
- یا آدرسهای محلی و راه دور یک فایل سوکت Linux IPX در قالب <net>:[<node>:]<port>، که در پرانتز با اندازه صفهای ارسال و دریافت و وضعیت اتصال دنبال میشود؛
- یا «dgram» یا «stream» برای نوع سوکتهای دامنه یونیکس درون کرنل در UnixWare 7.1.1 و بالاتر، به همراه دو نقطه (':') و نام مسیر محلی در صورت در دسترس بودن، به همراه «->» و نام مسیر دوردست یا آدرس هگزادسیمال سوکت کرنل در صورت در دسترس بودن؛
- یا مقدار اتصال (association value)، شاخص اتصال، مقدار نقطه پایانی (endpoint)، آدرس محلی، درگاه محلی، آدرس دوردست و درگاه دوردست برای سوکتهای Linux SCTP؛
- یا «protocol: » به همراه ویژگی پروتکل سوکت لینوکس.
برای نسخههایی که از سیستم فایل «namefs» پشتیبانی میکنند و اجازه میدهند یک فایل با fattach(3C) به فایل دیگری متصل شود، lsof عبارت «(FA:<address1><direction><address2>)» را به ستون NAME اضافه میکند. <address1> و <address2> آدرسهای هگزادسیمال vnode هستند. اگر <address2> به این vnode با آدرس <address1> متصل (fattach) شده باشد، <direction> برابر با «<-» خواهد بود؛ و اگر <address1> (آدرس همین vnode) به <address2> متصل شده باشد، برابر با «->» خواهد بود. اگر <address1> قبلاً در ستون DEVICE آمده باشد، ممکن است حذف شود.
Lsof ممکن است برای فایلهای باز در Solaris 10 دو یادداشت درون پرانتز به ستون NAME بیفزاید: «(?)» اگر lsof دقت نام مسیر را مشکوک بداند؛ و «(deleted)» اگر گزینه -X مشخص شده باشد و lsof تشخیص دهد که نام مسیر فایل باز حذف شده است. برای اطلاعات بیشتر در مورد این موارد اضافه شده به ستون NAME، به بخش پرسشهای متداول (FAQ) در lsof (بخش FAQ مکان آن را مشخص میکند) مراجعه کنید.
قفلها (LOCKS)
Lsof نمیتواند تنوع گسترده قفلهای فایل در نسخههای مختلف یونیکس را به طور کامل در قالب یک تککاراکتر گزارش کند. آنچه در یک تککاراکتر گزارش میشود، مصالحهای است میان اطلاعاتی که در کرنل مییابد و محدودیتهای قالب گزارشدهی.
علاوه بر این، هنگامی که یک فرآیند چندین قفل در سطح بایت (byte level) روی یک فایل دارد، lsof تنها وضعیت اولین قفلی را که با آن مواجه میشود گزارش میدهد. اگر قفل در سطح بایت باشد، کاراکتر قفل با حروف کوچک - یعنی 'r'، 'w' یا 'x' - گزارش میشود، نه معادل حروف بزرگی که برای قفل کامل فایل گزارش میشود.
به طور کلی lsof تنها میتواند قفلهای نگهداشته شده توسط فرآیندهای محلی روی فایلهای محلی را گزارش دهد. هنگامی که یک فرآیند محلی قفلی را روی یک فایل متصل شده از راه دور (مانند NFS) تنظیم میکند، سرور میزبان دوردست معمولاً وضعیت قفل را ثبت میکند. یک استثنا Solaris است - در برخی سطوح وصله نسخه 2.3 و در تمامی نسخههای بالاتر از 2.4، کرنل Solaris اطلاعات قفلهای دوردست را در ساختارهای محلی ثبت میکند.
Lsof در گزارش قفلها برای برخی از نسخههای یونیکس دچار مشکل است. برای اطلاعات بیشتر به بخش اشکالات (BUGS) در این صفحه راهنما یا به FAQ در lsof (بخش FAQ مکان آن را مشخص میکند) مراجعه فرمایید.
خروجی برای برنامههای دیگر (OUTPUT FOR OTHER PROGRAMS)
هنگامی که گزینه -F مشخص شده باشد، lsof خروجی مناسب برای پردازش توسط برنامهای دیگر - مانند یک اسکریپت awk یا Perl یا یک برنامه C - تولید میکند.
هر واحد اطلاعاتی در یک فیلد خروجی داده میشود که با یک کاراکتر ابتدایی مشخص شده و با NL (012) (یا در صورت مشخص شدن کاراکتر شناسه فیلد 0 (صفر)، با NUL (000)) پایان مییابد. دادههای فیلد بلافاصله پس از کاراکتر شناسه فیلد میآیند و تا پایاندهنده فیلد ادامه مییابند.
میتوان خروجی فیلد را به صورت مجموعههای فرآیند و فایل در نظر گرفت. یک مجموعه فرآیند با فیلدی آغاز میشود که شناسهاش 'p' (برای شناسه فرآیند (PID)) است. این فیلد تا ابتدای فیلد PID بعدی یا ابتدای اولین مجموعه فایل فرآیند، هر کدام که زودتر باشد، امتداد مییابد. در مجموعه فرآیند فیلدهایی گنجانده شدهاند که دستور، شماره شناسه گروه فرآیند (PGID)، شناسه تسک (نخ) (TID)، و شماره شناسه کاربر (UID) یا نام ورود را مشخص میکنند.
یک مجموعه فایل با فیلدی شروع میشود که شناسهاش 'f' (برای توصیفکننده فایل یا file descriptor) است. خطوطی پس از آن میآیند که حالت دسترسی، وضعیت قفل، نوع، دستگاه، اندازه، آفست، inode، پروتکل، نام فایل و نامهای ماژول استریم را توصیف میکنند. این مجموعه تا ابتدای فایل بعدی یا مجموعه فرآیند بعدی، هر کدام که زودتر باشد، امتداد مییابد.
هنگامی که پایاندهنده فیلد NUL (000) با کاراکتر شناسه فیلد 0 (صفر) انتخاب شده باشد، lsof هر مجموعه فرآیند و فایل را با یک کاراکتر NL (012) پایان میدهد.
Lsof همیشه یک فیلد تولید میکند: فیلد PID ('p'). در حالت تکرار، نشانگر ('m') نیز تولید میشود. تمامی فیلدهای دیگر میتوانند به صورت اختیاری در فهرست کاراکترهای شناسه فیلد که پس از گزینه -F میآید، اعلام شوند. هنگامی که یک کاراکتر انتخاب فیلد، موردی را مشخص میکند که lsof به طور معمول فهرست نمیکند - مانند PPID که با -R - انتخاب میشود - تعیین کاراکتر فیلد - برای مثال «-FR» - همچنین فهرست کردن آن مورد را انتخاب میکند.
در نسخههای 4.88 تا 4.93.2 از lsof همیشه یک فیلد دیگر نیز تولید میشد، یعنی فیلد توصیفکننده فایل ('f'). با این حال، lsof در این نسخه آن را تولید نمیکند. این تغییر برای پشتیبانی از حالتی است که کاربر تنها به فیلد PID نیاز دارد و نیازی به فیلد توصیفکننده فایل ندارد. در صورت نیاز به این فیلد، 'f' را صراحتاً مشخص کنید.
کاملاً ممکن است مجموعهای از فیلدها را انتخاب کنید که تجزیه آسان آنها دشوار باشد - برای مثال اگر فیلد توصیفکننده فایل انتخاب نشده باشد، شناسایی مجموعههای فایل ممکن است دشوار شود. برای کمک به جلوگیری از این دشواری، lsof از گزینه -F پشتیبانی میکند؛ این گزینه خروجی تمامی فیلدها را با پایاندهندههای NL انتخاب میکند (جفت گزینه -F0 خروجی تمام فیلدها را با پایاندهندههای NUL انتخاب میکند). به دلایل سازگاری، نه -F و نه -F0 فیلد دستگاه خام (raw device) را انتخاب نمیکنند.
اینها فیلدهایی هستند که lsof تولید خواهد کرد. تککاراکتری که ابتدا فهرست شده شناسه فیلد است.
a حالت دسترسی به فایل (file access mode) c نام دستور فرآیند (تمام کاراکترها از ساختار proc یا user) C شمارنده اشتراک ساختار فایل (file structure share count) d کد کاراکتری دستگاه فایل D شماره دستگاه اصلی/فرعی فایل (0x<hexadecimal>) f توصیفکننده فایل (file descriptor) F آدرس ساختار فایل (0x<hexadecimal>) G فلگهای فایل (0x<hexadecimal>؛ نامها در صورتی که با +fg همراه باشد) g شناسه گروه فرآیند (process group ID) i شماره inode فایل K شناسه تسک (tasK ID) k تعداد پیوندها (link count) l وضعیت قفل فایل L نام ورود فرآیند (login name) m نشانگر بین خروجیهای تکرار شونده (همیشه در حالت تکرار انتخاب میشود) M نام دستور تسک (task comMand name) n نام فایل، توضیحات، آدرس اینترنت N شناسه نود (0x<hexadecimal>) o آفست فایل (0t<decimal> یا 0x<hexadecimal>، گزینه -o o را ببینید) p شناسه فرآیند (همیشه انتخاب میشود) P نام پروتکل r شماره دستگاه خام (0x<hexadecimal>) R شناسه فرآیند والد (parent process ID) s اندازه فایل (دهدهی) S شناسه استریم فایل t نوع فایل T اطلاعات TCP/TPI که با پیشوندها مشخص میشوند (علامت '=' بخشی از پیشوند است): QR=<read queue size> QS=<send queue size> SO=<socket options and values> (نه در همه نسخهها) SS=<socket states> (نه در همه نسخهها) ST=<connection state> TF=<TCP flags and values> (نه در همه نسخهها) WR=<window read size> (نه در همه نسخهها) WW=<window write size> (نه در همه نسخهها) (اطلاعات TCP/TPI برای همه نسخههای پشتیبانیشده یونیکس گزارش نمیشود. خروجی راهنمای -h یا -? برای گزینه -T نشان میدهد چه گزارشهای TCP/TPI قابل درخواست است.) u شناسه کاربر فرآیند (user ID) z نام منطقه (zone name) در Solaris 10 و بالاتر Z زمینه امنیتی SELinux (هنگام غیرفعال بودن SELinux مهار میشود) 0 استفاده از کاراکتر پایاندهنده فیلد NUL به جای NL 1-9 شناسههای فیلد مخصوص هر نسخه یونیکس (خروجی -F? اطلاعات موجود در فیلدهای مخصوص هر نسخه را مشخص میکند.)
میتوانید با مشخص کردن جفت گزینه -F? اطلاعات راهنمای برخط در مورد این کاراکترها و توضیحات آنها را دریافت کنید. (کاراکتر '?' را مطابق نیاز شل خود اسکیپ کنید.) اطلاعات بیشتر درباره محتوای فیلد را میتوانید در بخش خروجی (OUTPUT) بیابید.
به عنوان مثال، «-F pcfn» فیلدهای شناسه فرآیند ('p')، نام دستور ('c')، توصیفکننده فایل ('f') و نام فایل ('n') را با کاراکتر پایاندهنده فیلد NL انتخاب میکند؛ «-F pcfn0» همان خروجی را با کاراکتر پایاندهنده فیلد NUL (000) انتخاب میکند.
Lsof تمام فیلدها را برای هر فرآیند یا مجموعه فایل تولید نمیکند، بلکه تنها مواردی را که در دسترس هستند ارائه میدهد. برخی فیلدها مانعةالجمع هستند: کاراکترهای دستگاه فایل و شمارههای اصلی/فرعی دستگاه فایل؛ شماره inode فایل و نام پروتکل؛ نام فایل و شناسه استریم؛ اندازه فایل و آفست. یکی از اعضای این مجموعههای مانعةالجمع در خروجی فیلد ظاهر خواهد شد، نه هر دو.
بهطور معمول lsof هر فیلد را با یک نویسه NL (012) به پایان میرساند. میتوان نویسه شناسه فیلد 0 (صفر) را برای تغییر نویسه پایاندهنده فیلد به NUL (000) مشخص کرد. یک پایاندهنده NUL ممکن است پردازش را به عنوان مثال با xargs (1) یا با برنامههایی که سازوکار نقلقول آنها ممکن است بهراحتی با دامنه نویسهها در خروجی فیلد سازگار نباشد، آسانتر کند. هنگامی که پایاندهنده فیلد NUL استفاده میشود، lsof هر مجموعه فرآیند و فایل را با یک NL (012) پایان میدهد.
سه ابزار کمکی برای ایجاد برنامههایی که میتوانند خروجی فیلد lsof را پردازش کنند، در توزیع lsof گنجانده شده است. اولین مورد یک فایل هدر C به نام lsof_fields.h است که حاوی نمادهایی برای نویسههای شناسایی فیلد، اندیسهایی برای ذخیره آنها در یک جدول، و رشتههای توضیحی است که میتوانند در برنامهها کامپایل شوند. دستور lsof از این فایل هدر استفاده میکند.
ابزار کمکی دوم مجموعهای از اسکریپتهای نمونه برای پردازش خروجی فیلد است که با awk، Perl 4 و Perl 5 نوشته شدهاند. آنها در زیرشاخه scripts از توزیع lsof قرار دارند.
ابزار کمکی سوم کتابخانه C مورد استفاده برای مجموعه آزمون lsof است. مجموعه آزمون به زبان C نوشته شده است و از خروجی فیلد برای اعتبارسنجی عملکرد صحیح lsof استفاده میکند. این کتابخانه را میتوان در فایل tests/LTlib.c از توزیع lsof یافت. این کتابخانه از ابزار کمکی اول، یعنی فایل هدر lsof_fields.h استفاده میکند.
مسدودسازیها و مهلتهای زمانی (BLOCKS AND TIMEOUTS)
دستور lsof میتواند توسط برخی توابع هسته که استفاده میکند مسدود شود - lstat(2)، readlink(2) و stat(2). این توابع زمانی در هسته متوقف میشوند که به عنوان مثال، میزبانهایی که سیستمهای فایل NFS سوارشده روی آنها قرار دارند غیرقابل دسترس شوند.
دستور lsof تلاش میکند این مسدودسازیها را با استفاده از تایمرها و فرآیندهای فرزند بشکند، اما این روشها کاملاً قابل اعتماد نیستند. زمانی که lsof موفق به شکستن یک مسدودسازی شود، آن را با یک پیام خطا گزارش میکند. این پیامها را میتوان با گزینههای -t و -w پنهان کرد.
مقدار پیشفرض مهلت زمانی را میتوان با گزینه -h یا -? نمایش داد، و میتوان آن را با گزینه -S [t] تغییر داد. حداقل مقدار برای t دو ثانیه است، اما باید از مقادیر کم خودداری کنید، زیرا پاسخدهی کُند سیستم میتواند باعث شود مهلتهای زمانی کوتاه بهطور غیرمنتظره منقضی شوند و احتمالاً lsof را پیش از آنکه بتواند خروجی تولید کند متوقف سازند.
هنگامی که lsof مجبور است یک مسدودسازی را هنگام دسترسی به اطلاعات سیستم فایل سوارشده بشکند، معمولاً به کار خود ادامه میدهد، اگرچه اطلاعات کمتری برای نمایش درباره فایلهای باز در دسترس خواهد داشت.
همچنین میتوان با مشخص کردن گزینه -O به lsof دستور داد تا هنگام استفاده از توابع هستهای که ممکن است مسدود شوند، از حفاظت تایمرها و فرآیندهای فرزند صرفنظر کند. اگرچه این کار به lsof اجازه میدهد با بار اضافی کمتری شروع به کار کند، اما lsof را کاملاً در معرض شرایط هسته که ممکن است آن را مسدود کنند قرار میدهد. از این گزینه با احتیاط استفاده کنید.
اجتناب از مسدودسازیهای هسته (AVOIDING KERNEL BLOCKS)
میتوانید از گزینه -b استفاده کنید تا به lsof بگویید از استفاده از توابع هستهای که مسدود میشوند خودداری کند. برخی نکات احتیاطی اعمال میشوند.
نخست، استفاده از این گزینه معمولاً مستلزم آن است که سیستم شما شمارههای دستگاه جایگزین را به جای شمارههای دستگاهی که lsof بهطور معمول با توابع هسته lstat(2) و stat(2) به دست میآورد، ارائه دهد. برای اطلاعات بیشتر درباره شمارههای دستگاه جایگزین، بخش ALTERNATE DEVICE NUMBERS را ببینید.
دوم، شما نمیتوانید names را برای مکانیابی توسط lsof مشخص کنید مگر اینکه نامهای سیستم فایل باشند. دلیل این امر آن است که lsof باید شمارههای دستگاه و inode فایلهای فهرستشده با names در گزینههای lsof را بداند، و گزینه -b مانع از دریافت آنها توسط lsof میشود. علاوه بر این، از آنجا که lsof تنها شمارههای دستگاه را برای سیستمهای فایلی که جایگزین دارند در اختیار دارد، توانایی آن در مکانیابی فایلها روی سیستمهای فایل کاملاً به در دسترس بودن و دقت موارد جایگزین بستگی دارد. اگر هیچ جایگزینی در دسترس نباشد، یا اگر نادرست باشند، lsof قادر نخواهد بود فایلها را روی سیستمهای فایل نامبرده مکانیابی کند.
سوم، اگر نام دایرکتوریهای سیستم فایل شما که lsof از جدول سوارشدن سیستم دریافت میکند پیوندهای نمادین باشند، lsof قادر به حل این پیوندها نخواهد بود. دلیل این است که گزینه -b باعث میشود lsof از تابع هسته readlink(2) که برای حل پیوندهای نمادین استفاده میکند اجتناب ورزد.
در نهایت، استفاده از گزینه -b باعث میشود lsof هنگامی که نیاز به استفاده از توابع هستهای دارد که گزینه -b دستور به اجتناب از آنها میدهد، پیامهای هشدار صادر کند. میتوانید با مشخص کردن گزینه -w این پیامها را پنهان کنید، اما اگر چنین کنید، شمارههای دستگاه جایگزین گزارششده در پیامهای هشدار را نخواهید دید.
شمارههای دستگاه جایگزین (ALTERNATE DEVICE NUMBERS)
در برخی نگارشها، هنگامی که lsof مجبور است مسدودسازی را بشکند به این دلیل که نمیتواند اطلاعات مربوط به یک سیستم فایل سوارشده را از طریق توابع هسته lstat(2) و stat(2) به دست آورد، یا به این دلیل که شما گزینه -b را مشخص کردهاید، lsof میتواند برخی از اطلاعات مورد نیاز خود - شماره دستگاه و احتمالاً نوع سیستم فایل - را از جدول سوارشدن سیستم به دست آورد. در صورت امکان، lsof شماره دستگاه دریافت شده را گزارش خواهد کرد. (میتوانید با مشخص کردن گزینه -w این گزارش را پنهان کنید.)
اگر جدول سوارشدن شما توسط یک فایل /etc/mtab یا /etc/mnttab پشتیبانی میشود که شامل فیلد گزینهها است، میتوانید با افزودن یک فیلد "dev=xxxx" برای نقاط سوارشدنی که فاقد آن در رشته گزینههای خود هستند به این فرآیند کمک کنید. نکته: شما باید بتوانید فایل را ویرایش کنید - یعنی برخی جداول سوارشدن مانند /etc/mnttab در نسخههای اخیر Solaris یا /proc/mounts در لینوکس فقطخواندنی (read-only) هستند و قابل تغییر نیستند.
همچنین ممکن است بتوانید با استفاده از گزینههای +m و +m m شمارههای دستگاه را ارائه دهید، به شرطی که توسط نگارش سیستم شما پشتیبانی شوند. خروجی گزینههای -h یا -? در lsof را بررسی کنید تا ببینید آیا گزینههای +m و +m m در دسترس هستند یا خیر.
بخش "xxxx" از فیلد، مقدار هگزادسیمال شماره دستگاه سیستم فایل است. (برای مقادیر مناسب سیستمهای فایل خود، فیلد st_dev خروجی توابع lstat(2) و stat(2) را بررسی کنید.) در اینجا یک مثال از /etc/mnttab در Sun Solaris 2.6 برای یک سیستم فایل که از راه دور از طریق NFS سوار شده آمده است:
nfs ignore,noquota,dev=2a40001
داشتن ورودیهای "dev=xxxx" در فایل جدول سوارشدن مزیت دارد، بهویژه برای سیستمهای فایلی که از سرورهای راه دور NFS سوار شدهاند. هنگامی که یک سرور راه دور از کار میافتد و میخواهید با اجرای lsof روی یکی از کلاینتهای آن کاربرانش را شناسایی کنید، lsof احتمالاً قادر به دریافت خروجی از توابع lstat(2) و stat(2) برای آن سیستم فایل نخواهد بود. اگر بتواند شماره دستگاه سیستم فایل را از جدول سوارشدن به دست آورد، قادر خواهد بود فایلهای باز روی سرور NFS از کار افتاده را نمایش دهد.
برخی نگارشها که از یک فایل اسکی /etc/mtab یا /etc/mnttab برای جدول سوارشدن استفاده نمیکنند ممکن است همچنان یک شماره دستگاه جایگزین در جداول سوارشدن داخلی خود ارائه دهند. این شامل AIX، Apple Darwin، FreeBSD، NetBSD، OpenBSD و Tru64 UNIX میشود. دستور lsof میداند چگونه شماره دستگاه جایگزین را برای این نگارشها به دست آورد و هنگامی که تلاش آن برای اجرای lstat(2) یا stat(2) روی سیستم فایل مسدود میشود، از آن استفاده میکند.
اگر مطمئن نیستید که نگارش سیستم شما شمارههای دستگاه جایگزین را برای سیستمهای فایل از جدول سوارشدن خود ارائه میدهد یا خیر، از این دستور lsof استفاده کنید تا ببینید آیا شماره دستگاه جایگزینی گزارش میکند:
- lsof -b
به دنبال پیامهای هشدار فایل خطای استاندارد باشید که با "assuming "dev=xxxx" from ..." آغاز میشوند.
حافظه پنهان نام در هسته (KERNEL NAME CACHE)
دستور lsof قادر است در برخی نگارشها برای اکثر انواع سیستم فایل به جز AFS، حافظه پنهان نام هسته را بررسی کند یا از سایر امکانات هسته (مانند تابع tag_to_path() در ADVFS 4.x تحت Tru64 UNIX) استفاده کرده و بخشهای نام مسیر اخیراً استفادهشده را از آن استخراج کند. (جستجوهای مسیر سیستم فایل AFS از حافظه پنهان نام هسته استفاده نمیکنند؛ برخی عملیات سیستم فایل Solaris VxFS نیز ظاهراً از آن استفاده نمیکنند.)
دستور lsof مسیرهای کاملی را که پیدا میکند در ستون NAME گزارش میدهد. اگر lsof نتواند تمام بخشهای یک مسیر را گزارش کند، در ستون NAME نام سیستم فایل و به دنبال آن یک فاصله، دو نویسه `-'، یک فاصله دیگر، و بخشهای نام که پیدا کرده است را به صورت جدا شده با نویسه `/' گزارش میدهد.
هنگامی که lsof در حالت تکرار اجرا میشود - یعنی با مشخص کردن گزینه -r - میزانی که میتواند بخشهای نام مسیر را برای همان فایل گزارش کند ممکن است از چرخهای به چرخه دیگر متفاوت باشد. دلیل این است که سایر فرآیندهای در حال اجرا میتوانند باعث شوند هسته ورودیها را از حافظه پنهان نام خود حذف کرده و آنها را با موارد دیگر جایگزین کند.
استفاده lsof از حافظه پنهان نام هسته برای شناسایی مسیرهای فایلها میتواند تحت شرایط خاصی منجر به گزارش بخشهای نادرست شود. این حالت زمانی رخ میدهد که حافظه پنهان نام هسته از شماره دستگاه و گره (node) به عنوان کلید استفاده کند (مانند SCO OpenServer) و کلیدی در یک سیستم فایل با تغییرات سریع دوباره استفاده شود. اگر هسته نگارش یونیکس ورودی حافظه پنهان نام را برای یک فایل در هنگام لغو پیوند (unlinked) پاک نکند، lsof ممکن است ارجاعی به ورودی اشتباه در حافظه پنهان بیابد. بخش پرسشهای متداول lsof (بخش FAQ موقعیت آن را مشخص میکند) اطلاعات بیشتری در مورد این وضعیت دارد.
دستور lsof میتواند بخشهای نام مسیر را برای این نگارشها گزارش دهد:
FreeBSD HP-UX Linux NetBSD SCO OpenServer SCO|Caldera UnixWare Solaris Tru64 UNIX
دستور lsof نمیتواند بخشهای نام مسیر را برای این نگارشها گزارش دهد:
AIX OpenBSD
اگر میخواهید بدانید چرا lsof نمیتواند اجزای نام مسیر را برای برخی از گویشها گزارش کند، به lsof FAQ مراجعه کنید (بخش FAQ مکان آن را مشخص میکند.)
فایل کش دستگاه (DEVICE CACHE FILE)
بررسی تمامی اعضای درخت گرههای /dev (یا /devices) با توابع stat(2) میتواند زمانبر باشد. علاوه بر این، اطلاعاتی که lsof به آن نیاز دارد - شماره دستگاه، شماره inode، و مسیر - بهندرت تغییر میکنند.
در نتیجه، lsof معمولاً یک فایل متنی ASCII از اطلاعات ذخیرهشده کش /dev (یا /devices) نگهداری میکند (استثنا: lsof لینوکس مبتنی بر /proc که در آن نیازی به این کار نیست.) مدیر سیستم محلی که lsof را میسازد میتواند نحوه تشکیل مسیر فایل کش دستگاه را کنترل کرده و از میان این گزینهها انتخاب کند:
مسیر حاصل از گزینه -D؛ مسیر حاصل از یک متغیر محیطی؛ مسیر سراسری در سطح سیستم؛ مسیر شخصی (پیشفرض)؛ مسیر شخصی، تغییریافته با یک متغیر محیطی.
برای آگاهی از وضعیت فعلی پشتیبانی از کش دستگاه، خروجی گزینههای راهنمای -h، -D? یا -? را بررسی کنید. خروجی راهنما مسیر پیشفرض فایل کش دستگاه در حالت خواندن را که برای اجرای فعلی lsof معتبر است، فهرست میکند. خروجی گزینه -D? مسیرهای فایل کش دستگاه فقطخواندنی و نوشتنی، نام هرگونه متغیر محیطی قابل اعمال و قالب مسیر کش دستگاه شخصی را فهرست میکند.
Lsof میتواند از طریق بررسیهای یکپارچگی، از جمله محاسبه و اعتبارسنجی مجموع خطایابی چرخشی ۱۶ بیتی (CRC) روی محتوای فایل، متوجه شود که فایل کش دستگاه فعلی بهطور تصادفی یا مخرب دستکاری شده است. هنگامی که lsof اشکالی در فایل تشخیص دهد، یک پیام هشدار صادر میکند و تلاش میکند فایل کش فعلی را حذف کرده و یک نسخه جدید ایجاد کند، اما فقط در مسیری که فرایند مجاز به نوشتن در آن باشد.
مسیری که یک فرایند lsof ممکن است تلاش کند فایل کش دستگاه را از آن بخواند، ممکن است با مسیری که میتواند بهطور مجاز در آن بنویسد یکسان نباشد. بنابراین هنگامی که lsof تشخیص میدهد که باید فایل کش دستگاه را بهروزرسانی کند، ممکن است مسیر متفاوتی را برای نوشتن آن نسبت به مسیری که نسخه نادرست یا قدیمی را از آن خوانده بود، انتخاب کند.
در صورت در دسترس بودن، گزینه -Dr از نوشتن فایل کش دستگاه جدید جلوگیری میکند. (این گزینه همیشه در صورت تعیین بدون آرگومان نام مسیر در دسترس است.)
هنگامی که یک دستگاه جدید به سیستم اضافه میشود، ممکن است نیاز به بازسازی فایل کش دستگاه باشد. از آنجا که lsof زمان اصلاح (mtime) فایل کش دستگاه را با mtime و ctime دایرکتوری /dev (یا /devices) مقایسه میکند، معمولاً متوجه اضافه شدن دستگاه جدید میشود؛ در این حالت lsof یک پیام هشدار صادر کرده و تلاش میکند فایل کش دستگاه را بازسازی کند.
هر زمان که lsof یک فایل کش دستگاه را مینویسد، مالکیت آن را به UID واقعی فرایند اجراکننده و حالتهای دسترسی آن را روی 0600 تنظیم میکند، که خواندن و نوشتن آن را فقط به مالک فایل محدود میسازد.
مجوزهای LSOF که بر دسترسی به فایل کش دستگاه تأثیر میگذارند (LSOF PERMISSIONS THAT AFFECT DEVICE CACHE FILE ACCESS)
دو مورد از دسترسیهای فایل اجرایی lsof بر توانایی آن در دسترسی به فایلهای کش دستگاه تأثیر میگذارند. این دسترسیها توسط مدیر سیستم محلی هنگام نصب lsof تنظیم میشوند.
اولین و کمکاربردتر دسترسی، setuid-root است. این دسترسی زمانی اعمال میشود که lsof اجرا میشود؛ در این حالت UID مؤثر آن root است، در حالی که UID واقعی آن (یعنی کاربر واردشده به سیستم) root نیست. توزیع lsof توصیه میکند که نسخهها برای این گویشها بهصورت setuid-root اجرا شوند:
HP-UX 11.11 and 11.23 Linux
دومین و متداولترین دسترسی، setgid است. این دسترسی زمانی اعمال میشود که شناسه گروهی (GID) مؤثر فرایند lsof روی گروهی تنظیم شود که میتواند به دستگاههای حافظه هسته دسترسی داشته باشد - مانند "kmem"، "sys" یا "system".
فرایند lsof دارای دسترسی setgid معمولاً پس از دسترسی به دستگاههای حافظه هسته، این مجوز را واگذار (رها) میکند. هنگامی که این کار را انجام میدهد، lsof میتواند انعطافپذیری بیشتری در تشکیل مسیر کش دستگاه مجاز بداند. توزیع lsof توصیه میکند که نسخهها برای این گویشها بهصورت setgid اجرا شوند و اجازه داشته باشند مجوز setgid را واگذار کنند:
AIX 5.[12] and 5.3-ML1
Apple Darwin 7.x Power Macintosh systems
FreeBSD 4.x, 4.1x, 5.x and [6789].x for x86-based systems
FreeBSD 5.x, [6789].x and 1[012].8for Alpha, AMD64 and Sparc64
based systems
HP-UX 11.00
NetBSD 1.[456], 2.x and 3.x for Alpha, x86, and SPARC-based
systems
OpenBSD 2.[89] and 3.[0-9] for x86-based systems
SCO OpenServer Release 5.0.6 for x86-based systems
SCO|Caldera UnixWare 7.1.4 for x86-based systems
Solaris 2.6, 8, 9 and 10
Tru64 UNIX 5.1
(نکته: lsof برای AIX 5L و بالاتر در صورتی که از گزینه -X آن استفاده شود به مجوز setuid-root نیاز دارد.)
Lsof برای این گویشها از کش دستگاه پشتیبانی نمیکند، بنابراین دسترسیهای داده شده به فایل اجرایی برای فایل کش دستگاه اعمال نمیشوند:
Linux
مسیر فایل کش دستگاه از گزینه -D (DEVICE CACHE FILE PATH FROM THE -D OPTION)
گزینه -D روشهای محدودی را برای تعیین مسیر فایل کش دستگاه فراهم میکند. عملکرد ? آن مسیرهای فقطخواندنی و نوشتنی فایل کش دستگاه را که lsof استفاده خواهد کرد گزارش میدهد.
هنگامی که عملکردهای b، r و u از گزینه -D در دسترس باشند، میتوانید از آنها برای درخواست ساخته شدن فایل کش در یک مکان خاص (b[path])، خواندن اما عدم بازسازی (r[path])، یا خواندن و بازسازی (u[path]) استفاده کنید. عملکردهای b، r و u تحت برخی شرایط محدود هستند. آنها زمانی که فرایند lsof بهصورت setuid-root باشد محدود میشوند. مسیر مشخصشده با عملکرد r همیشه فقطخواندنی است، حتی زمانی که در دسترس باشد.
عملکردهای b، r و u همچنین زمانی که فرایند lsof بهصورت setgid اجرا شود و lsof مجوز setgid را واگذار نکند محدود میشوند. (برای فهرستی از پیادهسازیهایی که معمولاً مجوز setgid خود را واگذار نمیکنند به بخش LSOF PERMISSIONS THAT AFFECT DEVICE CACHE FILE ACCESS مراجعه کنید.)
یک عملکرد دیگر از -D، یعنی i (برای ignore یا نادیدهگرفتن)، همیشه در دسترس است.
در صورت در دسترس بودن، عملکرد b به lsof میگوید که اطلاعات دستگاه را با تابع stat(2) از هسته بخواند و یک فایل کش دستگاه در مسیر مشخصشده بسازد.
در صورت در دسترس بودن، عملکرد r به lsof میگوید که فایل کش دستگاه را بخواند اما آن را بهروزرسانی نکند. هنگامی که یک آرگومان مسیر به همراه -Dr بیاید، نام مسیر فایل کش دستگاه را مشخص میکند. عملکرد r هنگامی که بدون آرگومان نام مسیر مشخص شود همیشه در دسترس است. اگر lsof بهصورت setuid-root اجرا نشود و مجوز setgid خود را واگذار کند، یک آرگومان نام مسیر میتواند همراه عملکرد r ارائه شود.
در صورت در دسترس بودن، عملکرد u به lsof میگوید که برای خواندن و استفاده از فایل کش دستگاه تلاش کند. اگر نتواند فایل را بخواند، یا متوجه شود که محتوای فایل نادرست یا قدیمی است، اطلاعات را از هسته میخواند و تلاش میکند یک نسخه بهروزشده از فایل کش دستگاه را بنویسد، اما فقط در مسیری که آن را برای UIDهای مؤثر و واقعی فرایند lsof مجاز میداند.
مسیر کش دستگاه از متغیر محیطی (DEVICE CACHE PATH FROM AN ENVIRONMENT VARIABLE)
دومین اولویت lsof برای فایل کش دستگاه، محتوای متغیر محیطی LSOFDEVCACHE است. اگر فرایند lsof بهصورت setuid-root باشد، یا UID واقعی فرایند root باشد، از این انتخاب صرفنظر میکند.
یک محدودیت بیشتر برای مسیر فایل کش دستگاه برگرفته از متغیر محیطی LSOFDEVCACHE اعمال میشود: اگر فرایند lsof مجوز setgid خود را واگذار نکند، lsof فایل کش دستگاه را در آن مسیر نخواهد نوشت. (برای اطلاعات درباره پیادهسازیهایی که مجوز setgid خود را واگذار نمیکنند به بخش LSOF PERMISSIONS THAT AFFECT DEVICE CACHE FILE ACCESS مراجعه کنید.)
مدیر سیستم محلی میتواند هنگام ساخت lsof، استفاده از متغیر محیطی LSOFDEVCACHE را غیرفعال کند یا نام آن را تغییر دهد. برای آگاهی از نام متغیر محیطی، خروجی -D? را بررسی کنید.
مسیر کش دستگاه سراسری در سطح سیستم (SYSTEM-WIDE DEVICE CACHE PATH)
مدیر سیستم محلی ممکن است هنگام ساخت lsof تصمیم بگیرد یک فایل کش دستگاه در سطح کل سیستم داشته باشد. این فایل معمولاً توسط یک رویه مدیریتی ویژه سیستم هنگام بوت شدن سیستم یا هنگام تغییر محتویات /dev (یا /devices) ساخته میشود. در صورت تعریف شدن، این سومین اولویت مسیر فایل کش دستگاه برای lsof است.
میتوانید با بررسی خروجی گزینه راهنمای lsof - یعنی خروجی حاصل از گزینه -h یا -? - متوجه شوید که آیا فایل کش دستگاه سراسری برای نصب محلی شما فعال است یا خیر.
Lsof بهطور پیشفرض هرگز در مسیر فایل کش دستگاه سراسری سیستم نمینویسد. این مسیر باید صریحاً با یکی از عملکردهای -D در یک رویه متعلق به کاربر root مشخص شود. پس از نوشته شدن فایل، آن رویه باید حالتهای دسترسی آن را به 0644 (خواندن و نوشتن مالک، خواندن گروه، و خواندن دیگران) تغییر دهد.
مسیر کش دستگاه شخصی [پیشفرض] (PERSONAL DEVICE CACHE PATH (DEFAULT))
مسیر پیشفرض فایل کش دستگاه در توزیع lsof مسیری است که در دایرکتوری خانگی کاربر دارای UID واقعی اجراکننده lsof ثبت میشود. جزء دوم مسیر به فرم .lsof_hostname به دایرکتوری خانگی افزوده میشود.
این چهارمین اولویت مسیر فایل کش دستگاه برای lsof است و معمولاً گزینه پیشفرض به شمار میرود. اگر هنگام ساخت lsof یک مسیر فایل کش دستگاه سراسری تعریف شده باشد، این انتخاب چهارم زمانی اعمال خواهد شد که lsof نتواند فایل کش دستگاه سراسری سیستم را پیدا کند. این تنها زمانی است که lsof هنگام خواندن فایل کش دستگاه از دو مسیر استفاده میکند.
بخش hostname از جزء دوم، نام پایه میزبان اجراکننده است که توسط تابع gethostname(2) بازگردانده میشود. نام پایه بهصورت نویسههای قبل از اولین `.` در خروجی gethostname(2) تعریف میشود، یا کل خروجی gethostname(2) در صورتی که شامل `.` نباشد.
فایل حافظه موقت دستگاه متعلق به شناسه کاربری (user ID) است و تنها توسط همان شناسه کاربری قابل خواندن و نوشتن است - یعنی سطح دسترسی آن 0600 است. هر شناسه کاربری واقعی مجزا روی یک میزبان مشخص که lsof را اجرا میکند، یک فایل حافظه موقت دستگاه مجزا دارد. بخش hostname از مسیر، فایلهای حافظه موقت دستگاه را در دایرکتوری خانگی سوارشده با NFS که فایلهای حافظه موقت دستگاه از چندین میزبان مختلف در آن نوشته میشوند، متمایز میسازد.
مسیر فایل حافظه موقت دستگاه شخصی تشکیلشده با این روش، نشاندهنده یک فایل حافظه موقت دستگاه است که lsof تلاش خواهد کرد آن را بخواند، و در صورتی که وجود نداشته باشد یا محتوای آن نادرست یا قدیمی باشد، تلاش خواهد کرد آن را بازنویسی کند.
گزینه -Dr بدون آرگومان نام مسیر، از نوشتن یک فایل حافظه موقت دستگاه جدید جلوگیری میکند.
گزینه -D? مشخصات قالب (format specification) را برای ساخت فایل حافظه موقت دستگاه شخصی فهرست میکند. تبدیلهای استفادهشده در مشخصات قالب در فایل 00DCACHE از توزیع lsof شرح داده شدهاند.
مسیر اصلاحشده حافظه موقت دستگاه شخصی (MODIFIED PERSONAL DEVICE CACHE PATH)
اگر این گزینه توسط مدیر سیستم محلی در زمان ساخت lsof تعریف شده باشد، محتوای متغیر محیطی LSOFPERSDCPATH ممکن است برای افزودن یک جزء به مسیر فایل حافظه موقت دستگاه شخصی استفاده شود.
محتوای متغیر LSOFPERSDCPATH در محلی از مسیر درج میشود که توسط مدیر سیستم محلی با تبدیل «%p» در مشخصات قالب HASPERSDC فایل هدر machine.h لهجه مربوطه مشخص شده است. (این مقدار در توزیع پیشفرض lsof دقیقاً پس از دایرکتوری خانگی قرار میگیرد.)
بنابراین، برای مثال، اگر LSOFPERSDCPATH حاوی «LSOF»، دایرکتوری خانگی «/Homes/abe»، نام میزبان «lsof.itap.purdue.edu» و قالب HASPERSDC همان پیشفرض («%h/%p.lsof_%L») باشد، مسیر اصلاحشده فایل حافظه موقت دستگاه شخصی به این صورت خواهد بود:
/Homes/abe/LSOF/.lsof_vic
متغیر محیطی LSOFPERSDCPATH زمانی که فرایند lsof دارای مجوز setuid-root باشد یا شناسه کاربری واقعی (UID) فرایند root باشد، نادیده گرفته میشود.
دستور Lsof در صورتی که فرایند lsof دسترسی setgid خود را واگذار نکند، در مسیر فایل حافظه موقت دستگاه شخصی اصلاحشده نخواهد نوشت. (برای فهرستی از پیادهسازیهایی که معمولاً دسترسی setgid خود را واگذار نمیکنند، بخش LSOF PERMISSIONS THAT AFFECT DEVICE CACHE FILE ACCESS را ببینید.)
اگر به عنوان مثال، میخواهید یک زیردایرکتوری از مسیرهای فایل حافظه موقت دستگاه شخصی ایجاد کنید و از متغیر محیطی LSOFPERSDCPATH برای نامگذاری آن استفاده نمایید، و lsof مجوز setgid خود را واگذار نکند، باید به lsof اجازه دهید فایلهای حافظه موقت دستگاه را در مسیر استاندارد شخصی ایجاد کند و سپس آنها را با دستورات پوسته به زیردایرکتوری خود منتقل کنید.
مدیر سیستم محلی میتواند: این گزینه را در هنگام ساخت lsof غیرفعال کند؛ نام متغیر محیطی را از LSOFPERSDCPATH به چیز دیگری تغییر دهد؛ قالب HASPERSDC را تغییر دهد تا جزء مسیر شخصی در مکان دیگری گنجانده شود؛ یا جزء مسیر شخصی را بهطور کامل حذف کند. برای اطلاع از نام متغیر محیطی و مشخصات قالب HASPERSDC، به خروجی گزینه -D? مراجعه کنید.
پیامهای تشخیصی (DIAGNOSTICS)
خطاها با پیامهایی روی فایل خطای استاندارد (standard error) مشخص میشوند.
دستور Lsof در صورت تشخیص هرگونه خطا، از جمله عدم موفقیت در یافتن نام دستورات، نام فایلها، آدرسها یا فایلهای اینترنتی، نامهای کاربری ورود، فایلهای NFS، شناسه PIDs، PGIDs، یا UIDs که برای فهرست شدن درخواست شده بودند، مقدار یک (1) را برمیگرداند. اگر گزینه -V مشخص شده باشد، lsof موارد جستجویی را که نتوانسته فهرست کند، نشان خواهد داد. اگر گزینه -Q مشخص شده باشد، lsof خطاهای مربوط به موارد جستجو را نادیده میگیرد و تنها در صورتی خطا برمیگرداند که رویدادی غیرعادی و جبرانناپذیر رخ داده باشد.
در صورتی که هیچ خطایی تشخیص داده نشود و یا گزینه -Q مشخص شده باشد یا موفق به فهرست کردن اطلاعاتی درباره تمام آرگومانهای جستجوی مشخصشده شده باشد، مقدار صفر (0) برمیگرداند.
هنگامی که lsof نتواند به /dev (یا /devices) یا یکی از زیردایرکتوریهای آن دسترسی پیدا کند، یا نتواند با stat(2) اطلاعاتی درباره یک فایل در آنها به دست آورد، یک پیام هشدار صادر میکند و ادامه میدهد. اینکه lsof پیامهای هشداری درباره فایلهای غیرقابل دسترسی در /dev (یا /devices) صادر میکند، در خروجی راهنمای آن - که با گزینههای -h یا -? درخواست میشود - با این پیام مشخص شده است:
Inaccessible /dev warnings are enabled.
پیام هشدار را میتوان با گزینه -w نادیده گرفت (فرونشاند). همچنین ممکن است هنگام کامپایل lsof توسط مدیر سیستم از طریق تنظیم تعریف WARNDEVACCESS غیرفعال شده باشد. در این حالت، خروجی گزینههای راهنما حاوی این پیام خواهد بود:
Inaccessible /dev warnings are disabled.
پیامهای هشدار دستگاههای غیرقابل دسترس معمولاً پس از اینکه lsof یک فایل حافظه موقت دستگاه کارآمد ایجاد کرد، ناپدید میشوند.
مثالها (EXAMPLES)
برای مجموعه جامعتری از مثالها با مستندات کاملتر، فایل 00QUICKSTART از توزیع lsof را ببینید.
برای فهرست کردن تمام فایلهای باز، استفاده کنید از:
- lsof
برای فهرست کردن تمام فایلهای باز اینترنت، x.25 (HP-UX) و دامنه UNIX، استفاده کنید از:
- lsof -i -U
برای فهرست کردن تمام فایلهای شبکه IPv4 باز در حال استفاده توسط فرایندی با PID برابر 1234، استفاده کنید از:
- lsof -i 4 -a -p 1234
اگر مشکلی ندارد که PID 1234 وجود نداشته باشد، یا PID 1234 هیچ فایل شبکه IPv4 بازی نداشته باشد، گزینه -Q را اضافه کنید:
- lsof -Q -i 4 -a -p 1234
با فرض اینکه لهجه UNIX از IPv6 پشتیبانی میکند، برای فهرست کردن تنها فایلهای شبکه IPv6 باز، استفاده کنید از:
- lsof -i 6
برای فهرست کردن تمام فایلهایی که از هر پروتکلی روی درگاههای 513، 514 یا 515 میزبان wonderland.cc.purdue.edu استفاده میکنند، استفاده کنید از:
- lsof -i @wonderland.cc.purdue.edu:513-515
برای فهرست کردن تمام فایلهایی که از هر پروتکلی روی هر درگاهی از mace.cc.purdue.edu استفاده میکنند (cc.purdue.edu دامنه پیشفرض است)، استفاده کنید از:
- lsof -i @mace
برای فهرست کردن تمام فایلهای باز برای نام کاربری «abe»، یا شناسه کاربری 1234، یا فرایند 456، یا فرایند 123، یا فرایند 789، استفاده کنید از:
- lsof -p 456,123,789 -u 1234,abe
برای فهرست کردن تمام فایلهای باز روی دستگاه /dev/hd4، استفاده کنید از:
- lsof /dev/hd4
برای یافتن فرایندی که /u/abe/foo را باز دارد بدون نگرانی در صورت نبود هیچ موردی، استفاده کنید از:
- lsof -Q /u/abe/foo
برای اقدام کردن فقط در صورتی که فرایندی /u/abe/foo را باز داشته باشد، استفاده کنید از:
- lsof /u/abe/foo echo "still in use"
برای ارسال SIGHUP به فرایندهایی که /u/abe/bar را باز دارند، استفاده کنید از:
- kill -HUP `lsof -t /u/abe/bar`
برای یافتن هر فایل باز، از جمله یک فایل سوکت دامنه UNIX باز با نام /dev/log، استفاده کنید از:
- lsof /dev/log
برای یافتن فرایندهایی با فایلهای باز روی سیستم فایل NFS به نام /nfs/mount/point که سرور آن غیرقابل دسترسی است، و با فرض اینکه جدول سوارکردن (mount table) شما شماره دستگاه را برای /nfs/mount/point ارائه میدهد، استفاده کنید از:
- lsof -b /nfs/mount/point
برای انجام جستجوی قبلی با نادیده گرفتن و فرونشاندن پیامهای هشدار، استفاده کنید از:
- lsof -bw /nfs/mount/point
برای نادیده گرفتن فایل حافظه موقت دستگاه، استفاده کنید از:
- lsof -Di
برای به دست آوردن خروجی فیلد PID و نام دستور برای هر فرایند، توصیفکننده فایل، شماره دستگاه فایل و شماره inode فایل برای هر فایل از هر فرایند، استفاده کنید از:
- lsof -FpcfDi
برای فهرست کردن فایلهای موجود در توصیفکنندههای 1 و 3 هر فرایندی که دستور lsof را برای شناسه کاربری «abe» هر 10 ثانیه یکبار اجرا میکند، استفاده کنید از:
- lsof -c lsof -a -d 1 -d 3 -u abe -r10
برای فهرست کردن دایرکتوری کاری فعلی فرایندهایی که دستوری با طول دقیقاً چهار کاراکتر را اجرا میکنند که کاراکتر سوم آن 'o' یا 'O' است، از این شکل عبارت باقاعده (regular expression) برای گزینه -c c استفاده کنید:
- lsof -c /^..o.$/i -a -d cwd
برای یافتن یک فایل سوکت پروتکل اینترنت نسخه 4 (IPv4) با آدرس عددی با فرمت نقطهدار مرتبط با آن، استفاده کنید از:
- lsof -i@128.210.15.17
برای یافتن یک فایل سوکت پروتکل اینترنت نسخه 6 (IPv6) (هنگامی که لهجه UNIX از IPv6 پشتیبانی میکند) با آدرس عددی با فرمت دونقطه مرتبط با آن، استفاده کنید از:
- lsof -i@[0:1:2:3:4:5:6:7]
برای یافتن یک فایل سوکت پروتکل اینترنت نسخه 6 (IPv6) (هنگامی که لهجه UNIX از IPv6 پشتیبانی میکند) با آدرس عددی با فرمت دونقطه مرتبط که دارای توالی از صفرها است - مانند آدرس loop-back - استفاده کنید از:
- lsof -i@[::1]
برای دریافت یک خط نشانهگذار حالت تکرار که حاوی زمان فعلی باشد، استفاده کنید از:
- lsof -rm====%T====
برای افزودن فاصله به خط نشانهگذار قبلی، استفاده کنید از:
- lsof -r "m==== %T ===="
اشکالات (BUGS)
از آنجا که lsof در جستجوی فایلهای باز حافظه هسته را میخواند، تغییرات سریع در حافظه هسته ممکن است نتایج غیرقابل پیشبینی ایجاد کند.
هنگامی که یک فایل دارای چندین قفل رکورد (record lock) باشد، نویسه وضعیت قفل (که پس از توصیفکننده فایل میآید) از آزمایش اولین ساختار قفل به دست میآید، نه از هرگونه ترکیبی از قفلهای رکورد منفرد که ممکن است توسط چندین ساختار قفل توصیف شده باشند.
دستور Lsof نمیتواند فایلهای دارای مجوزهای دسترسی محدودکننده را بر اساس name جستجو کند مگر اینکه با مجوز set-UID کاربر root نصب شده باشد. در غیر این صورت، محدود به جستجوی فایلهایی است که کاربر آن یا گروه set-GID آن (در صورت وجود) مجوز دسترسی به آنها را دارد.
نمایش آدرس مقصد یک سوکت خام (raw socket) (برای مثال، برای ping) به سیستمعامل UNIX بستگی دارد. برخی لهجهها آدرس مقصد را در بلوک کنترل پروتکل (protocol control block) سوکت خام ذخیره میکنند و برخی خیر.
دستور Lsof همیشه نمیتواند شماره دستگاههای Solaris را به همان روشی که ls(1) نمایش میدهد، ارائه دهد. برای مثال، شماره دستگاههای اصلی (major) و فرعی (minor) که توابع lstat(2) و stat(2) برای دایرکتوری که فایلهای CD-ROM روی آن سوار شدهاند گزارش میدهند (معمولاً /cdrom)، مشابه شمارههایی نیست که برای دستگاهی که فایلهای CD-ROM روی آن سوار شدهاند گزارش میدهد (معمولاً /dev/sr0). (Lsof شمارههای دایرکتوری را گزارش میدهد.)
پشتیبانی از سیستمهای فایل /proc تنها برای لهجههای BSD و Tru64 UNIX، لینوکس، و لهجههای مشتقشده از SYSV R4 - مانند FreeBSD، NetBSD، OpenBSD، Solaris، UnixWare در دسترس است.
برخی از مشخصههای فایل /proc - شماره دستگاه، شماره inode و اندازه فایل - در برخی لهجهها در دسترس نیستند. جستجو برای فایلها در یک سیستم فایل /proc ممکن است نیازمند مشخص کردن نام کامل مسیر باشد.
هیچ توصیفکننده فایل متنی (txt) برای فرایندهای لینوکس نمایش داده نمیشود. تمام مدخلها برای فایلهایی غیر از دایرکتوری کاری فعلی، دایرکتوری ریشه، و توصیفکنندههای عددی فایل با برچسب توصیفکنندههای mem مشخص میشوند.
دستور Lsof نمیتواند لولههای نامگذاریشده (named pipes) در Tru64 UNIX را با نام جستجو کند، زیرا پیادهسازی هسته آنها از lstat(2) شماره دستگاه نامناسبی برای یک لوله نامگذاریشده برمیگرداند.
Lsof بهدلیل عدم دسترسی کافی به دادههای هسته یا وجود خطا در دادههای هسته، نمیتواند قفلها را در HP-UX 9.01، 10.20 و 11.00 بهطور کامل یا صحیح گزارش دهد. برای جزئیات بیشتر به FAQ دستور lsof (مکان آن در بخش FAQ آمده است) مراجعه کنید.
نوع فایل AIX SMT ساختگی است. این نوع برای ساختارهای فایلی ابداع شده که نوع آنها (15) در فایل هدر /usr/include/sys/file.h در AIX تعریف نشده است. یکی از راههای ایجاد چنین ساختارهای فایلی، اجرای کلاینتهای X با متغیر DISPLAY تنظیمشده روی «:0.0» است.
گزینه +|-f[cfn] در نسخه مبتنی بر /proc لینوکس lsof پشتیبانی نمیشود، زیرا ساختارهای هسته را از حافظه هسته نمیخواند.
متغیرهای محیطی (ENVIRONMENT)
Lsof ممکن است به این متغیرهای محیطی دسترسی پیدا کند.
- LANG
- محلیسازی زبان (locale) را مشخص میکند. برای نام سایر متغیرهایی که میتوانند بهجای LANG استفاده شوند (مانند LC_ALL، LC_TYPE و غیره) به setlocale(3) مراجعه کنید.
- LSOFDEVCACHE
- مسیر فایل کش دستگاه (device cache) را مشخص میکند. برای اطلاعات بیشتر به بخش DEVICE CACHE PATH FROM AN ENVIRONMENT VARIABLE مراجعه کنید.
- LSOFPERSDCPATH
- بخش میانی مسیر اصلاحشده فایل کش دستگاه شخصی را مشخص میکند. برای اطلاعات بیشتر به بخش MODIFIED PERSONAL DEVICE CACHE PATH مراجعه کنید.
پرسشهای متداول (FAQ)
پرسشهای متداول و پاسخهای آنها (FAQ) در فایل 00FAQ در توزیع lsof موجود است.
آخرین نسخه این فایل در نشانی زیر در دسترس است:
فایلها (FILES)
- /dev/kmem
- دستگاه حافظه مجازی هسته
- /dev/mem
- دستگاه حافظه فیزیکی
- /dev/swap
- دستگاه صفحهبندی (paging) سیستم
- .lsof_hostname
- فایل کش دستگاه lsof (پسوند hostname، اولین بخش از نام میزبان است که توسط gethostname(2) برگردانده میشود.)
نویسندگان (AUTHORS)
Lsof توسط Victor A.Abell <abe@purdue.edu> از دانشگاه پردو (Purdue University) نوشته شده است. از نسخه 4.93.0، تیم lsof-org در GitHub توسعه و نگهداری lsof را بر عهده دارد. افراد بسیار دیگری نیز در توسعه lsof مشارکت داشتهاند. نام آنها در فایل 00CREDITS در توزیع lsof فهرست شده است.
توزیع (DISTRIBUTION)
آخرین نسخه توزیع lsof در نشانی زیر در دسترس است:
همچنین ببینید (SEE ALSO)
ممکن است تمام صفحات راهنمای زیر در هر گویش یونیکس که lsof به آن پورت شده است موجود نباشد.
access(2), awk(1), crash(1), fattach(3C), ff(1), fstat(8), fuser(1), gethostname(2), isprint(3), kill(1), localtime(3), lstat(2), modload(8), mount(8), netstat(1), ofiles(8L), open(2), perl(1), ps(1), readlink(2), setlocale(3), stat(2), strftime(3), time(2), uname(1).
| Revision-4.99.7 |