Гид по технологиям

Команда fuser в Linux: как найти и завершить процессы

6 min read Linux команды Обновлено 28 Nov 2025
fuser в Linux — найти и завершить процессы
fuser в Linux — найти и завершить процессы

Пример вывода fuser с PID и флагами доступа

Команда fuser — удобный инструмент в арсенале администратора и разработчика. Она помогает выяснить, какие процессы держат открытыми файлы, каталоги или сетевые порты, и при необходимости отправляет сигнал этим процессам. В этой статье объяснено, как читать вывод fuser, какие опции применять, как безопасно завершать процессы и какие альтернативы использовать.

Что делает fuser

fuser выводит идентификаторы процессов (PID), которые обращаются к указанному объекту файловой системы или сетевому ресурсу. Объект передаётся как аргумент — это может быть путь к файлу или каталогу, блок-устройство или пространство имён сети.

Ключевые случаи применения:

  • Освободить файл для удаления или демонтажа файловой системы.
  • Найти процессы, которые слушают порт (используется совместно с указанием /proc/net или опций для портов).
  • Диагностика «device busy» при попытке unmount.

Примеры и инструкции в этой статье проверялись на Ubuntu 22.04 LTS.

Как читать вывод fuser

По умолчанию fuser выводит PID процессов. Однако рядом с PID могут отображаться буквы, обозначающие тип доступа. Это помогает понять, как именно процесс взаимодействует с объектом.

Типы доступа:

  • c — текущий рабочий каталог процесса.
  • e — выполняемый файл процесса.
  • f — открытый файл (может быть опущён в некоторых режимах вывода).
  • F — файл открыт для записи (может быть опущён в некоторых режимах).
  • r — корневой каталог процесса (root directory).
  • m — отображённый в память файл или общая библиотека (mmap).

Процесс может иметь сразу несколько типов доступа к одному объекту. Например, он может иметь и c, и r одновременно.

Базовый пример использования

Простейшая команда выглядит как:

fuser /home/username

Она выведет список PID процессов, использующих каталог /home/username. Если рядом с PID стоит буква c, это означает, что каталог используется как текущий рабочий каталог процесса.

Чтобы увидеть имена процессов и дополнительные поля, добавьте опцию -v (verbose).

fuser -v /home/username

Вывод fuser с опцией -v, показывающий имена процессов и права доступа

Чтобы добавить в вывод имя владельца процесса, используйте опцию -u.

fuser -v -u /path/to/file

Пример вывода fuser с опцией -u: PID и имя пользователя

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

Как завершить процессы с помощью fuser

fuser может не только показывать процессы, но и отправлять им сигналы. Основная опция для этого — -k.

Пример: у нас есть исполняемый файл test-fuser, который запущен. Чтобы завершить все процессы, использующие этот файл, выполните:

fuser -v -k test-fuser

Опции, которые стоит знать при завершении процессов:

  • -k — отправляет сигнал процессам, использующим объект (по умолчанию SIGKILL).
  • -i — интерактивный режим: спрашивает подтверждение перед отправкой сигнала каждому процессу.
  • -SIGNAL — позволяет задать другой сигнал вместо SIGKILL, например -TERM или -HUP. Пример: fuser -k -TERM file

Важно: fuser не завершает сам себя. Также процессы ядра завершить нельзя; fuser выдаст уведомление и не станет предпринимать действий против процессов ядра.

Пример с подтверждением:

fuser -v -i -k /mnt/usb

Это безопаснее при работе на сервере: вы увидите, какие процессы будут затронуты, и сможете подтвердить или отменить действие.

Важное замечание

  • По умолчанию при -k отправляется SIGKILL. Это принудительное завершение. При возможности предпочитайте сначала SIGTERM, чтобы процесс корректно освободил ресурсы.
  • Не убивайте процессы, обрабатывающие критичные для системы файлы (например, процессы, имеющие корневой каталог r). Это может привести к нестабильности.

Дополнительные детали и ограничения

В man-странице fuser перечислены ограничения. Ключевые пункты, которые полезно знать:

       Processes accessing the same file or file system several times  in  the
       same way are only shown once.

       If the same object is specified several times on the command line, some
       of those entries may be ignored.

       fuser may only be able to gather partial information unless run with
       privileges.   As  a  consequence, files opened by processes belonging to
       other users may not be listed and executables may be classified as
       mapped only.

       Installing fuser SUID root will avoid problems associated with partial
       information, but may be undesirable for security and privacy reasons.

       udp and tcp name spaces, and UNIX domain sockets can't be searched with
       kernels older than 1.3.78.

       Accesses by the kernel are only shown with the -v option.

       The -k option only works on processes. If the user is the kernel,
       fuser will print an advice, but take no action beyond that.

Коротко:

  • Без прав root fuser может не увидеть процессы других пользователей.
  • SUID root увеличит видимость, но повышает риски безопасности.
  • По сетевым сокетам поддержка зависит от версии ядра.

Быстрая шпаргалка по флагам

  • -v — подробный режим (PID, пользователь, доступы).
  • -u — показать владельца процесса.
  • -k — отправить сигнал (по умолчанию SIGKILL).
  • -i — запрос подтверждения перед отправкой сигнала.
  • -m — искать по файловой системе или блочному устройству.
  • -n — указать пространство имён (например, tcp) — зависит от платформы.

