Entfernen Sie eine Datei unter Linux mithilfe der Inode-Nummer

14

Wenn Sie unter UNIX / Linux eine Datei mit Sonderzeichen wie erstellen touch \"la*, können Sie sie nicht mit entfernen rm "la*. Sie müssen die Inode-Nummer verwenden (Sie können, wenn Sie den \vor dem Namen hinzufügen , ich weiß, aber Sie müssten als Benutzer erraten, dass es in der Dateierstellung verwendet wurde).

Ich habe die Manpage auf rm überprüft, aber die Inode-Nummer wird nicht erwähnt. Das rm inodenumbergeht auch nicht.

Was ist der Befehl dafür?

KdgDev
quelle

Antworten:

23

Einige andere Methoden umfassen:

den Sonderzeichen entkommen:

[~] $ rm \ "la \ *

Verwenden Sie den Befehl find und durchsuchen Sie nur das aktuelle Verzeichnis. Der Befehl find kann nach Inode-Nummern suchen und verfügt über einen praktischen -deleteSchalter:

[~] $ ls -i
7404301 "la *

[~] $ find. -maxtiefe 1 -type f -inum 7404301
./"la*

[~] $ find. -maxtiefe 1 -type f -inum 7404301 -löschen
[~] $ ls -i
[~] $
John T
quelle
Heh, mit find wäre sicherlich einfacher als mein Vorschlag, ich hatte nie bemerkt -inum :)
Find hat viele tolle Schalter zu erkunden, es ist mein Schweizer Taschenmesser-Tool, um ganz ehrlich zu sein :)
John T
t: oh so wahr.
Akira
Solaris verfügt nicht über die Optionen "-delete" von "-maxdepth".
Guthrie
Sie sollten die Suche mit dieser -xdevOption einschränken, da andere gemountete Dateisysteme möglicherweise auch nicht verwandte Dateien mit derselben Inode-Nummer haben.
Jonas Berlin
5

Vielleicht fehlt mir etwas, aber ...

rm '"la*'

Wie auch immer, Dateinamen haben keine Inodes, Dateien schon. Wenn Sie versuchen, eine Datei zu entfernen, ohne alle Dateinamen zu entfernen, die darauf verweisen, wird Ihr Dateisystem beschädigt.

Ignacio Vazquez-Abrams
quelle
gut, das würde nur für das aktuelle Verzeichnis funktionieren, aber es ist in der Tat ein berechtigter Grund zur Besorgnis. Blöd, dass ich das verpasst habe. Entfernt die Datei trotzdem nicht.
KdgDev
3
Natürlich nicht. Die Datei wird nur entfernt, wenn keine Dateinamen mehr darauf verweisen und keine Prozesse sie offenhalten.
Ignacio Vazquez-Abrams
5

Wenn Sie dies wirklich tun möchten - und Ihr Anwendungsfall überhaupt nicht so aussieht, wie Sie es brauchen -, können Sie die Tools zum Debuggen von Dateisystemen ausprobieren. Wenn Sie bereit sind, alles zu verlieren, ist das.

Zum Beispiel hat der debugfsBefehl für ext2 / 3/4 eine "kill_file" -Option, die einen Inode zu haben scheint. Wie in anderen Antworten erwähnt, wird dadurch Ihr Dateisystem beschädigt, da Verzeichniseinträge auf eine nicht vorhandene Datei verweisen. Ein späterer Betrieb fsckkann dies möglicherweise reparieren. Es ist unwahrscheinlich, dass Sie dies auf einem bereitgestellten Dateisystem tun können.

Aber ich würde dringend empfehlen Sie nur geeigneten Escaping verwenden / zitieren und löschen diese Dateien mit dem regulären rmBefehl wie in einer früheren Antwort erwähnt - und Verwendung rm -ifür zusätzliche Sicherheit beim Umgang mit dem Umgang Dateinamen mit Globbing Zeichen wie *


quelle
1

Ich empfehle nachdrücklich den Ansatz "Escape the Special Character", aber es gibt immer den clriBefehl, wenn Sie wirklich eine behebbare Beschädigung des Dateisystems wünschen.

mpez0
quelle
2
Es ist zu beachten, dass dies clrinormalerweise nur auf Oracle-Systemen (z. B. SunOS) vorhanden ist.
can-ned_food
1

Sie können Dateien, die mit einem Bindestrich beginnen, durch Aufrufen löschen rm -- filename.

uli42
quelle
1
Dies scheint eher ein Kommentar zu dieser Antwort als eine Antwort auf die Frage des OP zu sein.
Ich sage Reinstate Monica
1

Die Herausforderung, die ich hatte, war das Entfernen eines Dateinamens, der mit einem Bindestrich beginnt, der immer als Hostname interpretiert werden soll. Ich habe das gelöst mit:

rm ./-g4xxx
Anthony V Edwards
quelle