Entfernen Sie eine Datei unter Linux mit der Inode-Nummer

22324
KdgDev

Wenn Sie unter UNIX / Linux eine Datei mit Sonderzeichen wie z. B. 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 Namen vor dem Namen hinzufügen, weiß ich, aber Sie müssten als Benutzer erraten, dass er bei der Dateierstellung verwendet wurde).

Ich habe die Manpage nach rm durchsucht, aber die Inode-Nummer wird nicht erwähnt. Tun rm inodenumbergeht auch nicht.

Was ist der Befehl dafür?

12

6 Antworten auf die Frage

21
John T

Einige andere Methoden umfassen:

den Sonderzeichen entkommen:

[~] $ rm \ "la \ *

Verwenden Sie den Befehl find und durchsuchen Sie nur das aktuelle Verzeichnis. Der Suchbefehl kann nach Inode-Nummern suchen und hat einen praktischen -deleteSchalter:

[~] $ ls -i 7404301 "la *  [~] $ find. -maxdepth 1-Typ f -inum 7404301 ./"la*  [~] $ find. -maxdepth 1-Typ f -inum 7404301 -löschen [~] $ ls -i [~] $
Heh, die Verwendung von find wäre sicherlich einfacher als mein Vorschlag. wrt vor 14 Jahren 0
Find hat eine Menge toller Schalter, die es zu erkunden gilt. Es ist mein Schweizer Taschenmesser-Werkzeug, um ganz ehrlich zu sein :) John T vor 14 Jahren 0
t: oh so wahr. akira vor 14 Jahren 0
Solaris verfügt nicht über die Option "-delete" der Option "-maxdepth". guthrie vor 10 Jahren 0
Sie sollten die Suche mit der Option `-xdev` einschränken, da andere eingebundene Dateisysteme möglicherweise auch nicht zusammenhängende Dateien mit derselben Inode-Nummer haben. Jonas Berlin vor 6 Jahren 0
6
Ignacio Vazquez-Abrams

Vielleicht fehlt mir etwas, aber ...

rm '"la*' 

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

Nun, das würde nur für das aktuelle Verzeichnis funktionieren, aber es ist in der Tat ein triftiger Grund zur Besorgnis. Dumm, dass ich das vermisst habe. Die Datei wird jedoch immer noch nicht entfernt. KdgDev vor 14 Jahren 0
Natürlich nicht. Die Datei wird nur entfernt, wenn keine Dateinamen mehr darauf verweisen und keine Prozesse sie offen halten. Ignacio Vazquez-Abrams vor 14 Jahren 3
5
wrt

Wenn Sie dies wirklich tun möchten - und Ihr Anwendungsfall nicht wirklich so aussieht, als müssten Sie das überhaupt tun, können Sie Dateisystem-Debugging-Tools ausprobieren. Wenn Sie bereit sind, alles zu verlieren, dann ist das so.

Zum Beispiel hat der debugfsBefehl für ext2 / 3/4 die Option "kill_file", die einen Inode zu enthalten scheint. Wie in anderen Antworten erwähnt, wird das Dateisystem beschädigt, da Verzeichniseinträge auf eine nicht vorhandene Datei verweisen. Nach dem Laufen fsckkann dies möglicherweise repariert werden. Es ist unwahrscheinlich, dass Sie dies auf einem eingehängten Dateisystem tun können.

Ich würde jedoch dringend empfehlen, dass Sie nur das entsprechende Escape-Zeichen / Anführungszeichen verwenden und solche Dateien mit dem regulären rmBefehl löschen, wie in einer früheren Antwort erwähnt - und rm -iaus Sicherheitsgründen verwenden, wenn Sie mit Dateinamen umgehen, die Globbing-Zeichen wie * enthalten.

1
mpez0

Obwohl ich den Ansatz "Escape the special characters" nachdrücklich empfehle, gibt es immer den clriBefehl, wenn Sie wirklich eine fixierbare Dateisystembeschädigung wollen.

Es ist zu beachten, dass "clri" normalerweise nur auf Oracle-Systemen (z. B. SunOS) vorhanden ist. can-ned_food vor 7 Jahren 1
0
Anthony V Edwards

Die Herausforderung, die ich hatte, bestand darin, einen Dateinamen zu entfernen, der mit einem Bindestrich beginnt - rm möchte ihn immer als Hostnamen interpretieren. Ich habe dieses Problem gelöst mit:

rm ./-g4xxx 
0
uli42

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

Dies scheint ein Kommentar zu dieser [Antwort] (https://superuser.com/a/1376449/213131) zu sein und keine Antwort auf die Frage des OP. Twisty Impersonator vor 5 Jahren 1