Wenn ein PC eine Datei bearbeitet, löscht er die Originaldatei?


55

Wenn code.txt(oder welche Datei auch immer) bearbeitet und gespeichert wird, habe ich zwei Ideen, wie ein PC den Prozess handhaben würde:

  1. Der PC löscht code.txtkomplett und macht eine neue code.txt(bearbeitete) Version von Grund auf neu.

  2. Der PC bearbeitet einen Teil von hex von code.txt. Es findet also kein Löschen statt.

Welche Idee zeigt, wie Computer funktionieren?


Schöne Grüße! Ausgehend von der hervorragenden Antwort von Benutzer Grawity sind hier einige klärende Fragen:

18
@HaakonDahl welche klärenden Fragen? Du hast nichts gepostet.
Die große Ente

Dangit. Ich muss warten, bis ich wieder auf meinem PC bin. Aber das Wesentliche ist, auf welcher Ebene - Hardware, Dateisystem, Betriebssystem oder App? Und welche App?

Warum ist es dir wichtig? Selbst Programme, die eine "neue" Datei erstellen, werden wahrscheinlich die Erstellungszeit so ändern, dass sie mit dem Original übereinstimmt. Der einzige sichtbare Unterschied ist die Inode-Nummer (oder ein gleichwertiges Konzept), die von Bedeutung sein kann (z. B. wenn Sie Hardlinks in der Nähe haben, werden diese nicht mehr synchronisiert).
Bakuriu

1
Abstimmung, um diese Frage als zu umfassend abzuschließen. Alles hängt vom Betriebssystem, der Software und den Funktionen des zugrunde liegenden Dateisystems ab.
JakeGould

Antworten:


121

Könnte auch sein - es kommt auf den verwendeten Texteditor an.

Das Konzept einer 'Textdatei' ist nicht in Computern integriert - jedes Betriebssystem verwaltet Dateien möglicherweise anders und jeder Texteditor verwendet diese Dateien möglicherweise anders.

In der Praxis finden Sie Texteditoren, die beide Mechanismen haben. Praktisch alle Betriebssysteme ermöglichen das direkte Überschreiben des Inhalts einer vorhandenen Datei. Einfache Editoren wie Notepad fordern das Betriebssystem daher normalerweise auf, direkt in die Originaldatei zu schreiben, da dies am einfachsten zu implementieren ist. Dies ist jedoch riskant, wenn Sie während des Schreibvorgangs an Leistung verlieren. Aus Gründen der Zuverlässigkeit speichern viele Editoren die aktualisierten Daten absichtlich in einer neuen Datei und löschen das Original.

(Ich denke, dass In-Place-Aktualisierungen bei Hex-Editoren häufiger vorkommen, bei denen die meisten Änderungen keine Bytes einfügen / löschen, sondern nur vorhandene Speicherorte ändern, sodass keine vollständige Neuschreibdatei erforderlich ist.)

Es gibt sogar einen dritten Betriebsmodus: Der Editor erstellt möglicherweise zuerst eine Sicherungskopie der alten Datei und schreibt dann direkt neue Daten in die Datei.


Es auch ist abhängig vom Dateisystem , das die Datei hält. Wenn ein Programm bei den meisten herkömmlichen Dateisystemen das Schreiben in eine vorhandene Datei anfordert, überschreibt das Dateisystem nur die vorhandenen alten Daten.

Allerdings sind einige Dateisysteme Sie arbeiten in „copy-on-write“ -Modus, wo jede neue Daten immer an einen anderen Ort geschrieben wird, ob das Programm will oder nicht. Dies hat wiederum den möglichen Vorteil einer erhöhten Zuverlässigkeit, da eine unterbrochene Änderung vollständig rückgängig gemacht werden kann.

In einigen Dateisystemen (wie Btrfs oder ext4) ist dies eine optionale Funktion. in anderen (zB log-strukturierten Dateisystemen) ist es Teil des Kerndesigns.


30
Es ist nicht nur auf Dateisystemebene. Der Flash-Speicher muss beispielsweise einen Block löschen, bevor er darauf schreiben kann. In der Praxis wird häufig in Dateien geschrieben, indem die neue Änderung in einen neuen Block geschrieben und im alten Block ungültig gemacht wird. Durch die automatische Verarbeitung dieser Art durch das Gerät selbst kann das Betriebssystem nur ein normales Festplatten-Dateisystem verwenden.
Trlkly

7
@trlkly: Alle modernen Flash-Speichergeräte sind in Löschbereiche unterteilt, die um Größenordnungen größer sind als ein Plattensektor, und können keinen Teil eines solchen Bereichs recyceln, ohne ihn vollständig zu löschen. Wenn eine Region 32 veraltete Datensektoren und 224 nützliche Datensektoren enthält, muss sie folglich die 224 nützlichen Datensektoren an eine andere Stelle kopieren, bevor sie den Speicherplatz von einem der veralteten Sektoren freigeben kann. Moderne Betriebssysteme verwenden den Befehl "trim", um Festplattensektoren anzuzeigen, deren Inhalt verworfen werden kann, wenn der Block, in dem sie sich befinden, wiederverwendet wird.
Supercat

Einige Editoren wählen zur Laufzeit das zu verwendende Verhalten (z. B. abhängig davon, ob eine Datei nur einen oder mehrere Verzeichniseinträge enthält).
Toby Speight

2
Viele Editoren lesen die Datei einfach in den Speicher und nehmen dort alle Änderungen vor. (Möglicherweise wird eine Kopie der aktuellen Arbeit automatisch in einer anderen Datei gespeichert.) Die ursprüngliche Datei wird erst geändert, wenn Sie Änderungen speichern, z. B. mit dem Befehl vi's: w.
Jamesqf

4
@jamesqf: Nun, die Frage war, was passiert, wenn eine Datei "bearbeitet und gespeichert " wird ...
Grawity

6

Da es sich um "Speichern der Datei" handelt, wird die Datei nicht direkt auf der Festplatte bearbeitet.

Bei einer Datei in einem normalen Dateisystem sind zwei Dinge zu beachten. Es gibt den Verzeichniseintrag und dann die eigentlichen Dateidaten irgendwo auf der Festplatte.

Wenn Sie eine Datei in einem normalen Editor bearbeiten, werden die Dateidaten in den RAM geladen, und jede Bearbeitung wird nur für diese Kopie der Daten ausgeführt. Dann, wenn Sie die Datei speichern, gibt es grundsätzlich zwei Optionen:

Option 1: Die ursprüngliche Datei wird umbenannt , sodass sowohl der ursprüngliche Verzeichniseintrag als auch die ursprünglichen Daten auf der Festplatte verbleiben. Durch die Umbenennung wird beispielsweise das Dateisuffix in geändert .bak( .baknormalerweise werden alle vorherigen Dateien entfernt). Dann wird eine neue Datei erstellt und die Daten aus dem Speicher werden dort geschrieben.

Option 2: Der ursprüngliche Verzeichniseintrag geändert wird , so wird die Datei abgeschnitten auf 0 Länge. Der für Dateidaten verwendete Bereich auf der Festplatte wird als nicht verwendet markiert, der alte Dateiinhalt bleibt jedoch auf der Festplatte, bis er überschrieben wird. Dann werden neue Daten geschrieben. In diesem Fall bleibt der Verzeichniseintrag erhalten, nur die Daten, auf die er zeigt, werden geändert.

Es gibt einige mögliche Variationen, eine häufige ist, dass die bearbeiteten Daten zuerst in einer temporären Datei gespeichert werden. Wenn Ihr Computer an dieser Stelle abstürzt, wird die Originaldatei wahrscheinlich nicht beschädigt. Dann wird die Originaldatei gelöscht und die neue Datei mit dem korrekten Namen umbenannt. Oder die ursprüngliche Datei kann einfach gelöscht werden, bevor die neue geschrieben wird.

Ihre Theorie 1 kommt also dem nahe, was die meisten Herausgeber tun.


Dann gibt es Sonderfälle. Der offensichtlichste ist ein Festplatten-Editor, mit dem Bytes direkt auf der Festplatte gelesen und überschrieben werden können. Eine andere ist möglicherweise eine Datenbankdatei, in der Datensätze eine feste Größe haben. Sie können einen Datensatz also ganz einfach überschreiben. Daten können jedoch nicht in der Mitte einer Datei angehängt werden. Wenn sich daher die Länge der Daten in der Mitte der Datei häufig ändert, können diese Tricks nicht wirklich verwendet werden.

So ist Ihre Theorie 2 in einigen Fällen möglich, aber normale Texteditoren und solche tun es nicht.


1
"Da Sie von" Speichern der Datei "sprechen, wird die Datei nicht direkt auf der Festplatte bearbeitet." - Ich denke, dass Sie jedes Mal, wenn Sie eine Datei "öffnen", bearbeiten und die Änderungen auf die Festplatte zurückschreiben, "die Datei speichern", unabhängig davon, ob die Datei "an Ort und Stelle geschrieben" (überschrieben) ist oder die alte Datei wird gelöscht oder umbenannt und eine neue Datei erstellt. In beiden Fällen entscheiden Sie sich normalerweise irgendwann dafür, "die Änderungen zu speichern" oder "die Änderungen zu verwerfen".
Kevin Fegan

@ KevinFegan Nun, Sie können eine Datei in einem geeigneten Disk- oder Hex-Editor öffnen, den Inhalt bearbeiten und Änderungen speichern . Sie können auch eine Datenbankdatei (z. B. eine SQLite-Datenbankdatei) öffnen, die Datenbank ändern und Änderungen an der Datei vornehmen. Das Öffnen einer Datei zur Änderung kann also bedeuten, dass sie direkt geändert wird. Beim Speichern einer Datei wird jedoch in der Regel eine neue Datei erstellt. Diese anderen Alternativen haben eine anders benannte Aktion zum Speichern von Änderungen.
Hyde

4

In der Vergangenheit wurden Laufwerke direkt vom Betriebssystem gesteuert, das wiederum von der Anwendung gesteuert wurde. In diesem Zusammenhang war Theorie 2 die Hauptmethode, mit der PCs arbeiteten. Das Betriebssystem gab einen physischen Speicherort für die Daten an und hatte die volle Kontrolle über diesen Prozess. Als Ergebnis hatten frühe Dateisysteme eine Tabelle mit "fehlerhaften Sektoren", sodass der Computer nach dem Verlust Ihrer Daten Ihnen mitteilen konnte, dass die Daten verloren gingen, und den Sektor als unbrauchbar markieren konnte, um weiteren Datenverlust zu vermeiden. Festplatten-Scans und Defragmentierung waren an der Tagesordnung.

Nach der Jahrhundertwende wechselten wir jedoch zu LBA, sodass das Betriebssystem nun einfach auf den "logischen" Block verweist, in den es lesen oder schreiben wollte. Die Festplatte selbst hatte jetzt die Intelligenz, Daten hinter dem Betriebssystem zu mischen, ohne dass dies bemerkt wurde. Dies bedeutete eine höhere Zuverlässigkeit, da Sektoren, die nicht überprüft werden konnten, einfach an einen neuen physischen Standort verschoben werden konnten, ohne dass das Wissen des Betriebssystems darüber, wo sich diese Daten befanden, beeinträchtigt wurde.

In der modernen Hardware überschreiben die "Plattenteller" -Laufwerke normalerweise nur das, was zuvor vorhanden war, mit den neu eingehenden Daten und ordnen den LBA optional neu zu, wenn der Sektor so aussieht, als würde er die Daten möglicherweise nicht beibehalten (der Sektor ist beschädigt oder abgenutzt). "Flash" -Laufwerke löschen normalerweise die alten Zellen und schreiben dann Daten in neue Zellen. Dieser Vorgang wird als Wear-Leveling bezeichnet.

In beiden Fällen ist dies möglich, da immer nicht genutzte Kapazität über dem angegebenen Wert liegt. Diese Überversorgung ermöglicht dem Laufwerk eine längere Lebensdauer als die eher unzuverlässige Technologie des vorherigen Jahrhunderts. Im LBA-Modus kann das physische Medium vom Betriebssystem abstrahiert werden, sodass das Laufwerk selbst alle Maßnahmen ergreifen kann, die das Laufwerk zur Vermeidung von Datenverlust für erforderlich hält.

Auf Anwendungsebene öffnen Sie normalerweise eine Datei im Modus "SCHREIBEN", in dem das Betriebssystem anweist, die Datei zu löschen (den Inhalt, aber nicht die Datei selbst zu löschen) und dann neue Daten zu schreiben. All dies wird auf Betriebssystemebene gepuffert und dann auf das Laufwerk "geleert", wodurch die angeforderten Änderungen vorgenommen werden.

Angesichts dieser Informationen ist Theorie 1 das, was technisch auf der Ebene der Anwendungsprogrammierung geschieht, zumindest standardmäßig, da es auch einen Modus zum Schreiben mit Anhängen gibt, um das Löschen des Dateiinhalts zu vermeiden. Das Betriebssystem selbst wird die Änderungen eher wie Theorie 2 darstellen, jedoch über LBA abstrahiert. Das Laufwerk selbst wird dann wahrscheinlich etwas tun, das eine Mischung aus Theorie 1 und Theorie 2 ist.

Ja. Es ist kompliziert und sehr hersteller- / betriebssystem- / anwendungsabhängig. All diese Komplexität zielt jedoch darauf ab, die Datenspeicherung zuverlässiger zu gestalten und gleichzeitig den Stromverbrauch und die Batterielebensdauer zu verbessern.


3

Hängt davon ab. AFAIK Microsoft Word fügt beim Speichern .doc(nicht .docx) von Dateien mit aktivierten Optionen zum schnellen Speichern Änderungen an, die seit dem letzten Speichern an vorhandenen Dateien vorgenommen wurden.


1

Im Allgemeinen weist ein Computer den Speicher zu, in dem sich die ursprüngliche Datei als "gelöscht" befindet. Dies bedeutet jedoch, dass sie in Ihrem Dateibrowser nicht mehr angezeigt wird und die Zellen im Speicher, in denen sie geschrieben wurde, zulässig sind in Zukunft überschrieben werden.

Ob die neue Datei an die gleiche Stelle geschrieben wird, hängt von einer Reihe von Faktoren ab, insbesondere von der verwendeten Software und davon, wie sie für die Verwendung des Speichers ausgelegt ist.


2
Ich denke, Sie könnten "Speicher" mit dem Begriff der Dateisystem-Unlink-Operationen verwechseln. Und das hat eigentlich nichts mit der gestellten Frage zu tun, ob konkrete Dateien überschrieben werden oder ob es eine Art n-way-Update gibt.

Nun, wenn Software speziell dafür entwickelt wurde, dann ist es möglich, obwohl, soweit ich weiß, im Allgemeinen sowohl Langzeitspeicher als auch RAM so funktionieren.
GigaJoules

Leider ist Ihre Erklärung (soweit ich entschlüsseln kann, was Sie meinen) entschieden nicht, wie "Langzeitspeicher und RAM" funktionieren. Letztendlich hat dies jedoch wenig mit der vorliegenden Frage zu tun. Was, ich wiederhole, die Frage ist, wie Software Textinformationen in eine Datei auf einem Allzweck-Computergerät mit einem typischen modernen Dateisystem aktualisiert. Wir müssen nicht überlegen, wie etwas wie "Gedächtnis" funktioniert oder nicht, um diese Frage zu beantworten.

1

Hoffentlich ist das nicht überflüssig, ein bisschen mehr Info / Hintergrund.

Der PC hat normalerweise nicht viel Kontrolle darüber, wie eine Datei bearbeitet wird, sondern die Anwendung, die dies tut.

Einige Beispiele, wie manche Apps mit der Bearbeitung umgehen könnten:

Notepad lädt das gesamte Dokument in den Speicher und speichert dann das gesamte Dokument über Ihrem Originaldokument (oder einem neuen, das Sie angeben).

Nahezu alle anderen kleinen Editoren speichern beim Bearbeiten eine "neue" Datei und kopieren sie dann über Ihr Originaldokument, wobei sie beim "Speichern" gelöscht werden.

Editoren für große Dokumente, mit denen Sie möglicherweise ein Buch bearbeiten, lesen / ändern in der Regel einen Abschnitt eines Dokuments, da sie Dokumente bearbeiten können, die größer als der Arbeitsspeicher sind. Diese bearbeiten möglicherweise tatsächlich das Dokument "In place". Sie schreiben möglicherweise eine Seite neu und lassen den Rest in Ruhe. Diese haben häufig eine komplexere indizierte Darstellung auf der Festplatte als eine einfache TXT-Datei, um dieses Verhalten zuzulassen.

Die großen Editoren speichern möglicherweise auch nur temporäre Dateien mit "Aktualisierungen" Ihres Originaldokuments. Wenn Sie den letzten Speichervorgang ausführen, können alle Dokumente zusammengeführt und das Dokument neu geschrieben werden.

Die meisten Editoren können so konfiguriert werden, dass die vorhandene Version unverändert bleibt und eine neue Version mit Ihren Änderungen erstellt wird (alte Versionen beibehalten).

In Bezug auf den Teil Ihrer Frage, was ein "PC" tut, werden sich einige Betriebssysteme an jede Version einer Datei erinnern und immer eine neue erstellen. Das ist heutzutage ziemlich selten, aber ich erinnere mich an alte "Mini-Computer" (was wir jetzt als Mainframes bezeichnen), bei denen jede Datei am Ende eine Version wie "File.text.1" hatte und sie jedes Mal zur Version hinzufügte bearbeitet es. Diese Art von Verhalten trifft besser auf ein Bandlaufwerk oder eine CD-ROM zu, bei denen das Überschreiben der alten Version völlig unpraktisch war.


1

2 ist nicht unmöglich, aber es ist aus verschiedenen Gründen dumm.

Ein gut geschriebener Textdatei-Editor wird:

  1. Schreiben Sie eine Datei mit einem anderen Namen und dem neuen Inhalt. Wenn das Original war myfile.txt, könnte das neue seinmyfile.txt.new
  2. Vorausgesetzt, 1. war erfolgreich, benennen Sie das Original in eine Sicherungsdatei um, z myfile.txt~
  3. Benennen Sie die neue Datei in den ursprünglichen Namen um myfile.txt
  4. Wenn alles erfolgreich war, entfernen Sie die Sicherungsdatei. Viele Redakteure lassen es trotzdem, so dass der Benutzer es wiederherstellen kann, wenn er / sie bald feststellt, dass das, was er / sie mit dem Redakteur getan hat, nicht das war, was er / sie tun wollte.

Wenn der Computer während des oben beschriebenen Vorgangs abstürzt oder nicht genügend Speicherplatz auf der Festplatte zur Verfügung steht, gehen die alten und die neuen Dateien nicht verloren oder werden nur teilweise gespeichert.


Das Verhalten vieler Texteditoren für Nicht-IBM- / Nicht-Microsoft-Betriebssysteme während des letzten halben Jahrhunderts, bei denen das Beschreiben und Umschreiben an Ort und Stelle abgeschnitten wurde, ist nicht "dumm".
JdeBP

1

Kurze Antwort

Dies hängt in hohem Maße von Ihrem Editor, der zugrunde liegenden Software / Treibern und dem Speicher ab.


Paranoische Antwort

Kann wiederhergestellt werden, wenn Sie es nicht dauerhaft entfernen.


Lange Antwort

In Ihrer Frage fehlen Informationen (Software, Hardware usw.). Anstatt mich selbst zu beantworten, helfe ich Ihnen, Ihre Frage selbst zu beantworten.

Das hängt von wenigen Faktoren ab:

  1. Editor : Wenn die Editor-Software die Blöcke derselben Datei ersetzt, wird sie möglicherweise neu geschrieben. Dies kann auch von den Editoreinstellungen und Dateitypen abhängen. Beachten Sie, dass das Wort möglicherweise kursiv geschrieben wurde. Auch wenn der Editor die Datei neu schreibt, bleibt sie möglicherweise unberührt (lesen Sie die nächsten Punkte).

  2. Grundlegende Software / Treiber / Dateisystem : Die Datei bleibt unberührt, wenn andere Software / Treiber darunter sind, die die ursprüngliche Datei vor dem Überschreiben schützen. Zu diesen Softwaretypen gehören Versionsverwaltungssysteme, virtuelle differenzielle Datenträger und einige Sicherungssoftware. Ein Beispiel ist Git , das die ursprünglichen Dateiblöcke beibehält und eine neue Datei erstellt, die die geänderten Blöcke enthält.

  3. Lagerung :

    • Der Speicher selbst kann geänderte Blöcke in einen neuen Sektor schreiben und alte Blöcke als "frei" markieren. Die Datei bleibt dann physisch im Speicher (und kann wiederhergestellt werden), sofern sie nicht von einer anderen Datei überschrieben wird. Beispiel ist ein moderner SSD-Speicher , der dies auf Hardware-Ebene tun kann.

    • Es gibt Möglichkeiten, Daten von den Magnetplatten einer typischen mechanischen Festplatte wiederherzustellen, selbst wenn die Daten überschrieben wurden . Und es gibt spezialisierte Unternehmen.

