1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
👩💻 **Как использовать lsof для поиска процессов, блокирующих файлы**
`lsof` — позволяет просматривать информацию об открытых файлах и связанных с ними процессах. Особенно полезно, если вы сталкиваетесь с ошибками доступа к файлам, например, при монтировании, удалении или использовании разделов.
⚙️ **Примеры использования**
🟢 К примеру, если мы не можем удалить файл или получить к нему доступ, выполним:
`lsof /путь/к/файлу
В результате получим список процессов, которые используют файл, с подробной информацией: PID, пользователь, команда и доступ.
🟢 Чтобы просмотреть все файлы, которые были открыты в определенном каталоге, используйте следующую команду:
`lsof +D /директория
➕ **Дополнительно:**
➡️ `lsof -u username` — покажет файлы, открытые процессами указанного пользователя.
➡️ `lsof -p PID` — отображает все файлы, которые использует процесс с заданным PID.
➡️ `lsof -i :PORT` — покажет процессы, использующие определённый сетевой порт.
===================================
⚙️ **Проверка использования порта в Linux**
Иногда нужно узнать, какой процесс использует определённый порт. В Linux это можно сделать несколькими способами.
**📌 Просмотр процессов, занявших порт**
**🟢 Определение процесса по порту:**
`sudo lsof -i :80`
Покажет процесс, использующий порт 80.
**🟢 Вывести PID процесса:**
`sudo netstat -tulnp | grep :80`
Альтернативный способ проверки.
**🟢 Завершение процесса по PID:**
`sudo kill -9 <PID>`
Останавливает процесс, если он мешает запуску сервиса.
**Полезно при отладке серверов, проверки конфликтов между сервисами и устранения проблем с сетью.**
=======================
**Как исправить "rm: cannot remove ‘file’: Device or Resource Busy"?
Бывало же у вас такое - заканчиваешь работать с каким-то ресурсом (файлом/каталогом/устройством), хочешь его удалить и видишь ошибку о том, что он чем-то занят (используется системой либо каким-то процессом).
`rm: cannot remove 'file-or-directory': Device or resource busy
Тут нужно понять, в чем конкретная причина и чем он задействован: то ли процессом, то ли это, быть может, точка монтирования для какой-то FS…
Распространенных решения вижу 2:
1. Использование команд "**lsof + fuser**" для определения занятых ресурсов и завершения процессов. Если вы не знаете, какая программа мешает выполнить операцию, используйте **lsof**:
`$ lsof +D Sources/App/
COMMAND PID USER FD NAME
server 22331 xoadmin txt Sources/App/server
client 22332 xoadmin txt Sources/App/client
Если у нас ресурс занимают 2 процесса, можно и через **kill** все грохнуть. Если их много, можно более автоматизированно - через **fuser**. Эта команда завершит все процессы, которые что-то используют в целевом каталоге:
`$ fuser -k Sources/App/
После выполнение мы вырубим сразу оба процесса **22331** и **22332**.
2. Определение точки монтирования. Это полезно, когда какая-нибудь флешка или внешний диск монтирован в целевой каталог. Узнать, так ли это, можно через команду **mount**. Допустим, у меня не получается удалить **test**:
`$ rm -rf test
`rm: cannot remove 'test/tmpfsdir': Device or resource busy
Проверяем, является ли **tmpfsdir** точкой монтирования:
`$ mount | grep test/tmpfsdir
`none on /home/u/test/tmpfsdir type tmpfs (rw,relatime,inode64)
Вывод говорит о том, что в каталог **tmpfsdir** примонтирована FS **tmpfs**. Для успешного выполнения операции нужно размонтировать каталог:
`$ sudo umount test/tmpfsdir
`$ rm -rf test
|