اگر مدیر یک سرور لینوکسی باشین ، حتما به ابزار lsof برای مانیتور سرور خودتون نیاز دارین.
lsof فایل هایی که پروسس مشخص با آن درگیر است را نمایش می دهد.
هر چیزی در یونیکسها و لینوکس در قالب یک فایل است. کاربران و فرآیندها بصورت مداوم و همیشگی با برخی از فایلها کار میکنند. برای مثال یک CMD با برخی از فایلهای کتابخانه C و یک فایل پیکربندی در حال کار کردن است. فایلها در دایرکتوریها ذخیره میشوند؛ این که میگوییم در یونیکسها و لینوکس همه چیز فایل است فقط به فایلهای متنی و دیگر فایلهای مرسوم ختم نمیشود، بلکه حتی اتصالهای شبکه و سخت افزارها نیز فایل هستند و این فایلها توسط کاربران، سرویسها و فرآیندها مورد استفاده قرار میگیرند. بدون در نظر گرفتن نوع فایل، هر فایلی در یونیکسها و لینوکسها دارای یک File Descriptor است که در خروجی دستور lsof با FD نشان داده میشود. FD اطلاعات جامعی از یک فایل به شما میدهد. lsof مخفف List Open File است که در تمامی سیستمعاملهای مبتنی بر یونیکس مانند BSDها و توزیعهای لینوکسی موجود و قابل استفاده است. این نکته را به یاد داشته باشید که خروجی دستور lsof بسیار طولانی است، به همین دلیل میتوانید این دستور را با less ترکیب کنید. ستونهای PID,COMMAND و USER به ترتیب معرف نام دستور، شناسه یا PID دستور و نام کاربری است که از آن فایل استفاده میکند. ستون Device به نام دیسک، ستون SIZE/OFF به اندازه فایل و ستون NAME معرف نام فایل است. از ستونهای گفته شده میتوان فهمید که کدام USER چه دستوری یا فرآیندی را با چه PIDای استفاده میکند و فرآیند یا دستور در حال استفاده از کدام فایل، با چه اندازهای و در کدام دیسک ذخیره شده است. ستون دیگر FD و TYPE هستند که اطلاعات کاملتری را در اختیار قرار میدهند؛ ستون FD هم مخفف File Descriptor است.
کاربرد دستور lsof
- لیست کردن فرآیندها بر اساس فایلهای باز شده: یعنی بر اساس یک فایل مشخص لیستی از فرآیندها داشته باشیم. مثال زیر فرآیندهایی که فایل syslog را باز کردهاند را نشان میدهد. lsof /var/log/syslog
- لیست کردن فایلهای باز شده در زیر یک دایرکتوری: یعنی فایلهای باز شده تحت یک دایرکتوری معین شده را فهرست کنیم. مثال زیر تمامی فایلهای باز شده در زیر دایرکتوری var/log/ را فهرست میکند. lsof +D /var/log
- لیست کردن فایلهای باز شده توسط فرآیندهایی که با یک رشته مشخص شروع میشوند. برای اینکار از سوئیچ c- استفاده میکنیم. در مثال زیر تمام فایلهای باز شده برای فرآیندهایی که با رشتههای ssh و init آغاز میشوند را فهرست میکند. lsof -c ssh -c init
- لیست کردن فایلهای باز شده برای یک نقطه اتصال: منظور از نقطه اتصال یعنی اینکه یک پارتیشن مانند dev/sda3/ را به یک دایرکتوری مانند home/ یا یک دایرکتوری مانند tmp/mountpoint/ وصل کنیم. این حالت مانند حالت فهرست کردن فایلهای باز شده در زیر یک دایرکتوری است. lsof /home
- لیست کردن فایلهای باز شده برای یک کاربر خاص: یعنی تمامی فایلهای باز شده توسط یک کاربر خاص را فهرست کنیم. اینکار توسط سوئیچ u- انجام میشود و بجای USERNAME نام کاربری دلخواه را بنویسید. lsof -u USERNAME
- لیست کردن فایلهای باز شده برای یک فرآیند خاص: یعنی با PID فرآیند، فهرست تمام فایلهای باز شده توسط آن فرآیند را ببینیم. اینکار توسط سوئیچ p- انجام میشود و بجای PID باید شناسه فرآیند را جایگزین کنید. lsof -p PID
- اما برای بدست آوردن PID یک فرآیند میتوانید از دستور ps بصورت زیر استفاده کنید؛ کافیاست بجای fav نام دستور یا سرویس یا فرآیند را که میخواهید PID آن را بدست آورید بنویسید. ps aux | grep fav