Frage Entfernen Sie eine Datei unter Linux mit der Inode-Nummer


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

Ich habe die Manpage auf rm überprüft, aber es gibt keine Nummer der Inode-Nummer. Tun rm inodenumber funktioniert auch nicht.

Was ist der Befehl dafür?


10
2018-05-19 22:05


Ursprung




Antworten:


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 ist praktisch -delete Schalter:

[~] $ ls -i
7404301 "la *

[~] $ finden. -maxdepth 1 -type f -in 7404301
./"la

[~] $ finden. -maxdepth 1 -type f -in 7404301 -delete
[~] $ ls -i
[~] $

19
2018-05-19 22:58



Heh, mit Find wäre sicherlich einfacher als mein Vorschlag, ich hätte nie -inum gemerkt :) - wrt
Find hat eine Menge toller Switches zu entdecken, es ist mein Schweizer Taschenmesser Tool um ganz ehrlich zu sein :) - John T
t: Oh, so wahr. - akira
Solaris verfügt nicht über die Option "-delete" von "-maxdepth". - guthrie
Sie sollten die Suche mit der Option einschränken -xdev Option, da andere gemountete Dateisysteme möglicherweise auch nicht verwandte Dateien mit derselben Inode-Nummer haben. - Jonas Berlin


Vielleicht vermisse ich etwas, aber ...

rm '"la*'

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


5
2018-05-19 22:09



Nun, das würde nur für das aktuelle Verzeichnis funktionieren, aber es ist in der Tat ein berechtigter Grund zur Besorgnis. Dumm, dass ich das vermisst habe. Trotzdem wird die Datei nicht entfernt. - KdgDev
Natürlich nicht. Die Datei wird nur entfernt, wenn keine weiteren Dateinamen auf sie zeigen und keine Prozesse sie offen halten. - Ignacio Vazquez-Abrams


Wenn du Ja wirklich möchte dies tun - und Ihr Anwendungsfall sieht nicht wirklich so aus, als müssten Sie überhaupt versuchen, Dateisystem-Debugging-Tools zu verwenden. Wenn du bereit bist, alles zu verlieren, ist das so.

Zum Beispiel für ext2 / 3/4 die debugfs Befehl hat eine "kill_file" -Option, die einen Inode zu nehmen scheint. Wie in anderen Antworten erwähnt, dies werden beschädigen Sie Ihr Dateisystem, da Verzeichniseinträge auf eine nicht existierende Datei verweisen. Laufen fsck danach kann das vielleicht reparieren. Es ist unwahrscheinlich, dass Sie dies auf einem angehängten Dateisystem tun können.

Aber ich würde sehr zu empfehlen Sie verwenden nur geeignete Escaping / Quoting und löschen solche Dateien mit dem regulären rm Befehl wie in einer früheren Antwort erwähnt - und verwenden rm -i für zusätzliche Sicherheit bei Dateinamen mit globbing-Zeichen wie *


4
2018-05-19 22:46





Während ich den Ansatz "Escape die Sonderzeichen" dringend empfehlen, gibt es immer die clri Befehl, wenn Sie wirklich beschädigbare Dateisystem Korruption wollen.


1
2018-05-20 01:02



Es ist darauf hinzuweisen, dass clri ist normalerweise nur auf Oracle-Systemen (z. B. SunOS) vorhanden. - can-ned_food