Home » Как использовать команду fuser в Linux — идентификация процессов, использующих файлы
Как использовать команду fuser в Linux — идентификация процессов, использующих файлы

Как использовать команду fuser в Linux — идентификация процессов, использующих файлы

В этой статье разберёмся, зачем вообще нужна команда fuser в Linux, как она помогает идентифицировать процессы, которые используют определённые файлы, и почему это может спасти вам кучу времени и нервов при администрировании серверов. Если вы когда-нибудь сталкивались с ошибками вроде “device is busy” при попытке размонтировать диск, или не могли понять, какой процесс держит порт или файл, — добро пожаловать! Здесь будет много практики, кейсов, команд и немного гиковских лайфхаков.

Как это работает: fuser под капотом

В Unix-подобных системах всё — файл. Сокеты, устройства, каталоги, даже процессы — всё можно представить как файл. Когда вы хотите узнать, кто именно “держит” файл или устройство, на помощь приходит fuser. Эта утилита сканирует таблицу открытых файлов ядра и показывает PID (Process ID) процессов, которые используют указанный ресурс.

В отличие от lsof, которая выводит огромный список всего и сразу, fuser точечно отвечает на вопрос: “Кто сейчас использует этот файл/порт/устройство?” — и делает это быстро. Это must-have для любого, кто настраивает серверы, особенно если речь идёт о файловых системах, сетевых портах или отладке зависших процессов.

Быстрая настройка и запуск: как использовать fuser

  • Утилита fuser обычно предустановлена в большинстве дистрибутивов Linux (часть пакета psmisc).
  • Если её нет — ставим через пакетный менеджер:


# Для Debian/Ubuntu
sudo apt update && sudo apt install psmisc

# Для CentOS/RHEL
sudo yum install psmisc

# Для Arch
sudo pacman -S psmisc

  • Права: для просмотра чужих процессов часто нужны root-права.

Базовые команды и синтаксис

Вот основные сценарии использования fuser:


# Узнать, какие процессы используют файл
fuser /путь/к/файлу

# Узнать, кто держит каталог (например, точку монтирования)
fuser /mnt/data

# Проверить, кто слушает порт 80
fuser -n tcp 80

# Получить подробную информацию (PID + имя процесса)
fuser -v /путь/к/файлу

# Убить все процессы, использующие файл
fuser -k /путь/к/файлу

# Проверить, кто использует устройство (например, диск)
fuser /dev/sdb1

Практические кейсы: как fuser спасает жизнь

Кейс Проблема Решение через fuser Рекомендация
Не размонтируется диск umount: device is busy fuser -vm /mnt/data — видим, кто держит
fuser -km /mnt/data — убиваем процессы
Сначала проверьте, нет ли важных процессов, чтобы не убить sshd или bash
Порт занят nginx не стартует, порт 80 занят fuser -n tcp 80 — PID процесса
ps -p PID -o comm= — имя процесса
Используйте -v для подробностей, не убивайте процессы без разбора
Удалённый файл всё ещё “занят” Файл удалён, но место не освобождается fuser -v /путь/к/файлу — кто держит дескриптор Перезапустите процесс, чтобы освободить ресурсы

Плюсы и минусы fuser vs lsof

Утилита Плюсы Минусы
fuser • Быстро
• Точечно по файлу/устройству/порту
• Можно сразу убить процессы
• Меньше информации, чем lsof
• Не всегда показывает детали дескрипторов
lsof • Очень подробный вывод
• Можно искать по пользователю, PID, типу файла и т.д.
• Медленнее
• Сложнее фильтровать
• Выводит слишком много информации

Официальная документация: man fuser

Нестандартные сценарии и лайфхаки

  • Мониторинг портов в реальном времени: используйте watch -n 1 'fuser -n tcp 80' для отслеживания, кто подключается к порту.
  • Автоматизация очистки точек монтирования: скрипт, который ищет и убивает процессы, мешающие размонтировать диск перед бэкапом.
  • Интеграция с systemd: в юнитах можно прописывать ExecStop с использованием fuser -k для корректного завершения зависших сервисов.
  • Проверка “залипших” логов: если лог-файл удалён, но процесс его держит — fuser -v /var/log/your.log покажет виновника.
  • Скрипты для CI/CD: перед деплоем можно убедиться, что порт свободен: if fuser -n tcp 8080; then echo "Порт занят!"; exit 1; fi

Автоматизация и новые возможности

fuser отлично вписывается в автоматизацию и скрипты. Вот несколько идей:

  • Проверка занятости порта перед запуском сервиса (например, в Ansible или bash-скриптах).
  • Автоматическое завершение процессов, мешающих обновлению файлов или размонтированию томов.
  • Интеграция с мониторингом: если порт или файл “залип” — отправить алерт в Telegram/Slack.
  • Плановые задачи для очистки временных файлов, которые кто-то забыл закрыть.

В связке с cron и systemd можно строить довольно изящные решения для самовосстановления сервисов и автоматического обслуживания серверов.

Похожие решения и альтернативы

  • lsof — более подробная, но медленная альтернатива. Хороша для поиска по множеству критериев.
  • ss — для сетевых соединений (быстрее, чем netstat).
  • netstat — устаревший, но иногда полезный для сетевых портов.
  • procfs — можно вручную смотреть /proc/[pid]/fd/, но это неудобно.

Официальные ресурсы:

Интересные факты и статистика

  • fuser появился ещё в System V, и до сих пор не утратил актуальности.
  • В некоторых дистрибутивах fuser работает быстрее lsof в 5-10 раз на больших файловых системах.
  • Можно использовать fuser для поиска процессов, которые используют NFS или FUSE-монтирования — это спасает при работе с облачными хранилищами.
  • fuser поддерживает работу с несколькими файлами и портами одновременно — можно указать список через пробел.

Выводы и рекомендации

fuser — это незаменимый инструмент для любого, кто работает с Linux-серверами. Он позволяет быстро и точно определить, какие процессы используют файлы, каталоги, устройства или порты. Это особенно важно при обслуживании серверов, где время простоя критично, а “device is busy” может превратиться в ночной кошмар.

  • Используйте fuser для быстрой диагностики и устранения проблем с занятыми файлами и портами.
  • Интегрируйте его в свои скрипты и автоматизацию — это сэкономит время и снизит количество ошибок.
  • Не забывайте про root-права и осторожность при использовании -k (убийство процессов).
  • Для сложных случаев комбинируйте fuser с lsof и ss.

Если вы ищете надёжный VPS или выделенный сервер для своих экспериментов и продакшн-задач — рекомендую заказать VPS или выделенный сервер на этом блоге. Здесь можно не только поиграться с fuser, но и построить инфраструктуру мечты.

Пусть ваши процессы всегда будут под контролем, а серверы — свободны от “залипших” файлов и портов!


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked