آذرسیس

lsof commands in Linux
5/5 - (1 امتیاز)

در لینوکس همه چیز به عنوان فایل در نظر گرفته می شود و در داخل دایرکتوری ها سازماندهی می شود. lsof به معنای LiSt of Open Files است و برای یافتن اینکه کدام فایل ها با کدام فرآیند باز می شوند، استفاده می شود. همچنین می توانید با کمک دستور lsof اطلاعاتی در مورد فرآیند باز کردن فایل ها پیدا کنید. در این مقاله دستور lsof را با مثال های کاربردی بررسی می کنیم. همراه ما باشید.

 

داشتن سرور مجازی برای هر کسب و کار یا افرادی که در حوزه بازار های مالی فعالیت دارند مهم است.اگر میخواهید یک سرور مجازی ارزان و به صرفه در سیستم عامل های لینوکس یا ویندوز خریداری کنید میتوانید از خدمات سرور مجازی ویندوز و یا سرور مجازی لینوکس آذرسیس استفاده نمایید.

 

معرفی دستور lsof

ls مخفف LiSt و lsof مخفف عبارت LiSt of Open Files است. دستور lsof بصورت پیش فرض در بیشتر توزیع های لینوکس موجود است. لینوکس همه چیز را به عنوان یک فایل در نظر می گیرد. در صورتی که قادر به جدا کردن دیسک نباشید می توانید از دستور lsof استفاده کنید. همچنین می توانید با کمک دستور lsof فایل های در حال استفاده را پیدا کنید. در واقع lsof فایل های باز و در حال استفاده را براساس فرآیندها، کاربران و شناسه های پردازش لیست می کند.

معرفی دستور lsof

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

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

lsof

لیستی از فایل های باز و در حال استفاده در زیر باز می شود که ستون هایی مانند Command، PID، USER، FD، TYPE و غیر را نمایش می دهد.

lsof

COMMAND    PID      USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
init         1      root  cwd      DIR      253,0      4096          2 /
init         1      root  rtd      DIR      253,0      4096          2 /
init         1      root  txt      REG      253,0    145180     147164 /sbin/init
init         1      root  mem      REG      253,0   1889704     190149 /lib/libc-2.12.so
init         1      root   0u      CHR        1,3       0t0       3764 /dev/null
init         1      root   1u      CHR        1,3       0t0       3764 /dev/null
init         1      root   2u      CHR        1,3       0t0       3764 /dev/null
init         1      root   3r     FIFO        0,8       0t0       8449 pipe
init         1      root   4w     FIFO       0,8       0t0       8449 pipe
init         1      root   5r      DIR       0,10         0          1 inotify
init         1      root   6r      DIR       0,10         0          1 inotify
init         1      root   7u     unix 0xc1513880       0t0       8450 socket

بخش ها و مقدارهای آنها خود توضیحی است. اکنون ستون های FD & TYPE را دقیق تر بررسی می کنیم.

FD- مخفف File descriptor است و برخی از مقادیر رایج آن عبارت اند از:

  • cwd- دایرکتوری کاری فعلی
  • rtd- دایرکتوری root
  • txt- متن برنامه (کد و داده)
  • mem- فایل memory-mapped

1u در اعداد ستون FD توصیفگر فایل واقعی است و حالت آن توسط u،r،w فالو می شود.

  • r برای دسترسی به خواندن.
  • w برای دسترسی به نوشتن.
  • u برای دسترسی به خواندن و نوشتن.

TYPE- نوع فایل را مشخص می کند. در اینجا چند نمونه آورده شده است:

  • DIR- دایرکتوری
  • REG- فایل معمولی
  • CHR- فایل ویژه کاراکتر
  • First In First Out -FIFO

2. لیست کردن فایل های باز شده خاص کاربر

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

lsof -u azarsys

COMMAND  PID    USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME
sshd    1838 azarsys  cwd    DIR      253,0     4096      2 /
sshd    1838 azarsys  rtd    DIR      253,0     4096      2 /
sshd    1838 azarsys  txt    REG      253,0   532336 188129 /usr/sbin/sshd
sshd    1838 azarsys  mem    REG      253,0   19784 190237 /lib/libdl-2.12.so
sshd    1838 azarsys  mem    REG      253,0  122436 190247 /lib/libselinux.so.1
sshd    1838 azarsys  mem    REG      253,0  255968 190256 /lib/libgssapi_krb5.so.2.2
sshd    1838 azarsys  mem    REG      253,0  874580 190255 /lib/libkrb5.so.3.3

3. پیدا کردن فرآیند های در حال اجرا در یک پورت خاص

اگر دستور زیر را با گزینه i- اجرا کنید می توانید از تمامی فرآیندهای در حال اجرا لینوکس یک پورت خاص اطلاع پیدا کنید. در مثال زیر تمام فرآیندهای در حال اجرا پورت 22 فهرست می شود.

lsof -i TCP:22

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1471    root    3u  IPv4  12683      0t0  TCP *:ssh (LISTEN)
sshd    1471    root    4u  IPv6  12685      0t0  TCP *:ssh (LISTEN)

4. لیست کردن فایل های باز IPv4 و IPv6 

فایل های شبکه IPv4 و IPv6 را با دستورات جداگانه می توانید باز کنید.

lsof -i 4

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc    8u  IPv4  11331      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600

lsof -i 6

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    9u  IPv6  11333      0t0  UDP *:sunrpc
rpcbind   1203     rpc   10u  IPv6  11335      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
rpc.statd 1277 rpcuser   10u  IPv6  11858      0t0  UDP *:55800
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)
cupsd     1346    root    6u  IPv6  12112      0t0  TCP localhost:ipp (LISTEN)