Wenn Sie also eine konkrete Antwort erhalten möchten, ob Ihre Datei gelöscht wird oder nicht, müssen Sie auch angeben, welchen Editor, Backup / VCS-Software / Hardware und Speicher Sie verwenden. Wenn ich einen Punkt verpasst habe, können Sie die Antwort jederzeit bearbeiten.


Wie kann sichergestellt werden, dass die gelöschte Datei tatsächlich aus dem Speicher gelöscht wird?

Dies ist wahrscheinlich die nächste Frage, die Sie sich stellen werden. Nun, es gibt viele Software- / Hardwarelösungen. Da SuperUser nicht für die Bewerbung von Software / Hardware gedacht ist, werde ich Ihnen sagen, wie Sie diese finden, anstatt Namen zu nennen: Suchen Sie nach Stichwörtern "Datei endgültig löschen". Für genauere Übereinstimmungen geben Sie Ihr Betriebssystem, den Festplattentyp oder andere Informationen an.


1

Ein Verhalten, das noch niemand erwähnt hat, ist das relevante Verhalten einiger Versionen von MS Windows-Betriebssystemen. Es hängt auch mit dem verwendeten Dateisystem zusammen.

Das Verhalten sieht folgendermaßen aus: Wenn Sie eine Datei umbenennen oder löschen und innerhalb von 15 Sekunden nach dem Löschen (oder Umbenennen) der Originaldatei eine (neue) Datei mit demselben Namen erstellen (neu erstellen), wird das Erstellungsdatum / Der Zeitstempel wird aus der Originaldatei kopiert. Im Wesentlichen wird die neue Datei zur alten / ursprünglichen Datei.

In diesem Fall spielt es keine Rolle, ob die Anwendung die Änderungen an der Datei nach Ihrer Methode 1 speichert: Erstellen einer neuen Datei mit demselben Namen oder nach Ihrer Methode 2: Bearbeiten / Aktualisieren der Datei (Datei) nicht gelöscht). In beiden Fällen sieht die endgültige Datei (fast) in jeder Hinsicht wie die Originaldatei aus. Das Einzige ist, dass es wahrscheinlich einen anderen physischen Speicherplatz (Cluster / Sektoren) belegen wird und sich der Verzeichniseintrag für die Datei wahrscheinlich an einem anderen Speicherort befindet.

Wie gesagt, dies ist ein Verhalten einiger Versionen von MS Windows / Dateisystemen. Ich weiß nicht, auf welcher Windows-Version und auf welchem ​​Dateisystem dies gestartet wurde und ob es sich immer noch um das Verhalten neuerer Versionen handelt. Wenn ich raten müsste, würde ich sagen, dass es unter Windows NT und Windows XP eingeführt wurde und immer noch das Verhalten von Windows 10 ist, und (immer noch eine Vermutung) erfordert das Verhalten ein Fat32- oder NTFS-Dateisystem (und möglicherweise ein neueres).


Tatsächlich spielt es eine Rolle, da NTFS feste Verknüpfungen unterstützt und einer der bekannten Unterschiede zwischen diesen Methoden die Auswirkung auf mehrfach verknüpfte Dateien ist. Dateisystem-Tunneling gibt es seit mindestens Windows NT 5.0.
JdeBP

@JdeBP - Ja, wir sind uns einig. Das ist der Grund, warum ich # 1) "Fast" in "Die endgültige Datei sieht in (fast) jeder Hinsicht aus wie die Originaldatei" und # 2) Verzeichniseintrag an einem anderen Ort.
Kevin Fegan

Sie stimmen nicht zu, wenn Sie wie Sie behaupten, dass es keine Rolle spielt.
27.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.