GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verschieben einer Datei, während sie verwendet wird – Wie funktioniert das?

Der Verzeichniseintrag ist nur ein Zeiger auf einen Inode. Der Inode enthält die Metainformationen über die Datei (außer dem Namen) und Zeiger auf die Daten der Datei (falls vorhanden). Wenn Sie beginnen, eine Datei zu kopieren, erhalten Sie einen Handle auf den Inode.

Das Betriebssystem verwaltet eine Anzahl von Verweisen auf den Inode. Solange auf den Inode verwiesen wird, bleiben der Inode und die Daten der Datei erhalten. Sobald alle Verweise auf den Inode entfernt sind, wird der Inode und der von der Datei benötigte Speicherplatz freigegeben.

Da Sie die Datei zum Kopieren geöffnet haben, bleibt sie erhalten, bis Ihr Prozess die Datei schließt. Dies sollte auftreten, wenn die Dateiübertragung abgeschlossen ist, und tritt auf, wenn der Kopiervorgang fehlschlägt. Wenn die Dateiübertragung teilweise fehlschlägt und Sie alle festen Links zu der Datei gelöscht haben, können Sie die Übertragung nicht erfolgreich neu starten.

BEARBEITEN:Wie andere angemerkt haben, werden Dateiverschiebungen auf demselben Gerät durchgeführt, ohne die Daten zu verschieben. Stattdessen wird im Zielverzeichnis ein neuer Verzeichniseintrag erstellt und der ursprüngliche Verzeichniseintrag entfernt.

Es ist möglich, mehrere Verzeichniseinträge für dieselbe Datei zu haben. Diese werden als Hardlinks bezeichnet. Sie werden erstellt, indem ein neuer Verzeichniseintrag für die Datei erstellt wird, ohne den ursprünglichen Eintrag zu entfernen. Der Inode des Dateisystems hat einen Referenzzähler, um die Anzahl der Verzeichniseinträge aufzuzeichnen, die auf die Datei zeigen.

EDIT2:Wenn der Prozess abstürzt oder beendet wird, wird die Datei sauber entfernt, da die Anzahl der Zugriffe im Speicher auf Null reduziert wird. Dies ist die Aktion, die ausgeführt wird, wenn das Programm normal beendet wird.

Im Falle eines Stromausfalls oder eines anderen ungeordneten Herunterfahrens des Systems benötigt die Festplatte einen fsck (Dateisystemprüfung), bevor es vollständig gemountet werden kann. Abhängig vom Zustand des On-Disk-Inodes und der Verzeichnisstrukturen wird der Speicherplatz wiederhergestellt, die Datei verbleibt im Verzeichnis oder es wird ein neuer Eintrag in lost+found vorgenommen Verzeichnis. Die Ergebnisse hängen davon ab, welche Änderungen auf die Festplatte geleert oder in das Dateisystemjournal geschrieben wurden.


Wie von Matt Jenkins erklärt, verfolgt das Betriebssystem (das Dateisystem) Dateien, die von Anwendungen geöffnet bleiben. Solange ein Prozess eine Datei geöffnet hält, bleiben ihre Daten auf der Festplatte (auch wenn sie gelöscht wurden und für andere Programme nicht mehr sichtbar oder zugänglich sind.

Beachten Sie, dass eine Folge davon ist, dass der von einer Datei belegte Speicherplatz erst zurückgewonnen werden kann, wenn der letzte Prozess, der sie verwendet, sie geschlossen hat. Das ist eine FAQ für Linux/Unix-Dateisystemoperationen:"'df'-Befehl sagt, dass Partition voll ist, während 'du' freien Speicherplatz meldet" (siehe z. B. http://batleth.sapienti-sat.org/projects/FAQs/ext3- FAQ.html ). Wenn Sie Speicherplatz freigeben müssen, reicht es nicht aus, große Dateien (z. B. Protokolldateien) zu löschen, Sie müssen auch sicherstellen, dass kein Prozess sie offen hält (typischerweise ein Problem mit Protokolldateien).


Es ist eigentlich ganz einfach. Die Datei verwaltet eine Liste von Referenzen – Prozesse, die auf die Datei zugreifen. Wenn Sie die Datei löschen, wird nur die Auflistung aus dem Verzeichnis entfernt, aber nicht die Datei selbst. Die Programme, die die Datei noch geöffnet haben, können weiterhin darauf zugreifen. Die Datei wird erst wirklich gelöscht, wenn alle darauf zugreifenden Programme sie schließen.

Außerdem wird beim Verschieben der Datei - wenn sie sich im selben Dateisystem befindet - die Datei nicht als solche verschoben, sondern nur der Zeiger auf das Verzeichnis geändert, in dem sich die Datei befindet.


Linux
  1. Was ist NGINX? Wie funktioniert es?

  2. Ssh – Wie funktioniert TCP-Keepalive in Ssh?

  3. Wie verwende ich den Dateityp in Vim?

  4. UNIX / Linux:So verwenden Sie Sticky Bit für Verzeichnis und Datei

  5. Wie funktioniert sig_atomic_t eigentlich?

So verwenden Sie Rsync

Wie funktioniert Swap-Speicher in Linux?

So verwenden Sie den Befehl lsof unter Linux

Wie verwende ich gzip unter Linux?

So verwenden Sie den Linux-Befehl shred

Wie funktioniert /proc/*?