Usuń plik w systemie Linux, używając numeru i-węzła


15

Jeśli tworzysz plik w systemie UNIX / Linux ze znakami specjalnymi, takimi jak touch \"la*, nie możesz go usunąć za pomocą rm "la*. Musisz użyć numeru i-węzła (możesz, jeśli dodasz \przed nazwą, wiem, ale będziesz musiał zgadywać jako użytkownik, że został użyty podczas tworzenia pliku).

Sprawdziłem stronę podręczną pod kątem rm, ale nie ma wzmianki o numerze i-węzła. Robienie rm inodenumberteż nie działa.

Jakie jest na to polecenie?

Odpowiedzi:


24

Niektóre inne metody obejmują:

uciekając od znaków specjalnych:

[~] $ rm \ "la \ *

użyj polecenia find i przeszukaj tylko bieżący katalog. Polecenie find może wyszukiwać numery i-węzłów i ma wygodny -deleteprzełącznik:

[~] $ ls -i
7404301 "la *

[~] $ find. -maxdepth 1 -typ f -inum 7404301
./"la*

[~] $ find. -maxdepth 1 -type f -inum 7404301 -delete
[~] $ ls -i
[~] $

Heh, użycie find byłoby z pewnością łatwiejsze niż moja sugestia, nigdy nie zauważyłem -inum :)

Find ma wiele świetnych przełączników do zbadania, to moje szwajcarskie narzędzie do noży wojskowych, żeby być szczerym :)
John T

t: och, tak prawdziwe.
akira

Solaris nie ma opcji „-delete” z „-maxdepth”.
guthrie

Powinieneś ograniczyć wyszukiwanie za pomocą -xdevopcji, ponieważ inne zamontowane systemy plików mogą mieć również niepowiązane pliki o tym samym numerze i-węzła.
Jonas Berlin,

5

Może czegoś mi brakuje, ale ...

rm '"la*'

W każdym razie nazwy plików nie mają i-węzłów, a pliki mają. Próba usunięcia pliku bez usuwania wszystkich nazw plików, które go wskazują, spowoduje uszkodzenie systemu plików.


cóż, działałoby to tylko w bieżącym katalogu, ale rzeczywiście jest to uzasadniony powód do niepokoju. Głupie, że mi tego brakowało. Nadal jednak nie usuwa pliku.
KdgDev

3
Oczywiście nie. Plik jest usuwany tylko wtedy, gdy nie ma już żadnych wskazujących go nazw plików i procesów, które go utrzymują.
Ignacio Vazquez-Abrams,

5

Jeśli naprawdę chcesz to zrobić - a Twój przypadek użycia nie wygląda tak, jak trzeba, możesz wypróbować narzędzia do debugowania systemu plików. To znaczy, jeśli chcesz wszystko stracić.

Na przykład dla ext2 / 3/4 debugfspolecenie ma opcję „kill_file”, która zdaje się przyjmować i-węzeł. Jak wspomniano w innych odpowiedziach, spowoduje to uszkodzenie systemu plików, ponieważ będą wpisy katalogu wskazujące na nieistniejący plik. Uruchomienie fsckpóźniej może być w stanie to naprawić. Jest mało prawdopodobne, abyś mógł to zrobić w zamontowanym systemie plików.

Ale zdecydowanie zalecam, abyś po prostu używał odpowiednich znaków zmiany znaczenia / cytowania i usuwał takie pliki za pomocą zwykłego rmpolecenia, jak wspomniano we wcześniejszej odpowiedzi - i używaj rm -idla większego bezpieczeństwa w przypadku nazw plików zawierających znaki globowania, takie jak *


1

Chociaż zdecydowanie zalecam podejście „ucieczka przed znakami specjalnymi”, zawsze istnieje clripolecenie, gdy naprawdę chcesz naprawić naprawiony system plików.


2
Należy zauważyć, że clrizwykle występuje tylko w systemach Oracle (np. SunOS).
can-ned_food


1

Wyzwanie, jakie miałem, polegało na usunięciu nazwy pliku rozpoczynającej się od myślnika - rm zawsze chce interpretować ją jako nazwę hosta. Rozwiązałem to za pomocą:

rm ./-g4xxx
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.