5. لیست کردن فایل های باز از محدوده پورت TCP 1-1024 

با کمک دستور زیر می توانید تمام فرآیندهای در حال اجرای فایل های باز از محدوده پورت TCP از 1-1024 لیست کنید.

lsof -i TCP:1-1024

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
cupsd   1346    root    7u  IPv4  12113      0t0  TCP localhost:ipp (LISTEN)
sshd    1471    root    4u  IPv6  12685      0t0  TCP *:ssh (LISTEN)
master  1551    root   13u  IPv6  12898      0t0  TCP localhost:smtp (LISTEN)
sshd    1834    root    3r  IPv4  15101      0t0  TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
sshd    1838 azarsys    3u  IPv4  15101      0t0  TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
sshd    1871    root    3r  IPv4  15842      0t0  TCP 192.168.0.2:ssh->192.168.0.1:groove (ESTABLISHED)
httpd   1918    root    5u  IPv6  15991      0t0  TCP *:http (LISTEN)
httpd   1918    root    7u  IPv6  15995      0t0  TCP *:https (LISTEN)

6. حذف کاربر با کاراکتر “^”

در این مرحله کاربر root حذف شده است. برای حذف یک کاربر خاص می توانید از کاراکتر “^” استفاده کنید.

lsof -i -u^root

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc    8u  IPv4  11331      0t0  TCP *:sunrpc (LISTEN)
rpcbind   1203     rpc    9u  IPv6  11333      0t0  UDP *:sunrpc
rpcbind   1203     rpc   10u  IPv6  11335      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600
rpc.statd 1277 rpcuser    5r  IPv4  11836      0t0  UDP *:soap-beep
rpc.statd 1277 rpcuser    8u  IPv4  11850      0t0  UDP *:55146
rpc.statd 1277 rpcuser    9u  IPv4  11854      0t0  TCP *:32981 (LISTEN)
rpc.statd 1277 rpcuser   10u  IPv6  11858      0t0  UDP *:55800
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)

7. یافتن فایل ها و دستورات 

در مثال زیر کاربر از دستوراتی مانند دایرکتوری ping و etc/ استفاده می کند.

lsof -i -u tecmint

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash         1839 azarsys  cwd     DIR   253,0       12288     15 /etc
ping          2525 azarsys  cwd     DIR   253,0       12288     15 /etc

8. لیست کردن تمام اتصالات شبکه

برای نشان دادن لیست تمام اتصالات شبکه “LISTENING & ESTABLISHED” دستور زیر را وارد کنید:

lsof -i

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)
cupsd     1346    root    6u  IPv6  12112      0t0  TCP localhost:ipp (LISTEN)
cupsd     1346    root    7u  IPv4  12113      0t0  TCP localhost:ipp (LISTEN)
sshd      1471    root    3u  IPv4  12683      0t0  TCP *:ssh (LISTEN)
master    1551    root   12u  IPv4  12896      0t0  TCP localhost:smtp (LISTEN)
master    1551    root   13u  IPv6  12898      0t0  TCP localhost:smtp (LISTEN)
sshd      1834    root    3r  IPv4  15101      0t0  TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
httpd     1918    root    5u  IPv6  15991      0t0  TCP *:http (LISTEN)
httpd     1918    root    7u  IPv6  15995      0t0  TCP *:https (LISTEN)
clock-app 2362   narad   21u  IPv4  22591      0t0  TCP 192.168.0.2:45284->www.gov.com:http (CLOSE_WAIT)
chrome    2377   narad   61u  IPv4  25862      0t0  TCP 192.168.0.2:33358->maa03s04-in-f3.1e100.net:http (ESTABLISHED)
chrome    2377   narad   80u  IPv4  25866      0t0  TCP 192.168.0.2:36405->bom03s01-in-f15.1e100.net:http (ESTABLISHED)

9. جستجو براساس PID 

با کمک مثال زیر متوجه می شوید که PID چیست.

lsof -p 1

COMMAND PID USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME
init      1 root  cwd    DIR      253,0     4096      2 /
init      1 root  rtd    DIR      253,0     4096      2 /
init      1 root  txt    REG      253,0   145180 147164 /sbin/init
init      1 root  mem    REG      253,0  1889704 190149 /lib/libc-2.12.so
init      1 root  mem    REG      253,0   142472 189970 /lib/ld-2.12.so

10. از بین بردن تمام فعالیت های کاربر خاص

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

kill -9 'lsof -t -u azarsys'

 نتیجه گیری

در این مقاله 10 نمونه دستور lsof در لینوکس معرفی شد و همچنین دستور lsof را با مثال های کاربردی بررسی کردیم. دستور lsof اطلاعاتی در مورد نحوه باز کردن فایل ها می دهد. امیدوارم این مقاله برایتان مفید بوده باشد. از همراهی شما متشکریم.

سوالات متداول:

دستور lsof چه اهمیتی دارد؟

این دستور اطلاعات مربوط به فایل های باز روی سیستم را فهرست می کند. مثلا اینکه کدام فرآیند فایل را باز کرده است. فایل های باز می توانند هر فایلی روی دیسک، pip نام گذاری شده، سوکت یا دستگاهی باشند که توسط یک فرآیند باز می شد.

آیا lsof نیاز به ابزاری دارد؟

برای فیلتر کردن نتایج از دستور lsof به همراه گزینه هایش یا دستور grep استفاده کنید. این دستور به دسترسی root یا sudo نیاز دارد. زیرا اکثر فرآیندها و یا دستگاه هایی که فهرست می کند به root تعلق دارند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *