آشنایی با Lsof

در زیر لینوکس ، بسیاری از اشیاء بدون توجه به اینکه این شیء در واقع یک فایل ، دستگاه ، فهرست یا سوکت است ، یک پرونده در نظر گرفته می شود. لیست یک پرونده آسان است ، پوسته ای lsبرای آن ساخته شده است . اما اگر کاربر بخواهد ببیند کدام پرونده ها توسط فرآیند سرور وب باز شده اند؟ یا اگر آن کاربر می خواست متوجه شود کدام پرونده ها در یک فهرست خاص باز می شوند؟ این جایی است که lsofوارد بازی می شود. با افزودن "پرونده های باز" lsofبه عنوان lsموارد تصور کنید .

لطفاً توجه داشته باشید که در حالیکه BSD برای این کار ابزار دیگری دارد fstat، چندین طعم دیگر یونیکس (به عنوان مثال Solaris) نیز وجود دارد lsof. گزینه ها و پرچم ها بر روی سیستم عامل های دیگر و همچنین از نظر ظاهری متفاوت است ، اما به طور کلی دانش در این مقاله باید برای آنها نیز کاربرد داشته باشد.

اول ، اجازه دهید نگاهی به قالب lsofخروجی و نحوه خواندن آن بیندازیم . خروجی معمول lsofبدون هیچ گونه پارامتر شبیه به موارد زیر است. این برای خوانایی اصلاح شده است.

COMMAND    PID  TID       USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
init         1            root  cwd       DIR              254,1      4096          2 /
init         1            root  rtd       DIR              254,1      4096          2 /
init         1            root  txt       REG              254,1     36992    7077928 /sbin/init
init         1            root  mem       REG              254,1     14768    7340043 /lib/x86_64-linux-gnu/libdl-2.13.so
init         1            root  mem       REG              254,1   1603600    7340040 /lib/x86_64-linux-gnu/libc-2.13.so
init         1            root  mem       REG              254,1    126232    7340078 /lib/x86_64-linux-gnu/libselinux.so.1
init         1            root  mem       REG              254,1    261184    7340083 /lib/x86_64-linux-gnu/libsepol.so.1
init         1            root  mem       REG              254,1    136936    7340037 /lib/x86_64-linux-gnu/ld-2.13.so
init         1            root   10u     FIFO               0,14       0t0       4781 /run/initctl

این ستون ها به معنی زیر است:

  • فرمان - فرایندی که یک پرونده باز به آن تعلق دارد ، در این مثال همه چیز به آن مربوط می شود init.
  • PID - شماره شناسایی فرایند مذکور.
  • USER - کاربری که این فرآیند تحت آن اجرا می شود. برای init، آن را تقریبا همیشه root.
  • FD - توصیف کننده پرونده پرونده ، رایج ترین آنها:
    • cwd- دایرکتوری کار فعلی (ممکن است متوجه شباهتی با pwdدستوری شوید که فهرست کار فعلی را چاپ می کند).
    • rtd - فهرست اصلی یک فرآیند.
    • txt- A text file، این می تواند به معنای یک پرونده پیکربندی مربوط به فرآیند یا "کد منبع" مربوط به (یا متعلق به) فرآیند باشد.
    • mem - به اصطلاح "پرونده نقشه برداری حافظه" ، یعنی بخشی از حافظه مجازی (بخوانید: RAM) که به یک فایل اختصاص داده شده است.
    • عدد - عدد نمایانگر توصیف کننده واقعی فایل است ، کاراکتر بعد از شماره ، روشی است که پرونده در آن باز می شود:
    • r - خواندن.
    • w - نوشتن.
    • u - خواندن و نوشتن.
  • TYPE - نوع واقعی پرونده را مشخص می کند ، رایج ترین آنها:
    • REG - یک پرونده معمولی.
    • DIR - دایرکتوری
    • FIFO - اولین ورودی اولین خروجی.
  • دستگاه - تعداد اصلی و جزئی دستگاهی که پرونده را در اختیار دارد.
  • اندازه - اندازه پرونده ، بایت.
  • NODE - شماره inode پرونده.
  • نام - نام پرونده.

این ممکن است فعلاً کمی غریب باشد ، اما اگر با lsofچند بار کار کنید ، به سرعت وارد مغز شما خواهد شد.

همانطور که در بالا ذکر شد ، در اینجا تولید خروجی lsofکوتاه شده است. بدون هیچ گونه استدلال یا فیلتر ، lsofصدها خط تولید تولید می کند که فقط شما را گیج می کند.

برای حل آن مشکل دو رویکرد اساسی وجود دارد:

  • lsofبرای محدود کردن نتایج از یک یا چند گزینه خط فرمان استفاده کنید.
  • برای مثال خروجی را از طریق لوله وارد کنید grep.

اگرچه گزینه دوم ممکن است راحت تر به نظر برسد ، زیرا نیازی به یادآوری lsofگزینه های خط فرمان را ندارید ، اما به طور کلی آنقدر انعطاف پذیر و کارآمد نیست ، بنابراین به گزینه اول می پردازیم.

بیایید تصور کنیم که می خواهید یک فایل را با ویرایشگر متن مورد علاقه خود باز کنید ، و ویرایشگر متن به شما می گوید که فقط در حالت فقط خواندنی قابل باز شدن است زیرا برنامه دیگری در حال حاضر به آن دسترسی دارد. lsofبه شما کمک می کند تا بدانید که مرتکب کیست:

lsof /path/to/your/file

این کار خروجی مشابه با این تولید می کند:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
vim 2679 root    5w   REG  254,1   121525 6035622 /root/lsof.txt

ظاهراً جلسه را مسدود و قدیمی تر فراموش کردید! یک مشکل بسیار مشابه هنگامی اتفاق می افتد که می خواهید یک اشتراک NFS را جدا کنید و umountبه شما می گوید که نمی تواند زیرا چیزی هنوز به پوشه نصب شده دسترسی پیدا می کند. باز هم ، lsofمی تواند به شما در شناسایی مقصر کمک کند:

lsof +D /path/to/your/directory/

توجه داشته باشید که برش خسته کننده بسیار مهم است. در غیر این صورت lsofفرض می کنید منظور شما از یک پرونده معمولی است. با +جلوی پرچم اشتباه گرفته نشوید - lsofدارای گزینه های بسیاری از خط فرمان است که +علاوه بر رایج تر ، به آن نیاز دارد -. خروجی به این شکل است:

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
mocp    5637  music    4r   REG   0,19 10147719 102367344 /home/Music/RMS_GNU_SONG.ogg

این بدان معنی است که این فرآیند mocp، با PID 5637، متعلق به کاربر music، پرونده ای به نام باز کرده است RMS_GNU_SONG.ogg. با این حال ، حتی پس از بسته شدن این فرآیند ، هنوز هم یک مشکل وجود دارد - نمی توان جلوی حجم NFS را پرده برداشت.

lsofدارای -cپرچمی است که نمایش پرونده ها را با نام یک فرآیند دلخواه باز کرده است.

lsof -c mocp

این محصول می تواند مانند این باشد:

mocp    9383  music    4r   REG   0,19 10147719 102367344 /home/Music/ANOTHER_RMS_GNU_SONG.ogg

در این مثال ، نمونه دیگری از mocpاجرا وجود دارد که مانع از عدم اشتراک سهم می شود. پس از خاموش کردن این فرآیند ، شما می توانید مطمئن شوید که کاربر musicهیچ پرونده دیگری که به طور بالقوه مشکل ساز باشد ، باز نشده است. lsofدارای -uپرچمی برای نمایش پرونده هایی است که توسط یک کاربر خاص باز شده است. به یاد داشته باشید ، یک فایل همیشه فقط یک پرونده معمولی در دیسک سخت شما نیست!

lsof -u music

همچنین می توانید چندین کاربر را که با کاما از هم جدا شده اند ، عبور دهید:

lsof -u music,moremusic

یک نکته مهم در مورد رفتار پیش فرض lsof: نتایج به دست آمده از نوع OR است یا به این معنی است که شما می توانید نتایج پرونده را توسط فرآیندی که متعلق به کاربر musicیا کاربر moremusicباشد باز کنید. اگر می خواهید نتایج مطابق با نتایج را که متعلق به هر دو کاربر است ببینید ، پس باید پرچم را تصویب کنید -a:

lsof -au music, moremusic

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

lsof -g musicusers

همچنین می توانید پرچم های خط فرمان را با هم ترکیب کنید:

lsof -u music,moremusic -c mocp

or

lsof -u ^music +D /home/Music

در خط آخر ، ما پرچم ویژه دیگری را اضافه کردیم - ^که مخفف NOT منطقی است . اگر خروجی پس از اجرای آن دستور خالی باشد ، احتمالاً unmounting موفقیت آمیز خواهد بود.

در مثالهای قبلی بیشتر به پرونده های منظم نگاه می کردیم. درمورد سوکت و اتصالات شبکه چطور؟

برای لیست تمام اتصالات شبکه فعلی lsofدارای -iپرچم است:

lsof -i

به نظر می رسد که خروجی شبیه به چیزی است که ما تاکنون دیدیم ...

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
owncloud  3509  myuser   25u  IPv4  44946      0t0  TCP strix.local:34217->myserver.vultr.com:https (ESTABLISHED)
firefox   3612  myuser   82u  IPv4  49663      0t0  TCP strix.local:43897->we-in-f100.1e100.net:https (ESTABLISHED)
ssh       3784  myuser    3u  IPv4  10437      0t0  TCP strix.local:51416->someserver.in:ssh (ESTABLISHED)
wget      4140  myuser    3w  IPv4  45586      0t0  TCP strix.local:54460->media.ccc.de:http (CLOSE_WAIT)

... به جز یک تفاوت: به جای نام پرونده ها یا دایرکتوری ها ، ستون NAMEاکنون اطلاعات اتصال را نشان می دهد. هر اتصال از قسمت های زیر تشکیل شده است:

  • پروتکل
  • نام میزبان محلی.
  • منبع درگاه اتصال.
  • نام DNS مقصد.
  • بندر مقصد.
  • وضعیت اتصال.

مانند بسیاری از ابزارهای دیگر ، شما ممکن است از حل نام و پورت DNS ( -nو -Pبه ترتیب) خودداری کنید . پرچم -iپارامترهای اضافی را می گیرد. می توانید نمایش دهید یا نه tcp، udpیا icmpاتصالات یا پورتهای خاصی را نشان دهید:

lsof -i :25
or
lsof -i :smtp

دوباره ، پارامترها را می توان ترکیب کرد. مثال زیر ...

lsof -i tcp:80

... فقط اتصالات TCP را با استفاده از درگاه 80 به شما نشان می دهد. همچنین ممکن است آن را با گزینه هایی که قبلاً از پرونده های "کلاسیک" می شناسید ترکیب کنید:

lsof -a -u httpd -i tcp

با این کار تمام اتصالات TCP توسط کاربر باز می شود httpd. توجه داشته باشید -aپرچم ، که باعث تغییر رفتار پیش فرض lsof(همانطور که در ابتدا گفته شد). مانند بسیاری از ابزارهای خط فرمان ، شما می توانید بسیار عمیق بروید. موارد زیر فقط اتصالات TCP را نشان می دهد که حالت "ایجاد" شده است:

lsof -i -s TCP:ESTABLISHED

در این مرحله ، شما باید درک اساسی در مورد نحوه lsofکار ، همراه با برخی موارد استفاده معمولی داشته باشید. برای مطالعه بیشتر ، lsofبه سیستم عامل خود مراجعه کنید.



Leave a Comment

نحوه نصب بستر سبد خرید LiteCart در اوبونتو 16.04

نحوه نصب بستر سبد خرید LiteCart در اوبونتو 16.04

LiteCart یک بستر سبد خرید آزاد و منبع باز است که به زبان های PHP ، jQuery و HTML 5 نوشته شده است. این نرم افزار ساده ، سبک و با کاربرد آسان است.

نحوه نصب Anchor CMS بر روی یک VPS Fedora 26 LAMP

نحوه نصب Anchor CMS بر روی یک VPS Fedora 26 LAMP

با استفاده از یک سیستم متفاوت؟ Anchor CMS یک سیستم مدیریت محتوا (CMS) بسیار ساده و بسیار سبک ، بسیار آزاد و آزاد است.

اشتراک NFS را در Debian تنظیم کنید

اشتراک NFS را در Debian تنظیم کنید

NFS یک سیستم فایل مبتنی بر شبکه است که به رایانه ها اجازه می دهد تا از طریق شبکه رایانه ای به فایلها دسترسی پیدا کنند. این راهنما توضیح می دهد که چگونه می توانید پوشه ها را روی NF قرار دهید

نحوه بروزرسانی CentOS 7 ، Ubuntu 16.04 و Debian 8

نحوه بروزرسانی CentOS 7 ، Ubuntu 16.04 و Debian 8

هنگام راه اندازی سرور جدید لینوکس ، به روزرسانی سیستم های هسته و سایر بسته ها تا آخرین نسخه پایدار یک روش توصیه شده است. در این مقاله

نحوه نصب Matomo Analytics در Fedora 28

نحوه نصب Matomo Analytics در Fedora 28

با استفاده از یک سیستم متفاوت؟ Matomo (سابقا پیویک) یک بستر تحلیلی منبع باز است ، یک جایگزین باز برای Google Analytics. منبع Matomo میزبان o

یک سرور TeamTalk را در لینوکس تنظیم کنید

یک سرور TeamTalk را در لینوکس تنظیم کنید

TeamTalk یک سیستم کنفرانس است که به کاربران امکان می دهد مکالمات صوتی / تصویری با کیفیت بالا ، چت متنی ، انتقال فایل ها و صفحه های به اشتراک بگذارند. من

با استفاده از کلید SSH خود برای ورود به کاربران غیر ریشه استفاده کنید

با استفاده از کلید SSH خود برای ورود به کاربران غیر ریشه استفاده کنید

Vultr یک ویژگی را فراهم می کند که به شما امکان می دهد با ایجاد یک نمونه جدید ، کلیدهای SSH را از قبل نصب کنید. این اجازه می دهد تا به کاربر root دسترسی داشته باشید ، با این حال ، th

نحوه نصب انجمن NodeBB در FreeBSD 12

نحوه نصب انجمن NodeBB در FreeBSD 12

با استفاده از یک سیستم متفاوت؟ NodeBB یک نرم افزار انجمن مبتنی بر Node.js است. از سوکت های وب برای تعامل فوری و اعلامیه های زمان واقعی استفاده می کند. NodeB

نصب و راه اندازی ZNC در اوبونتو

نصب و راه اندازی ZNC در اوبونتو

ZNC یک پیشرانه پیشرفته شبکه IRC است که تمام وقت بهم متصل می شود تا مشتری IRC بتواند بدون از دست دادن جلسه گپ قطع یا وصل شود.

نحوه نصب Ranger Terminal File Manager در لینوکس

نحوه نصب Ranger Terminal File Manager در لینوکس

رنجر یک مدیر فایل مبتنی بر خط فرمان است که دارای کلیدهای اتصال VI است. این برنامه یک رابط لعنتی مینیمالیستی و زیبا با نمای سلسله مراتب فهرست ارائه می دهد