Je regardais récemment en utilisant tail -f
pour surveiller certains fichiers texte comme ceci: tail -f /var/sometext
.
Cependant, quand j'ai fait quelques tests, cela ne semble pas fonctionner. Ce que j'ai fait, c'est que j'ai créé un nouveau fichier et tail -f /home/name/text
j'ai couru: Ensuite, j'ai ouvert le journal dans vim et j'ai fait quelques modifications, l'ai enregistré, et il semble que tail ne "voit" pas le changement.
La chose étrange est que la course echo "hello" >> /home/name/text
semble bien fonctionner (la queue voit le changement). J'ai lu quelque part que cela avait quelque chose à voir avec les descripteurs de fichiers et les nouveaux inodes créés lors de l'enregistrement d'un fichier.
Quelqu'un peut-il m'expliquer cela? Je n'ai pas vraiment compris comment cela fonctionne, mais j'ai une idée de ce que sont les descripteurs de fichiers.
la source
tail -f surveille la fin du fichier et lorsque la fin du fichier se déplace, il imprime le nouveau contenu et attend que la fin du fichier se déplace à nouveau. En d'autres termes, les changements au milieu du document ne seront pas trouvés par tail -f, seulement en ajoutant.
la source
En fait, la véritable histoire est:
tail -f surveille la mémoire, pas le disque. Mais il ne peut pas accéder à la mémoire protégée, comme les modifications apportées à un fichier ouvert par un éditeur de texte.
la source
tail -f
commande opère sur un fichier (descripteur de fichier après ouverture du fichier). Bien qu'en fait les nouvelles modifications du fichier soient encore en mémoire (tampons, cache) cela n'a pas d'importance.tail
accède toujours au fichier via le descripteur de fichier. Peu importe la façon dont le fichier est modifié. --- La réponse d'Ignacio Vazquez-Abrams est correcte - l'éditeur ne modifie pas le fichier actuel (qui est ouvert danstail
), il enregistre les modifications dans un nouveau fichier portant le même nom que l'ancien.