Est-il sûr d'ouvrir un fichier écrit par un script en cours d'exécution?

20

J'exécute un script shell qui écrit dans un fichier.
Ce script peut prendre un certain temps et je voudrais surveiller la sortie partielle plutôt que d'attendre la fin du script entier.

Est-il sûr d'ouvrir (double-cliquer) un fichier en cours d'écriture par le script?

Aucun
la source
4
Cette. De plus, si vous le savez au préalable, vous pouvez simplement diriger la sortie des scripts via tee.
Hennes
1
Semi apparenté est le commando tee: vous pouvez transférer la sortie vers un fichier et vers le terminal en même temps: man7.org/linux/man-pages/man1/tee.1.html
Cheiron

Réponses:

42

La lecture du fichier est sûre, bien que le double-clic que vous avez mentionné ouvrira probablement le fichier dans un éditeur qui vous offrira une option pour apporter des modifications et les enregistrer. Des erreurs de clic se produisent, donc je recommande des commandes qui ne vous permettront même pas de modifier le fichier.

Ce sont des exemples qui fonctionnent dans le terminal; ils ne liront que le fichier:

cat file
less file
less +F file
tail -n 5 file
tail -f file
Kamil Maciorowski
la source
4
De nombreux éditeurs de fichiers plus intelligents vous avertiront que le fichier a été modifié et vous demanderont si vous souhaitez le recharger, mais les éditeurs stupides ne le seront peut-être pas.
user1306322
5
@ user1306322 Ce n'est toujours pas garanti pour être sûr. Juts car le fichier est ouvert pour l'écriture ne signifie pas qu'il est écrit en permanence. Si rien n'a été écrit pendant que l'éditeur est en cours d'exécution, il ne le remarquera pas. Et puisqu'un éditeur peut écrire un nouveau fichier et renommer par dessus (parce que les renommages sont atomiques), le fichier en cours d'écriture aura alors été supprimé. La sortie écrite à partir de ce point ira dans un fichier supprimé.
kasperd
13

Tant que vous n'y écrivez pas, ça devrait aller.

Cependant, je recommanderais d'utiliser

tail -f log_file

dans un autre terminal.

Cette commande "suit" le fichier log_fileet écrit le contenu nouvellement ajouté dès qu'il est mis à jour par le script.

Iskustvo
la source
1

Pas assez de représentants pour ajouter un commentaire à la réponse de Kamil Maciorowski:

Pour certains fichiers, vous souhaiterez tail -F fileque les éléments suivants se poursuivent pendant une rotation. Regarder syslog par exemple.

studog
la source
-1

Dans le cas où le script (ou l'implémentation du framework sous-jacent) ouvre et ferme à plusieurs reprises le descripteur de fichier pendant son travail, il peut rencontrer une erreur de violation de partage dans le mode d'écriture suivant ouvert pour les raisons suivantes:
1) Le script peut demander l'écriture accéder en mode exclusif (à l'exclusion de l'accès en lecture simultanée), donc si votre programme éditeur / visualiseur de fichiers ne lit encore que le fichier, il peut déclencher une erreur dans le script d'écriture.
2) En outre, certains éditeurs / visualiseurs de fichiers verrouillent le fichier pendant toute la durée pendant laquelle ils ont ouvert le fichier.

En conclusion, il existe des problèmes possibles qui dépendent du programme que vous utilisez pour afficher le fichier. Et il y a des problèmes possibles résultant de l'implémentation (ou du cadre sous-jacent) du script qui écrit dans le fichier.

Roland Pihlakas
la source
1
D'après mon expérience, cela est très rare sous Linux (note: je suis un utilisateur à domicile). Je sais que le problème existe dans Windows, mais la question est marquée Linux . Quels "éditeurs / téléspectateurs" fonctionnent comme ceci sous Linux? Dans quelles versions de Linux les verrous sont-ils obligatoires?
Kamil Maciorowski
@KamilMaciorowski Malheureusement, je n'ai pas de liste d'avertissement spécifique. Les verrous ne sont obligatoires nulle part (ni sous Windows), certaines personnes les utilisent simplement. Je dis seulement qu'un tel problème est possible et veuillez ne pas utiliser cette approche avec négligence dans des situations critiques pour la mission. C'est au PO de décider si cela s'applique ou si c'est important. La simple existence de la question ci-dessus augmente les chances qu'un tel phénomène se soit déjà produit pour le PO. Les réponses affirmant que rien ne pouvait se produire, ne fournissent pas non plus beaucoup de nouvelles informations.
Roland Pihlakas
1
@RolandPihlakas Je suis prêt à parier que l'auteur de cette réponse en a fait l' expérience - mais uniquement sur Windows. Il n'est donc pas pertinent pour les systèmes compatibles POSIX comme Linux, sur lesquels la surveillance des sorties via tail -fou less +Fest routinière.
Chromatix
@Chromatix Je suis vraiment confus au sujet de la constructive partie de votre raisonnement et ne vois pas quel genre de suggestion ou de nouvelles informations sont à votre disposition ici, en plus de votre haine personnelle pour Windows ... Vous n'avez pas répondu aux points dans mon commentaire du tout . Pourquoi vous souciez-vous de ce que j'ai vécu? Veuillez ne pas devenir personnel.
Roland Pihlakas
@RolandPihlakas Parce que votre réponse donne l'impression très ferme qu'ouvrir un fichier en lecture seule est dangereux sous Linux, alors qu'il ne l'est vraiment pas. En fait, il est toujours sûr de lire un fichier qui est ajouté, tant que vous ne supposez pas que "fin de fichier" signifie "fin d'enregistrement" ou "fin de ligne". Le seul cas où il échouera est lorsque l'application d'écriture détient un "verrou obligatoire" que très peu d'applications font (le verrou POSIX standard est un "verrou consultatif") et qui entraînera une erreur bien définie, plutôt que que le comportement erratique.
Chromatix