È sicuro aprire un file che è stato scritto da uno script in esecuzione?


20

Sto eseguendo uno script di shell che sta scrivendo su un file.
Il completamento di questo script potrebbe richiedere molto tempo e vorrei monitorare l'output parziale piuttosto che attendere il completamento dell'intero script.

È sicuro aprire (doppio clic) un file che viene scritto dallo script?


4
Quello. Inoltre, se lo sai in anticipo, puoi semplicemente eseguire il pipe dell'output degli script attraverso Tee.
Hennes,

1
Il semi-commando è il tee commando: è possibile inoltrare l'output a un file e al terminale contemporaneamente: man7.org/linux/man-pages/man1/tee.1.html
Cheiron

Risposte:


42

Leggere il file è sicuro, anche se il doppio clic che hai citato probabilmente aprirà il file in qualche editor che ti offrirà un'opzione per apportare modifiche e salvarle. I missclicks avvengono, quindi consiglio comandi che non ti permetteranno nemmeno di cambiare il file.

Questi sono esempi che funzionano nel terminale; leggeranno solo il file:

cat file
less file
less +F file
tail -n 5 file
tail -f file

4
Molti editor di file più intelligenti ti avvertiranno che il file è stato modificato e ti chiederanno se vuoi ricaricarlo, ma gli editor stupidi potrebbero non farlo.
user1306322

5
@ user1306322 Non è ancora garantito che sia sicuro. Juts perché il file è aperto per la scrittura non significa che venga costantemente scritto. Se non è stato scritto nulla mentre l'editor era in esecuzione, non se ne accorgerebbe. E poiché un editor può scrivere un nuovo file e rinominarlo in cima (perché i nomi sono atomici), il file su cui si sta scrivendo verrà quindi eliminato. L'output scritto da quel punto in poi andrà a un file cancellato.
Kasperd,

13

Finché non ci stai scrivendo, dovrebbe andare bene.

Tuttavia, consiglierei di utilizzare

tail -f log_file

in un altro terminale.

Questo comando "seguirà" il file log_filee scriverà il contenuto appena aggiunto non appena viene aggiornato dallo script.


1

Rappresentante insufficiente per aggiungere un commento alla risposta di Kamil Maciorowski:

Per alcuni file ti consigliamo in tail -F filemodo che quanto segue continui attraverso una rotazione. Guardando syslog per esempio.


-1

Nel caso in cui lo script (o l'implementazione del framework sottostante) apra e chiuda ripetutamente l'handle del file durante il suo funzionamento, potrebbe verificarsi un errore di violazione della condivisione nella successiva modalità di scrittura aperta per i seguenti motivi:
1) Lo script può richiedere la scrittura accesso in modalità esclusiva (escluso l'accesso in lettura simultaneo), quindi se il tuo editor di file / programma di visualizzazione sta ancora leggendo il file, potrebbe causare un errore nello script di scrittura.
2) Inoltre, alcuni editor / visualizzatori di file bloccano il file per l'intera durata in cui hanno aperto il file.

In conclusione, ci sono possibili problemi che dipendono dal programma che si sta utilizzando per visualizzare il file. E ci sono possibili problemi derivanti dall'implementazione (o dal framework sottostante) dello script che scrive nel file.


1
Dalla mia esperienza questo è molto raro in Linux (nota: sono un utente domestico). So che il problema esiste in Windows, tuttavia la domanda è taggata Linux . Quali "editor / visualizzatori" funzionano così in Linux? In quali gusti di Linux sono obbligatori i lucchetti?
Kamil Maciorowski

@KamilMaciorowski Sfortunatamente, non ho un elenco di avvisi specifico. I blocchi non sono obbligatori ovunque (né lo sono in Windows), alcune persone li usano e basta. Sto solo dicendo che questo problema è possibile e per favore non usare questo approccio con noncuranza in situazioni mission-critical. Spetta al PO decidere se ciò si applica o se è importante. La semplice esistenza della domanda di cui sopra solleva le probabilità che tale fenomeno sia già avvenuto per l'OP. Le risposte affermano che non potrebbe succedere nulla e non forniscono neanche molte nuove informazioni.
Roland Pihlakas,

1
@RolandPihlakas Sono disposto a scommettere che l'autore di questa risposta l' ha sperimentata, ma solo su Windows. Quindi è irrilevante per i sistemi compatibili con POSIX come Linux, su cui monitorare l'output tramite tail -fo less +Fè di routine.
Chromatix,

@Chromatix Sono davvero confuso sulla parte costruttiva del tuo ragionamento e non riesco a vedere che tipo di suggerimento o nuove informazioni stai fornendo qui, oltre al tuo odio personale per Windows ... Non hai risposto ai punti nel mio commento a tutti . Perché ti interessa ciò che ho vissuto? Per favore, non diventare personale.
Roland Pihlakas,

@RolandPihlakas Perché la tua risposta dà la ferma impressione che aprire un file in sola lettura sia pericoloso su Linux, quando non lo è. In effetti, è sempre sicuro leggere un file che viene aggiunto, purché non si presuma che "end of file" significhi "end of record" o "end of line". L'unico caso in cui fallirà è quando l'applicazione di scrittura contiene un "blocco obbligatorio" che fanno pochissime applicazioni (il blocco POSIX standard è un "blocco di avviso") e che si tradurrà in un errore ben definito, piuttosto del comportamento irregolare.
Chromatix,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.