Comando fuser: Encontrando Processos Usando Arquivos e Diretórios

Comando fuser: Encontrando Processos Usando Arquivos e Diretórios

O Que Você Vai Aprender

  • Como encontrar quais processos estão usando um arquivo ou diretório com fuser
  • Como rastrear o culpado por trás dos erros umount "target is busy" / "device is busy"
  • Como matar processos ocupados com segurança usando -k, -i e sinais explícitos

Resumo Rápido

  • Quer saber quem está usando um arquivo --> fuser -v <alvo>
  • Não consegue desmontar um sistema de arquivos --> fuser -m <ponto_de_montagem> para encontrar o culpado
  • Confirmou que é seguro parar --> fuser -ki <alvo> (kill interativo)

Premissas

  • Qualquer distribuição (fuser vem no pacote psmisc)
  • Os exemplos assumem Ubuntu / systemd
  • Operações de montagem e encerramento podem exigir root dependendo do alvo

O Que é o fuser?

Conclusão: O fuser faz uma busca reversa -- dado um arquivo, diretório, ponto de montagem ou socket, ele informa quais processos estão atualmente usando-o, com PIDs e tipos de acesso.

ps e top vão de "processo --> o que ele está fazendo". O fuser vai na direção oposta: "qual processo está usando este arquivo agora?"

O uso mais simples passa o alvo como argumento.

$ fuser /var/log/syslog
/var/log/syslog:       742

742 é o PID usando /var/log/syslog. Os PIDs são impressos à direita dos dois pontos. Se nada o estiver usando, nenhum PID é mostrado e o código de saída é diferente de zero.

Se fuser não estiver instalado, instale psmisc (sudo apt install psmisc / sudo dnf install psmisc). O mesmo pacote fornece pstree e killall.

Como Ver Quem Está Usando em Detalhes? (-v)

Conclusão: Adicione -v (verbose) para obter uma tabela com USER, PID, tipo de ACCESS e COMMAND, para ver quem está usando o arquivo e como.

Um PID simples raramente conta toda a história. -v adiciona contexto.

$ fuser -v /var/log/syslog
                     USER        PID ACCESS COMMAND
/var/log/syslog:     syslog      742 F.... rsyslogd

Cada letra na coluna ACCESS descreve como o processo está usando o alvo.

Símbolo Significado
c diretório atual
e executável sendo executado
f arquivo aberto (omitido na exibição padrão)
F arquivo aberto para escrita (omitido na exibição padrão)
r diretório raiz
m arquivo mmap ou biblioteca compartilhada

No exemplo, F.... significa que rsyslogd tem o arquivo aberto para escrita. Note que na saída padrão (sem -v), f e F são omitidos -- apenas o PID e as letras finais (c, e, r, m) aparecem.

Como Resolver o Erro umount "target is busy"?

Conclusão: A desmontagem falha porque algum processo está usando um arquivo nesse sistema de arquivos. fuser -m <ponto_de_montagem> lista todos os processos que o estão usando.

Este é o cenário mais comum.

$ sudo umount /mnt/data
umount: /mnt/data: target is busy.

Com -m, fuser lista todos os processos usando um arquivo no sistema de arquivos montado (o argumento pode ser um ponto de montagem ou um dispositivo de bloco).

$ fuser -vm /mnt/data
                     USER        PID ACCESS COMMAND
/mnt/data:           alice      3210 ..c.. bash
                     alice      3398 F.... vim

Aqui bash (cujo diretório atual está sob /mnt/data) e vim (editando um arquivo) estão usando-o. Tente a correção limpa primeiro.

  1. bash --> execute cd para sair de /mnt/data nesse shell
  2. vim --> salve e saia

Somente se um processo em segundo plano persistente permanecer, e você tiver confirmado que é seguro pará-lo, prossiga para encerrá-lo.

Se você passar -m com um diretório simples em vez de um ponto de montagem, todos os processos nesse sistema de arquivos inteiro se tornam alvo. Combine com -M (--ismountpoint) para que fuser só atue quando o argumento for um ponto de montagem real, prevenindo acidentes.

Como Parar Processos Ocupados com Segurança? (-k / -i)

Conclusão: -k encerra os processos usando o alvo, mas o sinal padrão é SIGKILL (instantâneo). Na prática, combine com -i (interativo) e um sinal explícito.

-k envia um sinal aos processos listados. Sem sinal especificado, o padrão é SIGKILL (-9), encerrando processos sem limpeza.

# Perigoso: SIGKILL em todos os processos em /mnt/data sem confirmacao
$ fuser -km /mnt/data

Para evitar acidentes, adicione essas duas flags.

# -i: perguntar antes de encerrar cada processo
# -TERM: enviar SIGTERM (gracioso) em vez de SIGKILL
$ fuser -kim -TERM /mnt/data
                     USER        PID ACCESS COMMAND
/mnt/data:           alice      3398 F.... vim
Kill process 3398 ? (y/N)

Especifique sinais por nome (-HUP, -TERM, -KILL) ou número. Liste sinais disponíveis com fuser -l.

Como Encontrar o Processo Usando uma Porta? (-n)

Conclusão: fuser -n tcp <porta> identifica o processo escutando ou usando uma porta TCP/UDP -- útil para erros "Address already in use".

-n <espaco> alterna o namespace. Use tcp ou udp para buscar por número de porta.

# Processo usando porta TCP 80
$ sudo fuser -v -n tcp 80
                     USER        PID ACCESS COMMAND
80/tcp:              root      1180 F.... nginx

A forma porta/protocolo fuser 80/tcp produz o mesmo resultado. Quando um servidor não inicia com Address already in use, isso localiza o culpado.

Para investigar portas e sockets em profundidade, ss e lsof fornecem mais detalhes. O fuser se destaca quando você quer identificar um PID que está usando e encerrá-lo imediatamente (com -k). Escolha conforme o propósito.

fuser vs lsof: qual devo usar?

Conclusão: Use fuser para identificar um PID ocupado e encerrá-lo na hora; use lsof para listar e investigar arquivos e portas abertos em detalhes. Eles se sobrepõem, mas seus objetivos diferem.

Aspecto fuser lsof
Propósito principal Identificar PIDs + encerrar Listar/inspecionar arquivos e sockets abertos
Saída PIDs e tipos de acesso (conciso) Processo, FD, tipo, tamanho, etc. (detalhado)
Capacidade de kill Sim (-k) Não (encerre o PID separadamente)
Ponto de montagem -m é feito para isso +D / +f como alternativas
Pacote psmisc lsof

Para "encontrar e parar imediatamente o que bloqueia uma desmontagem", fuser -m é o caminho mais curto. Para "investigar o que está acontecendo com calma", use lsof.

Copiar e colar: template para resolver busy

# 1) Identificar o culpado (sem kill)
fuser -vm /mnt/data

# 2) Apos confirmar que e seguro, parar interativamente com SIGTERM
fuser -kim -TERM /mnt/data

# 3) Desmontar novamente
sudo umount /mnt/data

Próxima Leitura