Comando fuser: Encontrando Processos Usando Arquivos e Diretorios

Comando fuser: Encontrando Processos Usando Arquivos e Diretorios

O Que Voce Vai Aprender

  • Como encontrar quais processos estao usando um arquivo ou diretorio com fuser
  • Como rastrear o culpado por tras dos erros umount "target is busy" / "device is busy"
  • Como matar processos ocupados com seguranca usando -k, -i e sinais explicitos

Resumo Rapido

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

Premissas

  • Qualquer distribuicao (fuser vem no pacote psmisc)
  • Os exemplos assumem Ubuntu / systemd
  • Operacoes de montagem e encerramento podem exigir root dependendo do alvo

O Que e o fuser?

Conclusao: O fuser faz uma busca reversa -- dado um arquivo, diretorio, ponto de montagem ou socket, ele informa quais processos estao atualmente usando-o, com PIDs e tipos de acesso.

ps e top vao de "processo --> o que ele esta fazendo". O fuser vai na direcao oposta: "qual processo esta usando este arquivo agora?"

O uso mais simples passa o alvo como argumento.

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

742 e o PID usando /var/log/syslog. Os PIDs sao impressos a direita dos dois pontos. Se nada o estiver usando, nenhum PID e mostrado e o codigo de saida e diferente de zero.

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

Como Ver Quem Esta Usando em Detalhes? (-v)

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

Um PID simples raramente conta toda a historia. -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 esta usando o alvo.

Simbolo Significado
c diretorio atual
e executavel sendo executado
f arquivo aberto (omitido na exibicao padrao)
F arquivo aberto para escrita (omitido na exibicao padrao)
r diretorio raiz
m arquivo mmap ou biblioteca compartilhada

No exemplo, F.... significa que rsyslogd tem o arquivo aberto para escrita. Note que na saida padrao (sem -v), f e F sao omitidos -- apenas o PID e as letras finais (c, e, r, m) aparecem.

Como Resolver o Erro umount "target is busy"?

Conclusao: A desmontagem falha porque algum processo esta usando um arquivo nesse sistema de arquivos. fuser -m <ponto_de_montagem> lista todos os processos que o estao usando.

Este e o cenario 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 diretorio atual esta sob /mnt/data) e vim (editando um arquivo) estao usando-o. Tente a correcao 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 voce tiver confirmado que e seguro para-lo, prossiga para encerra-lo.

Se voce passar -m com um diretorio 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 so atue quando o argumento for um ponto de montagem real, prevenindo acidentes.

Como Parar Processos Ocupados com Seguranca? (-k / -i)

Conclusao: -k encerra os processos usando o alvo, mas o sinal padrao e SIGKILL (instantaneo). Na pratica, combine com -i (interativo) e um sinal explicito.

-k envia um sinal aos processos listados. Sem sinal especificado, o padrao e 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 numero. Liste sinais disponiveis com fuser -l.

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

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

-n <espaco> alterna o namespace. Use tcp ou udp para buscar por numero 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 nao 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 voce quer identificar um PID que esta usando e encerra-lo imediatamente (com -k). Escolha conforme o proposito.

fuser vs lsof: qual devo usar?

Conclusao: Use fuser para identificar um PID ocupado e encerra-lo na hora; use lsof para listar e investigar arquivos e portas abertos em detalhes. Eles se sobrepoem, mas seus objetivos diferem.

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

Para "encontrar e parar imediatamente o que bloqueia uma desmontagem", fuser -m e o caminho mais curto. Para "investigar o que esta 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

Proxima Leitura