Tentei remover um arquivo no Linux usando rm -rf file_name
, mas obtive o erro:
rm: file_name not removed. Text file busy
Como posso descobrir qual processo está usando este arquivo?
Respostas:
Você pode usar o fuser
comando, como:
fuser file_name
Você receberá uma lista de processos usando o arquivo.
Você pode usar diferentes sinalizadores com ele, a fim de receber uma saída mais detalhada.
Você pode encontrar mais informações no artigo da Wikipédia do fusor ou nas man
páginas.
fuser
implementações sejam iguais ou funcionem da mesma maneira. Mesmo que -i
seja definido em POSIX, a implementação particular que você está usando não tem necessariamente as mesmas opções que as descritas no artigo da Wikipedia. Por exemplo, estou usando AIX agora, e o fuser
disponível neste sistema também não tem a -i
opção.
fuser
nem lsof
estavam trabalhando para mim em um convidado virtualbox. Essa resposta me salvou.
A resposta de @jim está correta - fuser
é o que você deseja.
Além disso (ou alternativamente), você pode usar lsof
para obter mais informações, incluindo o nome de usuário, caso precise de permissão (sem ter que executar um comando adicional) para encerrar o processo. (Embora, claro, se matar o processo é o que você deseja, fuser
pode fazer isso com sua -k
opção. Você pode fuser
usar outros sinais com a -s
opção - verifique a página de manual para obter detalhes.)
Por exemplo, com uma tail -F /etc/passwd
execução em uma janela:
ghoti@pc:~$ lsof | grep passwd
tail 12470 ghoti 3r REG 251,0 2037 51515911 /etc/passwd
Observe que você também pode usar lsof
para descobrir quais processos estão usando soquetes específicos. Uma excelente ferramenta para ter em seu arsenal.
lsof | head -1
para ver todos os cabeçalhos.
lsof | grep -E "PID|<your_process_name>"
mostra a 1ª linha e o processo que você deseja consultar.
tree
ler qualquer coisa a partir de stdin? Se sim, o que ele faz com essa entrada?
tree
, não lsof
. Pelo que entendi, tree
não lê a entrada padrão, portanto, a saída de lsof
é descartada quando você executa lsof | tree ...
. Se estiver correto, então lsof | tree MyFold
é o mesmo que tree MyFold
, que apenas exibe o conteúdo, mas não quais arquivos são abertos por algum processo.