Eu tentei rm -rf
uma pasta e fiquei "dispositivo ou recurso ocupado".
No Windows, eu teria usado o LockHunter para resolver isso. Qual é o equivalente ao Linux? (Por favor, forneça como resposta um método simples "desbloqueie este" e não complete artigos como este . Embora sejam úteis, atualmente estou interessado apenas no ASimpleMethodThatWorks ™)
rm -rf /
... ele excluirá todos os arquivos, incluindo / bin / rm.Respostas:
A ferramenta que você deseja é
lsof
, que significa arquivos abertos da lista .Ele tem muitas opções, portanto verifique a página de manual, mas se você quiser ver todos os arquivos abertos em um diretório:
Isso ocorrerá através do sistema de arquivos abaixo
/path
; portanto, cuidado com isso em grandes árvores de diretórios.Depois de saber quais processos têm arquivos abertos, você pode sair desses aplicativos ou matá-los com o
kill(1)
comandofonte
/path
. Essa é uma causa de "arquivos abertos" ocultos.lsof
parece não fazer nada por mim:lsof storage/logs/laravel.log
não retornou nada, e o fezlsof +D storage/logs/
.umount
respondeu comnot mounted
.mount | grep <path>
. Isso mostra que qualquer um/dev/<abc>
pode estar montado no<path>
. Usesudo umount -lf /dev/<abc>
e tente remover<path>
. Funciona para mim. Obrigado @camhàs vezes, é o resultado de problemas de montagem, então desmonte o sistema de arquivos ou o diretório que você está tentando remover:
fonte
Eu uso
fuser
para esse tipo de coisa. Ele listará qual processo está usando um arquivo ou arquivos em uma montagem.fonte
fuser
ajuda apenas no caso específico em que você deseja desmontar um sistema de arquivos. Aqui, o problema é descobrir o que está usando um arquivo específico.fuser
não ajuda aqui porque o problema é encontrar todos os arquivos abertos em uma árvore de diretórios. Você pode dizerlsof
para mostrar todos os arquivos e filtros ou fazê-lo recuar;fuser
não possui esse modo e precisa ser chamado em todos os arquivos.fuser
obras serão listas. Tentefuser /var/log/*
, se houver algum registro aberto, ele informará quem e quem está aberto. Se um curinga simples, não funcionar,find
com ou semxargs
fará o trabalho.lsof
não estava no meu caminho enquantofuser
estava, permitindo-me encontrar o ID do processo incorreto para matar, então + 1 + obrigado.Aqui está a solução:
ls -a
.xyz
arquivovi .xyz
e veja qual é o conteúdo do arquivops -ef | grep username
kill -9 job_ids
- onde job_ids é o valor da segunda coluna do erro correspondente causado pelo conteúdo na oitava colunafonte
Eu tive esse mesmo problema, construí uma linha única começando com a recomendação @camh:
O
awk
comando agarra o PIDS. Otail
comando se livra da primeira entrada traquina: "PID". Eu costumava-9
matar, outros podem ter opções mais seguras.fonte
Eu tive esse problema quando um teste automatizado criou um ramdisk. Os comandos sugeridos nas outras respostas
lsof
efuser
não ajudaram. Após os testes, tentei desmontá-lo e excluir a pasta. Fiquei realmente confuso por muito tempo porque não consegui me livrar dele - fiquei ficando "Dispositivo ou recurso ocupado" !Por acidente, descobri como me livrar de um disco rígido. Eu tive que desmontá-lo o mesmo número de vezes que eu executei o
mount
comando, ou seja,sudo umount path
Devido ao fato de ter sido criado usando testes automatizados, ele foi montado várias vezes, por isso não consegui me livrar dele simplesmente desmontando-o uma vez após os testes. Então, depois de desmontá-lo manualmente muitas vezes, ele finalmente se tornou uma pasta normal novamente e eu pude excluí-lo.
Espero que isso possa ajudar alguém que se deparar com esse problema!
fonte
Eu experimento isso frequentemente em servidores que possuem sistemas de arquivos de rede NFS. Estou assumindo que tem algo a ver com o sistema de arquivos, uma vez que os arquivos geralmente são nomeados como
.nfs000000123089abcxyz
.Minha solução típica é renomear ou mover o diretório pai do arquivo e voltar mais tarde em um dia ou dois e o arquivo será removido automaticamente. Nesse momento, eu posso excluir o diretório.
Isso normalmente acontece nos diretórios em que estou instalando ou compilando bibliotecas de software.
fonte
Tirando a pergunta de Prabhat acima, eu tive esse problema em macos high sierra quando encalhei um processo encfs, a reinicialização o resolveu, mas isso
Me mostrou o processo e o PID (coluna dois).
consertou.
fonte
-15
?Se você tiver o servidor acessível, tente
Ou então, monte umount e monte novamente, tente
umount -l
: umount lento se enfrentar algum problema no umount normal.Eu também tive esse problema em que
lsof +D path
: não fornece saídaps -ef
: não fornece informações relevantesfonte