summaryrefslogtreecommitdiff
path: root/LINUX/LSOF.md
diff options
context:
space:
mode:
authorvlapa <vlapa@ya.ru>2026-06-13 20:33:26 +0300
committervlapa <vlapa@ya.ru>2026-06-13 20:33:26 +0300
commite5abc1fe99340b979b18864d978179f71fe8f5c5 (patch)
tree98fd0ad7c6d0744894d6e74e446daacd9e6dd1b5 /LINUX/LSOF.md
First
Diffstat (limited to 'LINUX/LSOF.md')
-rw-r--r--LINUX/LSOF.md87
1 files changed, 87 insertions, 0 deletions
diff --git a/LINUX/LSOF.md b/LINUX/LSOF.md
new file mode 100644
index 0000000..34ca676
--- /dev/null
+++ b/LINUX/LSOF.md
@@ -0,0 +1,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 \ No newline at end of file