diff options
Diffstat (limited to 'LINUX/LSOF.md')
| -rw-r--r-- | LINUX/LSOF.md | 87 |
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 |
