Linux - Überschreibt der CP-Befehl eine geöffnete Datei

779
Edward144

Ich würde gerne wissen, ob ich den CP- oder MV-Befehl als root verwende, um eine Datei in ein neues Verzeichnis zu kopieren, das diese Datei bereits enthält und derzeit von einem anderen Benutzer geöffnet ist. Dann würde die Operation erfolgreich sein oder würde sie blockiert bereits in Benutzung?

Ich habe versucht, dies auf einer VM zu testen, wobei root eine Datei überschreibt, die auch von root in einem anderen Terminal-Fenster geöffnet ist. Das gelingt, aber ich frage mich, ob dies nur der Fall ist, weil es sich um denselben Benutzer handelt.

Meine spezifischen Umstände sind eigentlich das Root-Überschreiben der Datei, wenn jemand auf einem Windows-Rechner sie über eine SMB-Freigabe geöffnet hat. Ich kann es derzeit nicht so testen.

Wenn es nicht erfolgreich ist, wenn die Datei geöffnet ist, was dann, wenn ich sie so setze, dass sie nur von allen gelesen wird, akzeptieren Sie den Root-Benutzer.

Ein bisschen mehr Infos:

Ich arbeite an einem einfachen System, um csv-Dateien zu erstellen, die alle unsere Bestellungen für einen bestimmten Monat enthalten, und einfach am Ende der Datei hinzuzufügen, wenn neue Bestellungen eingehen. Ich und der Root-Benutzer (Cronjob mit PHP-Dateien) werden dies tun sind die einzigen, die die Dateien bearbeiten müssen.

Andere Leute betrachten sie jedoch, um von Zeit zu Zeit bestimmte Aufträge zu finden. Momentan bearbeite ich die Dateien manuell und kann sie nicht speichern, wenn ein anderer Benutzer sie geöffnet hat. Daher frage ich mich, ob ich die gleichen Probleme bekomme, wenn sie auf einem Linux-Computer gespeichert sind und der Root-Benutzer die Bearbeitung vornimmt.

1
Nach dem Testen auf Ubuntu überschreiben `cp` und` mv` eine geöffnete Datei, einschließlich der gerade geschriebenen. Ich muss davon ausgehen, dass sie das `O_EXCL` nicht verwenden, wenn sie eine der Quelldateien öffnen. Ich gehe davon aus, dass Ihr Redakteur dies tut. Möglicherweise können Dateien mit einem anderen Editor geöffnet werden. Andernfalls können Sie `cp FilePath FilePath.tmp`,` FilePath.tmp` und `mv FilePath.tmp FilePath` bearbeiten. AFH vor 7 Jahren 0

1 Antwort auf die Frage

1
Ken

Ja, cp und mv überschreiben die geöffneten Dateien. Vielleicht können Sie mit etwas wie Git oder etwas Ähnlichem in die Versionskontrolle hineinschauen.