Ich habe den Inode einer Datei im Linux-Kernel und möchte die Datei über den Inode löschen.
Muss ich die Verknüpfung jedes Dentry des Inodes aufheben? Oder muss ich die Verknüpfung aller Dentrys aufheben?
Welche Schlösser soll ich zum Schutz was verwenden?
Antwort1
Aufrufe zum Entfernen portabler Dateien, unlink(), remove() und Wrapper auf höherer Ebene nehmen praktisch alle Pfadnamen an. Inodes sind hauptsächlich ein Implementierungsdetail.
Um dies in der Shell zu tun, verwenden Sie Tools wie GNUfinden.
find /tmp -type f -inum $INODE
Ersetzen Sie es /tmp
durch den zu suchenden Pfad $INODE
und die Nummer. Fügen Sie es hinzu, -delete
wenn Sie die Ergebnisse unverknüpft haben möchten. Es können mehrere Namen desselben Inodes gefunden werden.
Da diese Methode alle Dateien durchläuft, ist sie nicht effizient.
Antwort2
Unter Linux können Sie eine Datei nicht löschen.
Was dudürfenSie müssen lediglich alle Verweise darauf entfernen. Anschließend entfernt das Dateisystem automatisch den Speicherplatz und markiert den Inode als unbenutzt.
Beachten Sie jedoch, dass Dateien von laufenden Prozessen referenziert werden können. Die Datei bleibt bestehen, auch wenn nichts im Dateisystem darauf verweist. Bis der Prozess beendet wird oder die Datei geschlossen wird, bleibt sie bestehen.