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 inodenumber
też nie działa.
Jakie jest na to polecenie?
-xdev
opcji, ponieważ inne zamontowane systemy plików mogą mieć również niepowiązane pliki o tym samym numerze i-węzła.Może czegoś mi brakuje, ale ...
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.
źródło
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
debugfs
polecenie 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. Uruchomieniefsck
póź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
rm
polecenia, jak wspomniano we wcześniejszej odpowiedzi - i używajrm -i
dla większego bezpieczeństwa w przypadku nazw plików zawierających znaki globowania, takie jak *źródło
Chociaż zdecydowanie zalecam podejście „ucieczka przed znakami specjalnymi”, zawsze istnieje
clri
polecenie, gdy naprawdę chcesz naprawić naprawiony system plików.źródło
clri
zwykle występuje tylko w systemach Oracle (np. SunOS).Możesz usunąć pliki zaczynające się od myślnika, dzwoniąc
rm -- filename
.źródło
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ą:
źródło