lsof یک دستور کاربردی در لینوکس است که کار آن نشان دادن لیست فایل های باز در سیستم است در واقع مخفف LiSt of Open Files است. با این کامند میتوانیم ببینیم که کدام فایل ها با استفاده از کدام پروسس ها باز است. همان طور که میدانیم در لینوکس همه چیز فایل در نظر گرفته می شود مانند :
یکی از مواردی که می توانیم از این کامند استفاده کنیم وقتی است که یک دیسک را نمی توانیم unmount کنیم و سیستم عامل به ما می گوید که این فایل در حال استفاده شدن است در آن زمان با استفاده از این کامند می توانیم بفهمیم که کدام فایل در حال استفاده شدن است.
همچنین توصیه میشود مطالعه کنید :
چگونه بفهمیم در لینوکس چه کسی در حال استفاده از یک فایل است
ابزار fswatch - مانیتور کردن تغییرات فایل ها و دایرکتوری ها در لینوکس
امنیت فایل ها و دایرکتوری ها با استفاده از ACL در لینوکس
دستور chattr برای ایجاد فایل های مهم و غیر قابل تغییر در لینوکس
دستور top در لینوکس به همراه 12 مثال عملی
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 را نشان می دهد
3 - پیدا کردن پروسس هایی که بر روی یک پورت خاص اجرا شده اند
4 - لیست کردن فایل های باز فقط ipv4 یا ipv6
یعنی آنهایی که TYPE آنها IPV4 یا IPV6 باشد
5 - لیست کردن فایل های باز مربوط به رینج پورت 1-1024
6 - میتوانیم یک user را با استفاده از ^ مجزا کنیم
مثلا می گوییم فایلهای باز را نشان بده به جز آنهایی که یوزرشان root هست
7 - پیدا کردن این که چه کسی به دنبال چه کامندی یا چه فایلی است
8 - لیست کردن تمام کانکشن های شبکه
LISTENING و ESTABLISHED
9 - جستجو کردن با استفاده از PID
کامند زیر فقط آنهایی را که PID شان 1 هست را نشان می دهد.
10 - kill کردن تمام اکتیویتی های مربوط به یک یوزر خاص
در کامند بالا با استفاده از -t می گوییم که خروجی مختصر و مفید بده یعنی فقط PID ها را به ما میدهد و با -u می گوییم فقط انهایی که مربوط به یک یوزر خاص هستند بده و در نهایت می توانیم آنها را kill کنیم.
- pipes
- Sockets
- Directories
- Devices
یکی از مواردی که می توانیم از این کامند استفاده کنیم وقتی است که یک دیسک را نمی توانیم unmount کنیم و سیستم عامل به ما می گوید که این فایل در حال استفاده شدن است در آن زمان با استفاده از این کامند می توانیم بفهمیم که کدام فایل در حال استفاده شدن است.
همچنین توصیه میشود مطالعه کنید :
چگونه بفهمیم در لینوکس چه کسی در حال استفاده از یک فایل است
ابزار fswatch - مانیتور کردن تغییرات فایل ها و دایرکتوری ها در لینوکس
امنیت فایل ها و دایرکتوری ها با استفاده از ACL در لینوکس
دستور chattr برای ایجاد فایل های مهم و غیر قابل تغییر در لینوکس
دستور top در لینوکس به همراه 12 مثال عملی
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 یا 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
کد 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`