آموزش کامل دستور lsof در لینوکس با مثال‌ های کاربردی

آموزش کامل دستور lsof در لینوکس با مثال‌ های کاربردی
تیم محتوا
مدت زمان مطالعه : 11 دقیقه
۰ کامنت
۱۴۰۴/۰۵/۱۴

شاید برات پیش اومده که وقتی یه پورت یا فایلی توی لینوکس اشغال شده، نمی‌ دونی دقیقاً کدوم برنامه یا پردازش داره ازش استفاده می‌ کنه. تو این مواقع، دستور lsof یکی از بهترین و سریع‌ ترین ابزارهای لینوکسیه که میتونه اطلاعات کاملی درباره فایل‌ ها، پورت‌ ها و پردازش‌ های مرتبط ارائه بده.

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

آموزش کامل دستور lsof در لینوکس با مثال‌ های کاربردی

 دستور lsof چیه و چرا اینقدر مهمه؟

lsof مخفف List Open Files هست و این ابزار نقش کلیدی در مدیریت سیستم‌ های لینوکسی داره. شاید برات جالب باشه بدونی که توی لینوکس همه چیز یه فایل محسوب میشه، از فایل‌ های معمولی گرفته تا سوکت‌ های شبکه و حتی دستگاه‌ های سخت‌ افزاری.

با اجرای دستور lsof میتونی بفهمی کدوم فایل‌ ها در حال حاضر باز هستن و چه پردازش‌ هایی بهشون دسترسی دارن. این قابلیت به مدیران سیستم کمک می‌ کنه مشکلاتی مثل قفل‌ شدن فایل‌ ها، تداخل روی پورت‌ ها و یا مشکلات امنیتی رو سریع‌ تر پیدا و رفع کنن.

کاربردهای اصلی دستور lsof به زبان ساده

🔹 شناسایی پردازش‌ هایی که یک فایل یا پورت خاص را اشغال کرده‌ اند.

🔹 تشخیص فایل‌ های باز حذف شده که باعث پر شدن بی‌ دلیل فضای دیسک می‌ شوند.

🔹 مانیتور کردن ارتباطات شبکه فعال روی پورت‌ ها و شناسایی ارتباطات مشکوک.

🔹 کمک به دیباگ مشکلاتی مثل عدم توانایی در unmount کردن درایوها.

lsof چیه و چرا اینقدر مهمه؟

طرز استفاده پایه‌ای و پرکاربرد دستور lsof

کافیه ترمینال رو باز کنی و فقط بنویسی:

sudo lsof

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

گزینهکاربرد
-u username
نمایش فایل‌ های باز توسط یک کاربر خاص
-p PID
نمایش فایل‌ های باز مربوط به یک پردازش مشخص
-i
نمایش ارتباطات شبکه‌ ای فعال
-t
فقط نمایش شناسه پردازش (PID)
+D path
نمایش فایل‌ های باز در یک دایرکتوری مشخص
-c processname
نمایش فایل‌های باز شده توسط یک برنامه خاص

مثال‌ های کاربردی از دستور lsof

  • مشاهده فایل‌ های باز برنامه nginx:
sudo lsof -c nginx
  • یافتن برنامه‌ ای که پورت ۸۰ را اشغال کرده:
sudo lsof -i :80
  • فهرست فایل‌ های باز یک کاربر خاص:
sudo lsof -u mohammad
  • بررسی فایل‌ های حذف شده ولی هنوز باز که فضای دیسک را اشغال کرده‌ اند:
sudo lsof | grep deleted
  • نمایش ارتباطات TCP فعال:
sudo lsof -iTCP
  • دیدن ارتباطات شبکه‌ ای یک برنامه خاص مثل ssh:
sudo lsof -i -c ssh

lsof command in linux 2

نکات حرفه‌ ای برای استفاده عمیق‌ تر از دستور lsof

  • یافتن علت پر شدن فضای دیسک:

وقتی فضای دیسک پره ولی فایل مشهودی نیست، احتمالاً فایل‌ هایی حذف شدن اما هنوز توسط پردازش‌ ها باز هستن و فضا رو اشغال می‌ کنن. با این دستور می‌ تونی اونا رو پیدا کنی:

sudo lsof | grep deleted
  • جلوگیری از باز بودن همزمان فایل‌ های حساس:

قبل از اجرای یک برنامه یا اسکریپت، می‌ تونی بررسی کنی که فایل مورد نظر باز نباشه:

if lsof /path/to/file.log; then
echo "File is in use!"
exit 1
fi
  • شناسایی ارتباطات مشکوک:

با اجرای lsof به همراه گزینه‌ های -nP می‌ تونی سریع ببینی چه ارتباطات شبکه‌ ای فعاله بدون تبدیل DNS:

sudo lsof -i -nP
  • فیلتر پیشرفته خروجی با grep و awk:

برای مثال، دیدن فرآیند ها و پورت‌ های باز روی پورت ۲۲ (SSH) با اطلاعات مرتب‌ تر:

sudo lsof -i :22 | awk '{print $1, $2, $9}'
  • حل مشکل unmount نشدن:

اگر نمی‌ تونی یه دایرکتوری یا درایو رو unmount کنی، این دستور نشون میده که کدوم فرآیند ها هنوز از اون استفاده می‌ کنن:

sudo lsof +D /mnt/mydrive

چطور خروجی دستور lsof رو بخونیم؟

خروجی lsof معمولاً شامل این ستون‌ هاست:

  • COMMAND: نام برنامه یا پردازش
  • PID: شناسه پردازش
  • USER: کاربر اجرا کننده
  • FD: نوع دسترسی
  • TYPE: نوع فایل
  • NAME: مسیر یا آدرس فایل یا پورت

چرا یادگیری lsof برای مدیران سیستم و DevOps ضروریه؟

🔸 کاهش ریسک نشت منابع: فایل‌ها یا سوکت‌ های باز بلااستفاده باعث کاهش کارایی و گاهی کرش سیستم میشن.

🔸 افزایش امنیت: شناسایی سریع ارتباطات غیرمجاز یا پورت‌ های باز مشکوک.

🔸 کاهش downtime: پیش‌ بینی و رفع مشکلات قبل از جدی شدن اون‌ ها.

🔸 پیش‌ نیاز حرفه‌ ای: تسلط بر lsof یکی از مهارت‌ های پایه برای مدیران سرور و مهندسان DevOps هست.

نکات کمتر شناخته شده اما کاربردی درباره lsof

  • همیشه خروجی رو فیلتر کن:

اجرای بدون فیلتر روی سرورهای شلوغ، خروجی عظیمی ایجاد می‌ کنه که پردازش اون دشواره. بهتره از گزینه‌ هایی مثل -i یا -u استفاده کنی یا خروجی رو به less بفرستی:

sudo lsof | less
  • lsof یا fuser؟

هر دو ابزار برای دیدن فایل‌ های باز هستند، اما fuser برای بررسی سریع‌ تر unmount کاربرد داره و lsof اطلاعات دقیق‌ تر و جزئیات بیشتری ارائه میده.

  • مانیتورینگ خودکار:

با یک اسکریپت ساده می‌ تونی وضعیت پورت‌ ها رو چک کنی و اعلان بدی:

if ! lsof -i :80 > /dev/null; then
echo "Port 80 is closed!"
fi
  • نصب lsof در سیستم‌ های سبک:

در بعضی توزیع‌ های سبک یا داخل کانتینرها، ممکنه lsof نصب نشده باشه. برای نصب در Alpine یا Ubuntu:

apk add lsof # Alpine
apt install lsof # Ubuntu/Debian

جمع‌ بندی نهایی

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

و در نهایت، اگه می‌ خوای برای یادگیری و پروژه‌ های حرفه‌ ای خودت یک محیط پایدار و مطمئن داشته باشی، یک سرور مجازی با منابع اختصاصی مثل سرورهای لینوکس آذرسیس می‌ تونه بهترین انتخاب باشه. سرعت بالا، پشتیبانی حرفه‌ ای و قیمت مناسب این امکان رو بهت میده که به راحتی وارد دنیای واقعی مدیریت سرور و DevOps بشی.

نکته: برای اطلاعات بیشتر به مستندات رسمی lsof در linux.die.net مراجعه کنید.

سوالات متداول دستور lsof در لینوکس

این دستور اطلاعات مربوط به فایل های باز روی سیستم را فهرست می کند. مثلا اینکه کدام فرآیند فایل را باز کرده است. فایل های باز می توانند هر فایلی روی دیسک، pip نام گذاری شده، سوکت یا دستگاهی باشند که توسط یک فرآیند باز می شد.

برای فیلتر کردن نتایج از دستور lsof به همراه گزینه هایش یا دستور grep استفاده کنید. این دستور به دسترسی root یا sudo نیاز دارد. زیرا اکثر فرآیندها و یا دستگاه هایی که فهرست می کند به root تعلق دارند.

۰

دیدگاه و پرسش