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,-ie 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 (
fuservem no pacotepsmisc) - Os exemplos assumem Ubuntu / systemd
- Operacoes de montagem e encerramento podem exigir root dependendo do alvo
O Que e o fuser?
Conclusao: O
fuserfaz 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.
bash--> executecdpara sair de/mnt/datanesse shellvim--> 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:
-kencerra 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)
fuser -k encerra processos que estao usando indiscriminadamente. Executa-lo contra areas do sistema como / (raiz) ou /usr pode derrubar todo o sistema. Sempre confirme os alvos com -v antes de encerrar.
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
fuserpara identificar um PID ocupado e encerra-lo na hora; uselsofpara 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