FUSER(1) دستورات کاربر FUSER(1)

fuser - شناسایی فرآیندهای در حال استفاده از فایلها یا سوکتها

fuser [-fuv] [-a|-s] [-4|-6] [-c|-m|-n space] [ -k [-i] [-M] [-w] [-SIGNAL] ] name ...
fuser -l
fuser -V

دستور fuser شناسه‌های فرآیند (PID) فرآیندهایی را که از فایل‌ها یا سیستم‌فایل‌های مشخص‌شده استفاده می‌کنند نمایش می‌دهد. در حالت نمایش پیش‌فرض، پس از نام هر فایل یک حرف قرار می‌گیرد که نشان‌دهنده نوع دسترسی است:

دایرکتوری جاری.
فایل اجرایی در حال اجرا.
فایل باز. f در حالت نمایش پیش‌فرض حذف می‌شود.
فایل باز برای نوشتن. F در حالت نمایش پیش‌فرض حذف می‌شود.
دایرکتوری ریشه.
فایل نگاشت‌شده با mmap یا کتابخانه اشتراکی.
.
نگه‌دارنده مکان (placeholder)، در حالت نمایش پیش‌فرض حذف می‌شود.

اگر به هیچ‌یک از فایل‌های مشخص‌شده دسترسی نباشد یا در صورت وقوع یک خطای مهلک، fuser یک کد بازگشتی غیرصفر برمی‌گرداند. اگر حداقل یک دسترسی یافت شود، fuser مقدار صفر را بازمی‌گرداند.

به منظور جستجوی فرآیندهایی که از سوکت‌های TCP و UDP استفاده می‌کنند، فضای نام متناظر باید با گزینه -n انتخاب شود. به طور پیش‌فرض fuser در هر دو سوکت IPv6 و IPv4 جستجو خواهد کرد. برای تغییر رفتار پیش‌فرض، از گزینه‌های -4 و -6 استفاده کنید. سوکت(ها) را می‌توان با پورت محلی و راه دور، و نشانی راه دور مشخص کرد. تمام فیلدها اختیاری هستند، اما کاماهای پیش از فیلدهای حذف‌شده باید وجود داشته باشند:

[lcl_port][,[rmt_host][,[rmt_port]]]

هم برای نشانی‌های IP و هم برای شماره پورت‌ها می‌توان از مقادیر نمادین یا عددی استفاده کرد.

دستور fuser تنها PIDها را به خروجی استاندارد (stdout) ارسال می‌کند و هر چیز دیگری به خروجی استاندارد خطا (stderr) فرستاده می‌شود.

نمایش تمام فایل‌های مشخص‌شده در خط فرمان. به طور پیش‌فرض، تنها فایل‌هایی نمایش داده می‌شوند که حداقل توسط یک فرآیند مورد دسترسی قرار گرفته باشند.
همانند گزینه -m، برای سازگاری با POSIX استفاده می‌شود.
به صورت بی‌صدا نادیده گرفته می‌شود، برای سازگاری با POSIX استفاده می‌شود.
کشتن فرآیندهایی که به فایل دسترسی دارند. مگر اینکه با -SIGNALتغییر یابد، سیگنال SIGKILL ارسال می‌شود. یک فرآیند fuser هرگز خودش را نمی‌کشد، اما ممکن است سایر فرآیندهای fuser را بکشد. شناسه کاربری مؤثر (effective user ID) فرآیند اجراکننده fuser پیش از اقدام به کشتن، به شناسه کاربری واقعی (real user ID) آن تنظیم می‌شود.
درخواست تأیید از کاربر پیش از کشتن یک فرآیند. این گزینه اگر گزینه -k نیز همراه آن نباشد، به صورت بی‌صدا نادیده گرفته می‌شود.
برای فضای نام file اجازه می‌دهد تمامی مقایسه‌ها بر اساس اینودهای (inodes) فایل(های) مشخص‌شده انجام شود و هرگز بر مبنای نام فایل‌ها صورت نگیرد، حتی در سیستم‌فایل‌های مبتنی بر شبکه.
فهرست کردن نام تمامی سیگنال‌های شناخته‌شده.
NAME یک فایل روی یک سیستم‌فایل سوارشده یا یک دستگاه بلاکی که سوار شده است را مشخص می‌کند. تمام فرآیندهایی که به فایل‌های روی آن سیستم‌فایل دسترسی دارند فهرست می‌شوند. اگر یک دایرکتوری مشخص شود، به طور خودکار به NAME/ تغییر می‌یابد تا از هر سیستم‌فایلی که ممکن است روی آن دایرکتوری سوار شده باشد استفاده شود.
درخواست فقط در صورتی انجام می‌شود که NAME یک نقطه اتصال (mountpoint) را مشخص کند. این یک کمربند ایمنی بسیار ارزشمند است که از کشتن ناخواسته سیستم جلوگیری می‌کند اگر NAME اتفاقاً یک سیستم‌فایل نباشد.
کشتن فقط فرآیندهایی که دسترسی نوشتن دارند. این گزینه اگر گزینه -k نیز همراه آن نباشد، به صورت بی‌صدا نادیده گرفته می‌شود.
انتخاب یک فضای نام دیگر. فضاهای نام file (نام فایل‌ها، حالت پیش‌فرض)، udp (پورت‌های UDP محلی)، و tcp (پورت‌های TCP محلی) پشتیبانی می‌شوند. برای پورت‌ها، می‌توان شماره پورت یا نام نمادین را مشخص کرد. اگر ابهامی وجود نداشته باشد، می‌توان از ساختار نشانه‌گذاری میان‌بر name/space (برای مثال، 80/tcp) استفاده کرد.
عملیات خاموش و بی‌صدا. گزینه‌های -u و -v در این حالت نادیده گرفته می‌شوند. گزینه -a نباید همراه با -s استفاده شود.
-SIGNAL
استفاده از سیگنال مشخص‌شده به جای SIGKILL هنگام کشتن فرآیندها. سیگنال‌ها را می‌توان هم بر اساس نام (برای مثال، -HUP) یا با شماره (برای مثال، -1) مشخص کرد. این گزینه اگر گزینه -k استفاده نشده باشد، به صورت بی‌صدا نادیده گرفته می‌شود.
پیوست کردن نام کاربر مالک فرآیند به هر PID.
حالت پرگو (verbose). فرآیندها به سبکی مشابه ps نمایش داده می‌شوند. فیلدهای PID، USER و COMMAND مشابه ps هستند. فیلد ACCESS نحوه دسترسی فرآیند به فایل را نشان می‌دهد. حالت پرگو همچنین نشان می‌دهد چه زمانی یک فایل خاص به عنوان یک نقطه سوارشدن (mount point)، صادرات knfs یا فایل حافظه مجازی (swap) مورد دسترسی قرار گرفته است. در این حالت، به جای PID عبارت kernel نمایش داده می‌شود.
نمایش اطلاعات نسخه.
-4, --ipv4
جستجو فقط برای سوکت‌های IPv4. این گزینه نباید همراه با گزینه -6 استفاده شود و تنها روی فضاهای نام tcp و udp اثر دارد.
-6, --ipv6
جستجو فقط برای سوکت‌های IPv6. این گزینه نباید همراه با گزینه -4 استفاده شود و تنها روی فضاهای نام tcp و udp اثر دارد.

/proc
محل قرارگیری سیستم‌فایل proc

تمامی فرآیندهایی را که به هر نحوی به سیستم‌فایل /home دسترسی دارند متوقف می‌کند (می‌کشد).
در صورتی که هیچ فرآیند دیگری از /dev/ttyS1 استفاده نکند، command را اجرا می‌کند.
تمام فرآیندها را در درگاه (محلی) TELNET نمایش می‌دهد.

فرآیندهایی که چندین بار به همان شیوه به یک فایل یا سیستم‌فایل دسترسی دارند، تنها یک بار نمایش داده می‌شوند.

اگر یک شیء یکسان چندین بار در خط فرمان مشخص شود، ممکن است برخی از آن ورودی‌ها نادیده گرفته شوند.

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

دستور fuser نمی‌تواند درباره فرآیندهایی گزارش دهد که اجازه بررسی جدول توصیف‌کننده فایل (file descriptor table) آن‌ها را ندارد. متداول‌ترین حالتی که این مشکل رخ می‌دهد، هنگام جستجو برای سوکت‌های TCP یا UDP در زمان اجرای fuser به عنوان یک کاربر غیر ریشه (non-root) است. در این حالت fuser گزارش می‌دهد که هیچ دسترسی وجود ندارد.

نصب fuser به صورت SUID root از مشکلات مربوط به اطلاعات ناقص جلوگیری می‌کند، اما ممکن است به دلایل امنیتی و حریم خصوصی نامطلوب باشد.

فضاهای نام udp و tcp و سوکت‌های دامنه یونیکس (UNIX domain sockets) را نمی‌توان با هسته‌های قدیمی‌تر از نسخه 1.3.78 جستجو کرد.

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

گزینه -k تنها روی فرآیندها عمل می‌کند. اگر کاربرِ مورد نظر هسته باشد، fuser یک پیام راهنما چاپ می‌کند، اما هیچ اقدامی فراتر از آن انجام نمی‌دهد.

دستور fuser دستگاه‌های بلاکی که توسط فرآیندها در یک فضای نام سوارشدن (mount namespace) متفاوت سوار شده‌اند را نمی‌بیند. این به دلیل آن است که شناسه دستگاه نمایش داده شده در جدول توصیف‌کننده فایل فرآیند از فضای نام آن فرآیند است و نه از فضای نام fuser؛ به این معنی که مطابقت نخواهد داشت.

دستور fuser -m /dev/sgX تمام فرآیندها را نمایش می‌دهد (یا با فلگ -k می‌کشد)، حتی اگر آن دستگاه را پیکربندی نکرده باشید. ممکن است دستگاه‌های دیگری نیز وجود داشته باشند که همین رفتار را نشان دهند.

گزینه سوارشدن -m با هر فایلی در همان دستگاهِ فایل مشخص‌شده تطابق می‌یابد؛ اگر قصد دارید تنها نقطه اتصال را مشخص کنید، از گزینه -M نیز استفاده کنید.

دستور fuser فایل‌های نگاشت‌شده، مانند کتابخانه‌های اشتراکی یک فرآیند را در صورتی که روی یک سیستم‌فایل btrfs(5) باشند مطابقت نمی‌دهد؛ زیرا شناسه‌های دستگاه برای stat(2) و /proc/<PID>/maps متفاوت هستند.

kill(1), killall(1), stat(2), btrfs(5), lsof(8), mount_namespaces(7), pkill(1), ps(1), kill(2)

2022-11-02 psmisc