## 🔍 مدیریت فایلها و فرآیندها با دستور `lsof` در لینوکس
دستور `lsof` (List Open Files) ابزاری قدرتمند برای مشاهدهی فایلها، سوکتها و منابعی است که توسط فرآیندها در سیستم باز شدهاند. کاربردهای متنوع آن از دیباگینگ تا مانیتورینگ منابع را شامل میشود.
---
### ▶️ نصب `lsof`
در توزیعهای مختلف:
- **Debian/Ubuntu**
```bash
sudo apt-get install lsof
```
- **CentOS/RHEL**
```bash
sudo yum install lsof
```
- **Fedora**
```bash
sudo dnf install lsof
```
- **openSUSE**
```bash
sudo zypper install lsof
```
---
### 📖 ساختار خروجی
هر خط خروجی شامل فیلدهای زیر است:
| فیلد | توضیح |
|---------|------------------------------|
| COMMAND | نام دستور یا فرآیند |
| PID | شناسه فرآیند |
| USER | مالک فرآیند |
| FD | فایل دسکریپتور (مثلاً `1u`) |
| TYPE | نوع فایل (REG, DIR, CHR, TCP, ...) |
| DEVICE | شماره دستگاه |
| SIZE/OFF| اندازه یا آفست |
| NODE | شماره گره (inode) |
| NAME | مسیر یا نام منبع باز |
---
### 🔧 کاربردهای کلیدی
1. **نمایش همه فایلهای باز**
```bash
lsof
```
2. **فیلتر بر اساس فایل یا مسیر**
```bash
lsof /var/log/syslog
```
3. **فیلتر بر اساس فرآیند (PID)**
```bash
lsof -p 1234
```
4. **نمایش فایلهای باز یک کاربر خاص**
```bash
lsof -u username
```
5. **نمایش سوکتهای شبکه باز**
```bash
lsof -i
```
- برای TCP:
```bash
lsof -i tcp
```
- برای UDP:
```bash
lsof -i udp
```
- برای پورت خاص:
```bash
lsof -i :80
```
6. **نمایش فایلهای باز توسط یک فرمان خاص**
```bash
lsof -c sshd
```
7. **فیلتر بر اساس نوع فایل**
```bash
lsof -d txt # فایلهای متنی اجراشده
lsof -d mem # حافظه مشترک
```
8. **زمانبندی مانیتورینگ (مثال اسکریپت ساده)**
```bash
watch -n 5 'lsof -i :22'
```
9. **بستن فایلهای باز شده توسط فرآیندی خاص**
شناسایی PID از `lsof` و سپس استفاده از `kill`:
```bash
kill -9 $(lsof -t /path/to/file)
```
10. **یافتن فرآیندی که فایل را قفل کرده**
```bash
lsof +D /mnt/data
```
---
### 🧠 نکات حرفهای
- **کار با NFS و سیستمهای توزیعشده**: برای یافتن فایلهای باز شده روی mountهای NFS از گزینه `-N` استفاده کنید.
```bash
lsof -N /mnt/nfs
```
- **خروجی خلاصه**: برای نمایش فقط تعداد فایلهای باز:
```bash
lsof | wc -l
```
- **ادغام با سایر ابزارها**:
```bash
lsof -i tcp:22 | grep ESTABLISHED
```
- **اجرا با دسترسی root**: برای دیدن همهی فایلها و فرآیندها بهتر است `sudo` استفاده کنید.
---
## 🔍 جمعبندی
دستور `lsof` یک ابزار کلیدی برای هر مدیر سیستم لینوکسی است که میخواهد بداند چه فایلهایی توسط کدام فرآیندها در حال استفاده است. با فیلترها و گزینههای متنوع آن، میتوانید به سرعت مشکلات مربوط به فایلهای قفلشده، سوکتهای شبکه یا مصرف ناخواسته منابع را شناسایی و رفع کنید.