Wohin gehen Dateien, wenn der Befehl rm ausgegeben wird?

98

Kürzlich habe ich versehentlich rmeine Reihe von Dateien bearbeitet, und ich habe darüber nachgedacht, wo genau diese Dateien landen.

Das heißt, wenn Sie mit einer GUI arbeiten, werden gelöschte Dateien in den Papierkorb verschoben. Was ist das Äquivalent für rmund gibt es eine Möglichkeit, einen rmBefehl rückgängig zu machen ?

boehj
quelle
3
Hier ist ein mögliches Duplikat. unter Linux rückgängig machen . Aber ich bin mir nicht sicher, ob es eine Möglichkeit zum Rückgängigmachen gibt.
Xenoterracide

Antworten:

120

Nirgendwo verschwunden. Genauer gesagt, die Datei wird nicht verknüpft. Die Daten befinden sich immer noch auf der Festplatte, aber die Verknüpfung dazu wird entfernt. Früher war es möglich, die Daten abzurufen, aber heute werden die Metadaten gelöscht und nichts ist wiederherstellbar.

Es gibt keinen Mülleimer für rmund sollte es auch nicht geben. Wenn Sie einen Mülleimer benötigen, sollten Sie eine übergeordnete Benutzeroberfläche verwenden. Unter trash-cliUbuntu gibt es ein Befehlszeilendienstprogramm , aber die meiste Zeit werden GUI-Dateimanager wie Nautilus oder Dolphin verwendet, um einen Standard-Papierkorb bereitzustellen. Der Mülleimer ist selbst Standard. In Dolphin gelöschte Dateien werden im Papierkorb von Nautilus angezeigt.

Dateien werden normalerweise in den Papierkorb verschoben ~/.local/share/Trash/files/. Der rmBefehl unter UNIX / Linux ist vergleichbar mit delDOS / Windows, das auch Dateien löscht und nicht in den Papierkorb verschiebt. Eine andere zu realisierende Sache ist, dass das Verschieben einer Datei zwischen Dateisystemen wie dem USB-Stick von Ihrem Festplattenlaufwerk 1) eine Kopie der Dateidaten ist, gefolgt von 2) das Aufheben der Verknüpfung der ursprünglichen Datei. Sie möchten nicht, dass Ihr Papierkorb mit diesen zusätzlichen Kopien gefüllt wird.

penguin359
quelle
4
Vielen Dank für die klare Erklärung. Es macht mir nichts aus, die CLI zu verwenden. Ich muss nur etwas vorsichtiger sein, wenn ich Platzhalter verwende. :)
Boehj
16
Ich würde vorsichtig sein, wenn ich etwas verwende libtrash, um das Verhalten von rm zu ändern. Viele Skripte werden rmzum Bereinigen von Dateien verwendet, und Sie möchten nicht, dass diese im Papierkorb angezeigt werden. Ich empfehle einen dedizierten Befehl wie trashaus dem trash-cliPaket. @pedro Ich sollte hinzufügen, dass ich einmal eine Datei * in meinem Homeverzeichnis erstellt habe. Ich hatte versehentlich * angegeben, als ich es nicht erstellen sollte, und entschied mich, es mit rm * natürlich zu entfernen. Als mir klar wurde, was ich getan habe, habe ich den Befehl schnell beendet, aber es wurden bereits einige Dateien in meinem Home-Verzeichnis gelöscht.
Pinguin359
4
Es kommt sehr selten vor, dass sich so etwas wie ein Mülleimer in der Shell befindet. Wenn Sie es also auf Ihrem lokalen Computer hinzufügen und sich daran gewöhnen oder sogar bei Ihrer täglichen Arbeit darauf angewiesen sind. Sie können in Schwierigkeiten geraten, wenn Sie einige der anderen 99% der Unix: s ohne eine ...
Johan
3
Ich denke, die Botschaft zum Mitnehmen ist, dass ich in den frühen Morgenstunden aufhören und besser aufpassen muss.
Boehj
2
Nach dem Vorbild von @Johan hat RedHat früher (noch?) Aliase für Befehle wie cp, und mv, to cp -iund gesetzt, mv -iwenn es als root ausgeführt wurde. Dadurch wird das Standardverhalten geändert, sodass diese Befehle immer gefragt werden, bevor vorhandene Dateien überschrieben werden. Einige Systemadministratoren haben empfohlen, diese Aliase speziell zu entfernen, damit Sie nicht das Verhalten erwarten, das auf einem anderen System, das dem Standardverhalten folgt, tödlich sein kann.
Pinguin359
11

Für ext3 / ext4, können Sie versuchen , Dateien mit Tools wie erholt extundelete oder ext3grep oder sogar gehen durcheinander mit den Low-Level - Strukturen manuell (nicht für das schwache des Herzens); Bei vielen Dateisystemen können Sie versuchen, nach bestimmten Mustern nach noch nicht überschriebenen Blöcken zu suchen (z. B. kann magicrescue unter anderem nach JPEG-Headern suchen). Beachten Sie, dass diese Heuristiken verwenden, um die Dateien aus den zurückgebliebenen Metadaten wiederherzustellen, sodass eine vollständige Wiederherstellung nicht garantiert werden kann - es handelt sich eher um eine Last-Chance-Wette (da diese voraussetzt, dass einige Spuren der Dateien im Journal verbleiben und die Blöcke wurden noch nicht überschrieben).

In jeder Hinsicht rmsind die mit entfernten Dateien verschwunden - Sie können eine solche Nekromantie ausprobieren, wie sie diese Tools bieten, aber hängen Sie nicht davon ab: Dies sind die Tools, die Sie ausprobieren müssen, wenn alles andere fehlschlägt. Grabe deine neuesten Backups besser aus (du hast Backups gemacht, richtig? Na ja, lebe und lerne ...).

