Próbowałem rm -rf
utworzyć folder i „zajęte było urządzenie lub zasób”.
W systemie Windows użyłbym LockHunter, aby rozwiązać ten problem. Jaki jest odpowiednik Linuksa? (Podaj jako odpowiedź prostą metodę „odblokuj ten” i nie uzupełniaj artykułów takich jak ten . Chociaż są one przydatne, obecnie interesuje mnie tylko ASimpleMethodThatWorks ™)
rm -rf /
... szczęśliwie usunie każdy pojedynczy plik, w tym / bin / rm.Odpowiedzi:
Narzędzie, które chcesz, to
lsof
skrót od plików otwartych na liście .Ma wiele opcji, więc sprawdź stronę podręcznika, ale jeśli chcesz zobaczyć wszystkie otwarte pliki w katalogu:
To się powtórzy przez system plików poniżej
/path
, więc strzeż się robienia tego na dużych drzewach katalogów.Gdy wiesz, które procesy mają otwarte pliki, możesz zamknąć te aplikacje lub zabić je za pomocą
kill(1)
polecenia.źródło
/path
. To jedna z przyczyn ukrytych „otwartych plików”.lsof
zdaje się nic dla mnie nie robić:lsof storage/logs/laravel.log
nic nie zwróciło, i tak też zrobiłemlsof +D storage/logs/
.umount
odpowiedział znot mounted
.mount | grep <path>
. To pokazuje,/dev/<abc>
że każdy może być zamontowany na<path>
. Użyj,sudo umount -lf /dev/<abc>
a następnie spróbuj usunąć<path>
. Pracuje dla mnie. Dzięki @camhczasami jest to wynikiem problemów z montażem, więc odmontowałem system plików lub katalog, który próbujesz usunąć:
źródło
Używam
fuser
do tego rodzaju rzeczy. Spowoduje wyświetlenie, który proces korzysta z pliku lub plików w instalacji.źródło
fuser
pomaga tylko w konkretnym przypadku, gdy chcesz odmontować system plików. Problem polega na znalezieniu tego, co korzysta z określonego pliku.fuser
tutaj nie pomaga, ponieważ problemem jest znalezienie wszystkich otwartych plików w drzewie katalogów. Możesz kazaćlsof
pokazać wszystkie pliki i filtrować lub sprawić, by się powtarzały;fuser
nie ma takiego trybu i należy go wywoływać w każdym pliku.fuser
prace będą listy. Spróbujfuser /var/log/*
, jeśli jakieś dzienniki są otwarte, powie, które i kto ma otwarte. Jeśli zwykły symbol wieloznaczny nie będzie działał,find
z lub bezxargs
, wykona zadanie.lsof
gdy nie był na mojej ścieżcefuser
, co pozwoliło mi znaleźć ID procesu, który należy zabić, więc + 1 + dzięki.Oto rozwiązanie:
ls -a
.xyz
plikvi .xyz
i sprawdź, jaka jest zawartość plikups -ef | grep username
kill -9 job_ids
- gdzie job_ids jest wartością drugiej kolumny odpowiadającej treści spowodowanej błędem w 8 kolumnieźródło
Miałem ten sam problem, zbudowałem jednowierszowy zaczynający się od rekomendacji @camh:
awk
Komenda chwyta PID.tail
Komenda pozbywa się brzydkie pierwszego wpisu: „PID”. Użyłem-9
przy zabiciu, inni mogą mieć bezpieczniejsze opcje.źródło
Miałem ten problem, gdy automatyczny test utworzył ramdysk. Polecenia sugerowane w innych odpowiedzi,
lsof
ifuser
były nie pomaga. Po testach próbowałem odmontować go, a następnie usunąć folder. Przez wieki byłem bardzo zdezorientowany, ponieważ nie mogłem się go pozbyć - ciągle byłem zajęty „urządzeniem lub zasobem” !Przez przypadek dowiedziałem się, jak pozbyć się ramdysku. Musiałem odmontować to tyle razy, ile razy uruchomiłem
mount
polecenie, tjsudo umount path
Ponieważ został stworzony przy użyciu testów automatycznych, był montowany wiele razy, dlatego nie mogłem się go pozbyć po prostu odmontowując go po testach. Więc po tym, jak ręcznie odmontowałem go wiele razy, w końcu znów stał się zwykłym folderem i mogłem go usunąć.
Mam nadzieję, że może to pomóc komuś, kto napotka ten problem!
źródło
Często zdarza mi się to na serwerach z sieciowymi systemami plików NFS. Zakładam, że ma to coś wspólnego z systemem plików, ponieważ pliki zwykle mają takie same nazwy
.nfs000000123089abcxyz
.Moje typowe rozwiązanie polega na zmianie nazwy lub przeniesieniu katalogu nadrzędnego pliku, a następnie wrócę później za dzień lub dwa, a plik zostanie automatycznie usunięty, w którym to momencie mogę swobodnie usunąć katalog.
Zazwyczaj dzieje się tak w katalogach, w których instaluję lub kompiluję biblioteki oprogramowania.
źródło
Odrzucając powyższe pytanie Prabhata, miałem ten problem w macos high sierra, kiedy utknąłem proces enfs, restartowałem go, ale to rozwiązało, ale to
Pokazał mi proces i PID (kolumna druga).
naprawione.
źródło
-15
jestJeśli masz dostępny serwer, spróbuj
Lub, wykonaj umount i podłącz ponownie, spróbuj
umount -l
: leniwy umount, jeśli napotkasz jakiekolwiek problemy na normalnym umount.Ja też miałem ten problem gdzie
lsof +D path
: nie daje wynikups -ef
: nie zawiera żadnych istotnych informacjiźródło