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

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

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

$ fuser [options] name

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

ساده‌ترین استفاده از این دستور به شکل زیر است:

$ fuser /
/:                   1582r  1620rc  1621rc  1633r  1639rc
1641rc  1648r   1651rc  1653rc  1655r   1656r   1657r   1660r  
1661r   1673rc  1685rc  1687rc  1695rc  1700rc  1704rc  1707rc
1716rc  1720rc  1724rc  1728rc  1729rc  1744rc  1751rc  1757rc 
1758rc  1759rc  1760rc  1788rc  1800r   1801r   1804rc  1818r  1822r
1828rc  1833rc  1838r   1846rc  1854rc  1860rc  1886rc  1920r  1942rc
1945rc  1947rc  1948rc  1987r   2009rc  2014rc  2016rc  2190r  2208rc
2266r   2555r   2646r   2657r   2712r   2721r   2729r   2740r  2758r  2759r  2766r

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

ساده ترین شکل دستور top به شکل زیر است :

$ top

به خروجی آن، ستون PID دقت کنید (خروجی خلاصه شده است):

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
 2190 yourname  20   0  704m 193m  38m S   11  4.8   5:07.09 firefox            
 2759 yourname  20   0 92288  16m  10m S    1  0.4   0:01.46 gnome-terminal                   
 1648 yourname  20   0  250m  66m  32m S    1  1.6   0:38.90 compiz             
 2555 yourname  20   0  154m  23m  15m S    1  0.6   0:07.76 plugin-containe     
 

همین‌طور که مشاهده می‌کنید این شماره PIDها که در خروجی دستور top مشاهده می‌کنید در خروجی دستور fuser هم مشاهده‌ می‌کنید.

دیدید که در خروجی fuser، کاراکتر(ها) در انتهای PIDها دیده می‌شود. هر کدام از این کاراکترها نشان دهنده‌ی یک خصوصیت هستند که در زیر توضیح داده شده است:

 

  •     c : دایرکتوری جاری
  •     e : قابل اجرا شدن است
  •     f : فایل باز که به صورت پیش فرض، درحالت نمایش حذف شده است.
  •     F : باز شدن فایل برای نوشتن که به صورت پیش فرض، درحالت نمایش حذف شده است.
  •     r : دایرکتوری ریشه
  •     m : نشانگر فایل نگاشت شده «Maped File»یا کتابخانه های اشتراکی «Shared Library»

در بیشتر مواقع شما در انتهای PIDها کاراکتر c را مشاهده خواهید کرد. در واقع اگر بخواهیم توضیح بیشتر در مورد آن بدهیم به این معناست که این فرآیندها با استفاده از این دایرکتوری به عنوان دایرکتوری جاری خود، در حال استفاده اند.

با گزینه اختیاری v- شما اطلاعات کامل‌تری را خواهید دید(خروجی خلاصه شده است) :

$ fuser -v /
                     USER        PID ACCESS COMMAND
/:                   root     kernel mount /
                     www.30li.ir   1582 .r... gnome-session
                     www.30li.ir   1620 .rc.. dbus-launch
                     www.30li.ir   1621 .rc.. dbus-daemon
                     www.30li.ir   1633 .r... gnome-settings-
                     www.30li.ir   1639 .rc.. gvfsd
                     www.30li.ir   1641 .rc.. gvfs-fuse-daemo
                     www.30li.ir   1648 .r... compiz
                     www.30li.ir   1651 .rc.. gconfd-2
                     www.30li.ir   1653 .rc.. gvfsd-metadata
                     www.30li.ir   1655 .r... nm-applet
                     www.30li.ir   1656 .r... nautilus
                     www.30li.ir   1657 .r... bluetooth-apple
                     www.30li.ir   1660 .r... polkit-gnome-au
                     www.30li.ir   1661 .r... gnome-fallback-
                     www.30li.ir   1673 .rc.. gvfs-gdu-volume
                     www.30li.ir   1685 .rc.. gvfs-gphoto2-vo
                     www.30li.ir   1687 .rc.. gvfs-afc-volume
                     www.30li.ir   1695 .rc.. gvfsd-trash
                     www.30li.ir   1700 .rc.. pulseaudio
                     www.30li.ir   1704 .rc.. gconf-helper
                     www.30li.ir   1707 .rc.. bamfdaemon
                     www.30li.ir   1716 .rc.. notify-osd
                     www.30li.ir   1720 .rc.. gnome-screensav
                     www.30li.ir   1724 .rc.. gvfsd-burn
                     www.30li.ir   1728 .rc.. hud-service
                     www.30li.ir   1729 .rc.. unity-panel-ser
                     www.30li.ir   1744 .rc.. indicator-sessi
                     www.30li.ir   1751 .rc.. indicator-datet
                     www.30li.ir   1757 .rc.. indicator-messa
                     www.30li.ir   1758 .rc.. indicator-appli

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

