در لینوکس همه چیز به عنوان فایل در نظر گرفته می شود و در داخل دایرکتوری ها سازماندهی می شود. lsof به معنای LiSt of Open Files است و برای یافتن اینکه کدام فایل ها با کدام فرآیند باز می شوند، استفاده می شود. همچنین می توانید با کمک دستور lsof اطلاعاتی در مورد فرآیند باز کردن فایل ها پیدا کنید. در این مقاله دستور lsof را با مثال های کاربردی بررسی می کنیم. همراه ما باشید.
داشتن سرور مجازی برای هر کسب و کار یا افرادی که در حوزه بازار های مالی فعالیت دارند مهم است.اگر میخواهید یک سرور مجازی ارزان و به صرفه در سیستم عامل های لینوکس یا ویندوز خریداری کنید میتوانید از خدمات سرور مجازی ویندوز و یا سرور مجازی لینوکس آذرسیس استفاده نمایید.
فهرست مطالب
معرفی دستور lsof
ls مخفف LiSt و lsof مخفف عبارت LiSt of Open Files است. دستور 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 تعلق دارند.