Piskvor
quelle
2
Für hochwertige Textdaten können Sie immer ein robustes Allzweck-Tool (sogar Emacs oder Perl) verwenden, um das "Raw-Gerät" nach der Festplatte zu durchsuchen, auf der sich die entfernte Datei befindet, und nach bekannten Zeichenfolgen zu suchen. Ich habe auf diese Weise Word-Dokumente für Benutzer wiederhergestellt. Sie verlieren die Markierung, können jedoch den größten Teil des Texts wiederherstellen. Offensichtlich handelt es sich hierbei nicht um "Rückgängig", sondern um Disaster Recovery.
Alexis
Ein richtiger "manueller" Link: web.archive.org/web/20131221183925/http://…
sjas
8

In Bezug auf die Rückgängigmachung der Auswirkungen von rm:

Da die meisten Dateisysteme nur den Verweis auf die Daten entfernen und anzeigen, dass die Blöcke frei sind, können Sie versuchen, Ihre Daten direkt vom Gerät auszulesen. Mit etwas Glück wurden die Blöcke, die Ihre Datei (en) enthalten, nicht für etwas anderes beansprucht.

Dies setzt voraus, dass Sie etwas ziemlich Einzigartiges suchen müssen, das Sie rootauf dem System haben, und ich vermute, dass alles, was sich über mehr als einen Dateisystemblock erstreckt (wahrscheinlich 4 KB), ziemlich mühsam wird, wenn das Dateisystem nicht verwaltet wird um die Datei (en) in zusammenhängende Blöcke zu setzen.

Ich habe den Inhalt einiger Nur-Text-Dateien erfolgreich wiederhergestellt, indem ich Strings auf dem Gerät ausgeführt habe, auf dem sich das Dateisystem befand, und grepaus diesen Dateien mit großem Kontext ( -C) nach etwas gesucht habe . (Und kurz nach diesem Vorfall beschloss das Unternehmen, einige Ressourcen für die Implementierung von Backups aufzuwenden.)

Kjetil Jorgensen
quelle
Es ist etwas komplizierter, z. B. indem ext3 die Blockzeiger im Inode auf Null setzt, aber ja, das direkte Suchen nach Dateien könnte funktionieren - wenn sie klein genug sind oder in einem zusammenhängenden Block zugeordnet sind. Dies wird manchmal als Datei-Carving bezeichnet, und es gibt solche Tools magicrescue, die versuchen, Bilder oder Töne anhand ihrer unterschiedlichen Muster zu finden.
Piskvor
6

Wann immer Sie eine Datei mit dem rmBefehl löschen , werden die Daten der Datei nie gelöscht. Mit anderen Worten, die Blöcke im Dateisystem, die Daten enthalten, sind noch vorhanden.

Wenn Sie den rmBefehl ausführen , markiert das System den zu dieser Datei gehörenden Inode als unbenutzt und die Datenblöcke dieser Datei ebenfalls als unbenutzt (aber nicht gelöscht). Die ext3meisten Felder im Inode werden jedoch auf Null gesetzt, wenn eine Datei gelöscht wird.

Diese normale Markierung von nicht verwendet erfolgt für die Geschwindigkeit ... Andernfalls dauert das Löschen etwas länger. Aus diesem Grund haben Sie möglicherweise festgestellt, dass das Löschen auch großer Dateien schneller erfolgt (Sie können die Daten wiederherstellen, wenn diese Datenblöcke nicht überschrieben werden).

Weitere Informationen : Inode-Struktur , Funktionsweise des Löschens von Dateien

sarath
quelle
... es sei denn, die Datei ist explizit mit dem chattr +sAttribut ("shred") gekennzeichnet. Es weist das Dateisystem an, diese Datei beim Löschen gezielt mit Nullen zu überschreiben. Nur einige Dateisysteme unterstützen dieses Attribut.
TelcoM
3

In Unix-ähnlichen Dateisystemen (einschließlich Linux) befinden sich Dateien nicht wirklich an einem bestimmten Ort. Stattdessen verwendet das System Hardlinks, um auf Teile einer großen Datenmenge zu verweisen. Wenn Sie eine Datei erstellen, erstellen Sie auch ihren ersten Hardlink: den, der sich tatsächlich an dem Ort befindet, an dem Sie die Datei "gespeichert" haben. Wenn Sie mehr Hardlinks erstellen, ist die Datei nach Kenntnis des Systems tatsächlich an mehreren Stellen gleichzeitig vorhanden.

Wenn Sie eine Datei "löschen", löschen Sie normalerweise nur den Hardlink, der an der von Ihnen angegebenen Stelle vorhanden war. Aus diesem Grund wird der Systemaufruf zum Löschen von Dateien aufgerufen unlink(). Das System löscht die Datei erst dann, wenn keine Hardlinks mehr vorhanden sind. Sobald der letzte Hardlink zerstört ist, sind es auch die Daten.

Wohin gehen also die Dateien, die Sie löschen? Wenn noch Hardlinks vorhanden sind, befinden sich diese Dateien an der Stelle, an der sich die von Ihnen nicht gelöschten Hardlinks befinden. Wenn keine Hardlinks mehr vorhanden sind, sind die Dateien verschwunden.

Der Löffeligste
quelle
0

Sehen Sie sich auch ~ / .snapshot an, wenn die Datei kürzlich entfernt wurde.

Andy
quelle
4
Dies funktioniert nur, wenn Sie über ein magisches Dateisystem verfügen, das diese Funktion bietet (z. B. eine NetApp), oder wenn Sie eine spezielle Version von rm verwenden.
Mattdm