Ist es sicher, eine Datei zu öffnen, die von einem laufenden Skript geschrieben wird?

20

Ich führe ein Shell-Skript aus, das in eine Datei schreibt.
Die Fertigstellung dieses Skripts kann einige Zeit in Anspruch nehmen, und ich möchte die Teilausgabe überwachen, anstatt auf die Fertigstellung des gesamten Skripts zu warten.

Ist es sicher, eine vom Skript geschriebene Datei zu öffnen (Doppelklick)?

Keiner
quelle
4
Das. Auch wenn Sie es vorher wissen, können Sie die Skriptausgabe einfach über tee leiten.
Hennes
1
Teilweise verwandt ist das tee commando: Sie können die Ausgabe gleichzeitig an eine Datei und an das Terminal weiterleiten
Cheiron

Antworten:

42

Das Lesen der Datei ist sicher, obwohl ein Doppelklick, den Sie erwähnt haben, wahrscheinlich die Datei in einem Editor öffnen wird, der Ihnen die Möglichkeit bietet, Änderungen vorzunehmen und diese zu speichern. Da Fehlklicks auftreten, empfehle ich Befehle, mit denen Sie die Datei nicht einmal ändern können.

Dies sind Beispiele, die im Terminal funktionieren. Sie lesen nur die Datei:

cat file
less file
less +F file
tail -n 5 file
tail -f file
Kamil Maciorowski
quelle
4
Viele intelligentere Datei-Editoren warnen Sie, dass die Datei geändert wurde, und fragen Sie, ob Sie sie erneut laden möchten, dumme Editoren jedoch möglicherweise nicht.
user1306322
5
@ user1306322 Das ist immer noch nicht garantiert sicher. Juts, weil die Datei zum Schreiben geöffnet ist, bedeutet nicht, dass ständig darauf geschrieben wird. Wenn nichts geschrieben wurde, während der Editor ausgeführt wurde, wird dies nicht bemerkt. Und da ein Editor möglicherweise eine neue Datei schreibt und oben umbenennt (da die Umbenennungen atomar sind), wurde die Datei, in die geschrieben wird, gelöscht. Ab diesem Zeitpunkt geschriebene Ausgaben werden in eine gelöschte Datei verschoben.
Kasperd
13

Solange Sie nicht schreiben, sollte es in Ordnung sein.

Ich würde jedoch die Verwendung empfehlen

tail -f log_file

in einem anderen Terminal.

Dieser Befehl folgt der Datei log_fileund schreibt den neu hinzugefügten Inhalt, sobald er vom Skript aktualisiert wird.

Iskustvo
quelle
1

Nicht genügend Mitarbeiter, um einen Kommentar zu Kamil Maciorowskis Antwort hinzuzufügen:

Für einige Dateien möchten Sie tail -F file, dass das Folgende durch eine Rotation fortgesetzt wird. Sieh dir zum Beispiel Syslog an.

Studog
quelle
-1

Wenn das Skript (oder die zugrunde liegende Framework-Implementierung) das Datei-Handle während seiner Arbeit wiederholt öffnet und schließt, kann es aus folgenden Gründen zu einem Fehler aufgrund eines Verstoßes gegen die Freigabe beim anschließenden Öffnen
des Schreibmodus kommen : 1) Das Skript fordert möglicherweise das Schreiben an Der Zugriff erfolgt im exklusiven Modus (mit Ausnahme des gleichzeitigen Lesezugriffs). Wenn Ihr Datei-Editor / Viewer-Programm also nur die Datei liest, kann dies einen Fehler im Schreibskript auslösen.
2) Zusätzlich sperren einige Datei-Editoren / -Viewer die Datei für die gesamte Dauer, für die sie die Datei geöffnet haben.

Zusammenfassend lässt sich sagen, dass es Probleme geben kann, die von dem Programm abhängen, mit dem Sie die Datei anzeigen. Und es gibt mögliche Probleme, die sich aus der Implementierung (oder dem zugrunde liegenden Framework) des Skripts ergeben, das in die Datei schreibt.

Roland Pihlakas
quelle
1
Aus meiner Erfahrung ist dies unter Linux sehr ungewöhnlich (Anmerkung: Ich bin ein Heimanwender). Ich weiß, dass das Problem in Windows besteht, die Frage ist jedoch Linux markiert . Welche "Editoren / Viewer" funktionieren unter Linux so? In welchen Linux-Versionen sind Sperren obligatorisch?
Kamil Maciorowski
@KamilMaciorowski Leider habe ich keine spezifische Warnliste. Sperren sind nirgendwo obligatorisch (und auch unter Windows nicht), manche Leute benutzen sie nur. Ich sage nur, dass ein solches Problem möglich ist, und wenden Sie diesen Ansatz bitte nicht achtlos in missionskritischen Situationen an. Es ist Sache des OP, zu entscheiden, ob dies zutrifft oder ob es wichtig ist. Die bloße Existenz der obigen Frage erhöht die Wahrscheinlichkeit, dass ein solches Phänomen für das OP bereits eingetreten ist. Antworten, die behaupten, dass nichts passieren könnte, liefern auch nicht viele neue Informationen.
Roland Pihlakas
1
@ RolandPihlakas Ich bin bereit zu wetten, dass der Autor dieser Antwort es erlebt hat - aber nur unter Windows. Für POSIX-konforme Systeme wie Linux, auf denen die Ausgabe über tail -foder less +Froutinemäßig überwacht wird, spielt dies also keine Rolle .
Chromatix
@Chromatix Ich bin wirklich verwirrt über den konstruktiven Teil Ihrer Argumentation und kann nicht erkennen, welche Art von Anregungen oder neuen Informationen Sie hier zur Verfügung stellen, abgesehen von Ihrem persönlichen Hass für Windows ... Sie haben die Punkte in meinem Kommentar überhaupt nicht beantwortet . Warum interessiert es dich, was ich erlebt habe? Bitte nicht persönlich werden.
Roland Pihlakas
@RolandPihlakas Weil Ihre Antwort den Eindruck erweckt, dass das Öffnen einer schreibgeschützten Datei unter Linux gefährlich ist, wenn dies nicht der Fall ist. Tatsächlich ist es immer sicher, eine Datei zu lesen, an die angefügt wird, solange Sie nicht davon ausgehen, dass "Dateiende" "Datensatzende" oder "Zeilenende" bedeutet. Der einzige Fall, in dem dies fehlschlägt, besteht darin, dass die schreibende Anwendung eine "obligatorische Sperre" enthält, die nur sehr wenige Anwendungen ausführen (die standardmäßige POSIX-Sperre ist eine "beratende Sperre") und die eher zu einem genau definierten Fehler führt als unberechenbares Verhalten.
Chromatix