اطلاعیه

بستن
No announcement yet.

دستور lsof در linux به همراه 10 مثال عملی

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    دستور lsof در linux به همراه 10 مثال عملی

    lsof یک دستور کاربردی است در لینوکس که کار آن نشان دادن فایل های باز در سیستم است در واقع مخفف LiSt of Open Files است. با این کامند میتوانیم ببینیم که کدام فایل ها با استفاده از کدام پروسس ها باز است. همان طور که میدانیم در لینوکس همه چیز فایل در نظر گرفته می شود مانند: pipes ,Sockets, Directories, Devices
    یکی از مواردی که می توانیم از این کامند استفاده کنیم وقتی است که یک دیسک را نمی توانیم unmount کنیم و سیستم عامل به ما می گوید که این فایل در حال استفاده شدن است در آن زمان با استفاده از این کامند می توانیم بفهمیم که کدام فایل در حال استفاده شدن است.

    1 - لیست کردن تمام فایل های باز با استفاده از این کامند
    کد PHP:
    root@nabukatnazzar:~# lsof
    COMMAND    PID  TID       USER   FD      TYPE             DEVICE SIZE/OFF       NODE NAME
    init         1            root  cwd       DIR                8
    ,2     4096          2 /
    init         1            root  rtd       DIR                8,2     4096          2 /
    init         1            root  txt       REG                8,2    40560    3276859
    /sbin/init
    init         1            root  mem       REG                8
    ,2    14768    1443297
    /lib/x86_64-linux-gnu/libdl-2.13.so
    init         1            root  mem       REG                8
    ,2  1603600    1443283
    /lib/x86_64-linux-gnu/libc-2.13.so
    init         1            root  mem       REG                8
    ,2   126232    1443394
    /lib/x86_64-linux-gnu/libselinux.so.1 
    موارد دیده شده نیاز به توضیح ندارند و تنها موارد fd , TYPE تا حدودی نیاز به توضیح دارند:

    FD یا file descriptor یک شاخص است برای دسترسی به فایل ها. در واقع یک index است که به یک لیست از فایل های باز که کرنل نگهداری می کند. که مقادیر زیر را می تواند داشته باشد
    -cwd یا current working directory
    -rtd یا root working directory
    -txt یا text program
    -mem یا مموری یا memory-maped file
    مقادیر واقعی fd یک عدد است که با یکی از کاراکترهای urw دنبال می شود که این کاراکتر های به معنای زیر هستند:
    -r یا read access
    -w یا write access
    -u برای read and write access

    TYPE نوع فایل را معلوم می کند
    -DIR یا دایرکتوری
    -REG یا regular file یا فایل معمولی
    -CHR یا character special file
    -FIFO یا first in first out

    2 - لیست کردن فایل های باز خاص
    کامند زیر فایل های باز شده با یوزر amir را نشان می دهد
    کد PHP:
    root@nabukatnazzar:~# lsof -u amir
    COMMAND    PID USER   FD      TYPE             DEVICE SIZE/OFF    NODE NAME
    gnome
    -key 3223 amir  cwd       DIR                8,2     4096  402915 /var/lib/gdm3
    gnome
    -key 3223 amir  rtd       DIR                8,2     4096       2 /
    gnome-key 3223 amir  txt       REG                8,2   944976 1967018 /usr/bin/gnome
    keyring
    -daemon
    gnome
    -key 3223 amir  mem       REG                8,2    35560 2887151 /usr/lib/x86_64
    linux
    -gnu/gio/modules/libdconfsettings.so
    gnome
    -key 3223 amir  mem       REG                8,2    59992 1443411 /lib/x86_64-linux-gnu/libudev.so.0.13.0
    gnome
    -key 3223 amir  mem       REG                8,2   177424 2887156 /usr/lib/x86_64
    linux
    -gnu/gio/modules/libgvfsdbus.so 
    3 - پیدا کردن پروسس هایی که بر روی یک پورت خاص اجرا شده اند
    کد PHP:
    root@nabukatnazzar:~# lsof -i TCP:80
    COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    gnome
    -pan 3351 amir   18u  IPv4  61546      0t0  TCP
    192.168.1.100
    :53370->i43.158.178.82.omantel.net.om:http (CLOSE_WAIT)
    iceweasel 3481 amir   40u  IPv4  76096      0t0  TCP 192.168.1.100:60496->hosted
    by
    .datapardaz.ir:http (ESTABLISHED)
    iceweasel 3481 amir   59u  IPv4  76097      0t0  TCP 192.168.1.100:60497->hosted
    by
    .datapardaz.ir:http (ESTABLISHED)
    iceweasel 3481 amir   60u  IPv4  76098      0t0  TCP 192.168.1.100:60498->hosted
    by
    .datapardaz.ir:http (ESTABLISHED
    4 - لیست کردن فایل های باز فقط ipv4 یا ipv6
    یعنی آنهایی که TYPE آنها IPV4 یا IPV6 باشد
    کد PHP:
    root@nabukatnazzar:~# lsof -i 4
    COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    dhclient  2947 root    6u  IPv4  15816      0t0  UDP 
    *:bootpc
    dhclient  2947 root   20u  IPv4  15809      0t0  UDP 
    *:28830
    gnome
    -pan 3351 amir   18u  IPv4  90667      0t0  TCP
    192.168.1.100
    :53416->i43.158.178.82.omantel.net.om:http (CLOSE_WAIT)
    iceweasel 3481 amir   40u  IPv4  76096      0t0  TCP 192.168.1.100:60496->hosted
    by
    .datapardaz.ir:http (ESTABLISHED)
    iceweasel 3481 amir   52u  IPv4  97217      0t0  TCP 192.168.1.100:38393->lhr08s07
    in
    -f5.1e100.net:https (ESTABLISHED)
    iceweasel 3481 amir   59u  IPv4  76097      0t0  TCP 192.168.1.100:60497->hosted
    by
    .datapardaz.ir:http (ESTABLISHED)
    iceweasel 3481 amir   60u  IPv4  76098      0t0  TCP 192.168.1.100:60498->hosted
    by
    .datapardaz.ir:http (ESTABLISHED)
    iceweasel 3481 amir   61u  IPv4 100652      0t0  TCP 192.168.1.100:58570->lhr08s05
    in
    -f14.1e100.net:https (ESTABLISHED)
    iceweasel 3481 amir   62u  IPv4  97666      0t0  TCP 192.168.1.100:45112->lhr08s05
    in
    -f14.1e100.net:http (ESTABLISHED
    کد PHP:
    root@nabukatnazzar:~# lsof -i 6
    COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    dhclient 2947 root   21u  IPv6  15810      0t0  UDP 
    *:40891 
    5 - لیست کردن فایل های باز مربوط به رینج پورت 1-1024
    کد PHP:
    root@nabukatnazzar:~# lsof -i TCP:1-1024
    COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    gnome
    -pan 3351 amir   18u  IPv4  90667      0t0  TCP
    192.168.1.100
    :53416->i43.158.178.82.omantel.net.om:http (CLOSE_WAIT)
    iceweasel 3481 amir   52u  IPv4  97217      0t0  TCP 192.168.1.100:38393->lhr08s07
    in
    -f5.1e100.net:https (ESTABLISHED)
    iceweasel 3481 amir   59u  IPv4  76097      0t0  TCP 192.168.1.100:60497->hosted
    y
    .datapardaz.ir:http (ESTABLISHED
    6 - میتوانیم یک user را با استفاده از ^ مجزا کنیم
    مثلا می گوییم فایلهای باز را نشان بده به جز آنهایی که یوزرشان root هست
    کد PHP:
    # 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 
    7 - پیدا کردن این که چه کسی به دنبال چه کامندی یا چه فایلی است
    کد PHP:
    # lsof -i -u amir

    COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    bash    1839 amir  cwd    DIR  253
    ,0    12288   15 /etc
    ping    2525 amir  cwd    DIR  253
    ,0    12288   15 /etc 
    8 - لیست کردن تمام کانکشن های شبکه
    LISTENING و ESTABLISHED
    کد PHP:
    root@nabukatnazzar:~# lsof -i
    COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    dhclient  2947 root    6u  IPv4  15816      0t0  UDP 
    *:bootpc
    dhclient  2947 root   20u  IPv4  15809      0t0  UDP 
    *:28830
    dhclient  2947 root   21u  IPv6  15810      0t0  UDP 
    *:40891
    gnome
    -pan 3351 amir   18u  IPv4 126095      0t0  TCP
    192.168.1.100
    :53435->i43.158.178.82.omantel.net.om:http (ESTABLISHED)
    iceweasel 3481 amir   52u  IPv4  97217      0t0  TCP 192.168.1.100:38393->lhr08s07
    in
    -f5.1e100.net:https (ESTABLISHED)
    iceweasel 3481 amir   59u  IPv4  76097      0t0  TCP 192.168.1.100:60497->hosted
    by
    .datapardaz.ir:http (ESTABLISHED
    9 - جستجو کردن با استفاده از PID
    کامند زیر فقط آنهایی را که PID شان 1 هست را نشان می دهد.
    کد PHP:
    root@nabukatnazzar:~# lsof -p 1
    COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
    init      1 root  cwd    DIR    8
    ,2     4096       2 /
    init      1 root  rtd    DIR    8,2     4096       2 /
    init      1 root  txt    REG    8,2    40560 3276859 /sbin/init
    init      1 root  mem    REG    8
    ,2    14768 1443297 /lib/x86_64-linux-gnu/libdl-2.13.so
    init      1 root  mem    REG    8
    ,2  1603600 1443283 /lib/x86_64-linux-gnu/libc-2.13.so
    init      1 root  mem    REG    8
    ,2   126232 1443394 /lib/x86_64-linux-gnu/libselinux.so.1
    init      1 root  mem    REG    8
    ,2   261184 1443395 /lib/x86_64-linux-gnu/libsepol.so.1
    init      1 root  mem    REG    8
    ,2   136936 1443259 /lib/x86_64-linux-gnu/ld-2.13.so
    init      1 root   10u  FIFO   0
    ,15      0t0    9152 /run/initctl 
    10 - kill کردن تمام اکتیویتی های مربوط به یک یوزر خاص
    کد PHP:
    # kill -9 `lsof -t -u amir` 
    در کامند بالا با استفاده از -t می گوییم که خروجی مختصر و مفید بده یعنی فقط PID ها را به ما میدهد و با -u می گوییم فقط انهایی که مربوط به یک یوزر خاص هستند بده و در نهایت می توانیم آنها را kill کنیم.

    نویسنده : امیر جمشیدی جم
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 05-11-2019, 06:09 PM.
در حال انجام ...
X