قدرت این دستور فقط به خروجی اطلاعات نیست، شما می‌توانید مانند دستور top، با اضافه کردن گزینه‌ی اختیاری k-فرایندی را از بین ببرید:

$ fuser /usr/lib/firefox/firefox
/usr/lib/firefox/firefox:  2190e

خروجی بالا نشان می‌دهد که یک فرایند با PID به شماره 2190 که یک فایل اجرایی است (به علت وجود کاراکتر e) در حال استفاده می‌باشد.

$ fuser -k /usr/lib/firefox/firefox

که در این صورت مرورگر فایرفاکس شما بسته خواهد.

با گزینه اختیاری u-شما می‌توانید مالک یک فرایند را مشاهده کنید :

$ fuser /usr/lib/firefox/firefox
/usr/lib/firefox/firefox:  5663e
$ fuser -u /usr/lib/firefox/firefox
/usr/lib/firefox/firefox:  5663e(yourname)

با گزینه‌ی اختیاری i-از شما سوال پرسیده خواهد شد که آیا می‌خواهید این فرایند بسته شود ؟ برای مثال :

$ fuser -k -i /usr/lib/firefox/firefox
/usr/lib/firefox/firefox:  5663e
Kill process 5663 ? (y/N)

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

$ fuser -kv -i /
                     USER        PID ACCESS COMMAND
/:                   root     kernel mount /
                     www.30li.ir   1582 .r... gnome-session
                     www.30li.ir   1620 .rc.. dbus-launch
                     www.30li.ir   1621 .rc.. dbus-daemon
                     www.30li.ir   1633 .r... gnome-settings-
                     www.30li.ir   1639 .rc.. gvfsd
                     www.30li.ir   1641 .rc.. gvfs-fuse-daemo
                     www.30li.ir   1648 .r... compiz
                     www.30li.ir   1651 .rc.. gconfd-2
                     www.30li.ir   1653 .rc.. gvfsd-metadata
                     www.30li.ir   1655 .r... nm-applet
Kill process 1582 ? (y/N) n
Kill process 1620 ? (y/N) n
Kill process 1621 ? (y/N) n
Kill process 1633 ? (y/N) n
Kill process 1639 ? (y/N) n
Kill process 1641 ? (y/N) n
Kill process 1648 ? (y/N) n
Kill process 1651 ? (y/N) n
Kill process 1653 ? (y/N) n
Kill process 1655 ? (y/N) n

شما می‌توایند یک فرایند را با یک سیگنال مشخص  بکشید. با گزینه اختیاری l-شما می‌توانید لیست سیگنال‌هایی که دستور fuser از آن پشتیبانی می‌کند را ببینید :

$ fuser -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED

شما می‌توانید هم از شماره و هم از نام آن‌ها برای کشتن یک فرایند استفاده کنید :

$ fuser -i -k -KILL /usr/lib/firefox/firefox
/usr/lib/firefox/firefox:  5663e
Kill process 5663 ? (y/N) n
$ fuser -i -k -9 /usr/lib/firefox/firefox
/usr/lib/firefox/firefox:  5663e

دو دستور بالا شبیه به یکدیگر بوده به این منظور که عدد 9 معادل سیگنال KILL می‌باشد.

همچنین شما می‌توانید از سوکت‌ها هم به شکل زیر اطلاعاتی بدست آورید :

$ fuser -v -n TCP_UDP PORT_NUMBER

برای مثال :

# fuser -v -n tcp 631
                     USER        PID ACCESS COMMAND
631/tcp:             root        665 F.... cupsd