Альтернативные инструменты и когда их выбрать

  • lsof — показывает открытые файлы и сокеты. Часто более подробен для файлов и сетевых соединений. Совместимность шире, но синтаксис отличается.
  • ss/netstat — для исследования сетевых портов и слушающих сокетов. Полезно, если нужно только посмотреть открытые порты.
  • ps/top/htop — для анализа загрузки и поведения процессов после идентификации PID.

Когда выбрать fuser:

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

Когда выбрать lsof:

  • Требуется подробный отчёт об открытых файловых дескрипторах, путях и сетевых соединениях.

Ментальная модель

Запомните простую схему:

  1. Объект (файл/каталог/порт) — 2. fuser находит PID — 3. Проверяете владельца/имя процесса — 4. Решаете, сигналить или нет — 5. Отправляете сигнал (с подтверждением).

Эта модель помогает действовать последовательно и безопасно.

SOP: безопасный порядок действий для освобождения файла или точки монтирования

  1. Определите объект: путь к файлу или каталог, который мешает (например, /mnt/backup).
  2. Просмотрите процессы без убийства: fuser -v -u /mnt/backup
  3. Оцените важность каждого процесса (что делает, владелец).
  4. Если допустимо — предупредите пользователей/коллег.
  5. Попробуйте корректное завершение: fuser -k -TERM /mnt/backup
  6. Если процесс не отвечает — fuser -k -KILL /mnt/backup или fuser -k /mnt/backup
  7. Проверьте unmout или операцию, для которой объект был заблокирован.
  8. Запишите изменения в инцидент-лог, если это серверная система.

Ролевые чек-листы

Для системного администратора:

  • Убедиться в необходимости убийства процессов.
  • Оповестить пользователей при работе в продакшене.
  • Использовать -i для интерактивности на живых системах.

Для разработчика:

  • Использовать -v и -u, чтобы понять, какие тестовые процессы мешают.
  • Пробовать сначала SIGTERM.

Для поддержки (helpdesk):

  • Собрать вывод fuser и пояснение от пользователя.
  • Передавать на уровень администрирования, если процессы системные.

Примеры и шаблоны команд

Показывает процессы, использующие текущий каталог:

fuser -v .

Завершить все процессы, использующие /var/log/nginx (с подтверждением):

fuser -v -i -k /var/log/nginx

Найти процессы, использующие устройство /dev/sdb1:

fuser -m /dev/sdb1

Использовать альтернативный сигнал SIGTERM:

fuser -k -TERM /path/to/file

Решение проблем и когда fuser не поможет

  • Если процессы принадлежат другому пользователю и вы не root, fuser может не показать их.
  • Если объект связан с ядром (driver, NFS-метаданные) — fuser не сможет завершить модуль ядра.
  • На очень старых ядрах поиск по сокетам может быть недоступен.

Визуальная логика принятия решения

flowchart TD
  A[Есть заблокированный файл или точка монтирования?] --> B{Проверили с помощью fuser?}
  B -->|Нет| C[fuser -v -u /path]
  B -->|Да| D{Процессы критичны?}
  D -->|Да| E[Оповестить заинтересованных / найти альтернативу]
  D -->|Нет| F[Попробовать fuser -k -TERM /path]
  F --> G{Освобождён?}
  G -->|Да| H[Выполнить unmount / удаление]
  G -->|Нет| I[fuser -k -KILL /path]
  I --> H
  E --> H

Заключение

fuser — простой и мощный инструмент для управления блокировками файлов и освобождения ресурсов. Он удобен при работе с точками монтирования, снятии блокировок и устранении состояния “device busy”. Применяйте опции -v, -u, -m для диагностики, и -k для управления процессами. Всегда сначала оценивайте последствия и предпочитайте корректное завершение (SIGTERM) перед принудительным (SIGKILL).

Краткое резюме полезных команд:

  • fuser -v PATH — подробный вывод
  • fuser -v -u PATH — с пользователями
  • fuser -m DEVICE — по файловой системе
  • fuser -k PATH — завершить процессы
  • fuser -i -k PATH — с подтверждением

Важно

Не используйте fuser -k без понимания, какие процессы вы убиваете, особенно на продакшн-серверах.

Критерии приёмки

  • Указанный файл/каталог был освобождён и операция (unmount/удаление) успешно выполнена.
  • Журналы и инцидент-лог обновлены при изменениях в продакшн-среде.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

PUBG падает в Windows 11 — как исправить
Гейминг

PUBG падает в Windows 11 — как исправить

Исправить ошибку «Oops! Something went wrong» в YouTube
Техподдержка

Исправить ошибку «Oops! Something went wrong» в YouTube

Экран входа macOS — настройки и советы
macOS

Экран входа macOS — настройки и советы

Удалить историю Google Bard и отключить её
Конфиденциальность

Удалить историю Google Bard и отключить её

TinyLetter для блогеров: быстро и просто
Email-маркетинг

TinyLetter для блогеров: быстро и просто

Как включить и отключить блокировщик всплывающих окон IE11
браузер

Как включить и отключить блокировщик всплывающих окон IE11