Nie mogę usunąć drzewa katalogów za pomocą rm -rf

9

Wydaje mi się to bardzo dziwne. Korzystam z jądra 2.6.37.2 i uruchomiłem:

~]$ cp -r /proc/ here
~]$ rm -rf here

Dostaję trochę odmowy zgody podczas kopiowania zgodnie z oczekiwaniami i ostatecznie nacisnąłem Control-C. Dostaję Permission denieddużo plików, gdy próbuję usunąć nowy katalog i pliki.

Dla przypomnienia znalazłem to dziwne zachowanie, ponieważ przyjaciel przysłał mi .tgzmigawkę swojego /procreż. Wyodrębniłem katalog i kiedy skończyłem przeglądać, miałem ten sam problem.

rm -rf jak root działa.

lsattr pokazuje atrybut e (co pokazują wszystkie moje pliki / katalogi).

flumpb
źródło
Uogólniłem nieco tytuł twojego pytania, ponieważ nie chodzi o główny problem /proc. Nawiasem mówiąc, to trochę późno na to czasu, ale jeśli wymyślić odpowiedź po zaksięgowaniu pytanie, to w porządku, żeby go odebrać sobie i zostawić je dla innych ludzi, którzy mogą napotkasz podobny problem.
Gilles „SO- przestań być zły”

Odpowiedzi:

16

Jeśli istnieje niepusty katalog, w którym nie masz uprawnień do zapisu, nie możesz usunąć jego zawartości.

$ mkdir foo
$ touch foo/bar
$ chmod a-w foo
$ rm -rf foo
rm: cannot remove `foo/bar': Permission denied

Powodem jest to, że rmjest związany uprawnieniami, jak każde inne polecenie, a pozwolenie na usunięcie barwymaga pozwolenia na zapis foo. Nie dotyczy to uruchamiania rmjako root, ponieważ root zawsze ma uprawnienia do usuwania pliku.

Aby drzewo katalogów było usuwalne, spraw, aby wszystkie katalogi w nim były zapisywalne (uprawnienia zwykłych plików nie mają znaczenia, jeśli chodzi o usuwanie za pomocą rm -f). Możesz użyć jednego z następujących poleceń:

chmod -R u+w here        # slow if you have a lot of regular files
find here -type d -exec chmod u+w {} +
Gilles „SO- przestań być zły”
źródło
Ciągle ten sam wynik „Operacja niedozwolona”
Legionar