Je sais qu'il y avait une commande sur Unix que je pouvais utiliser pour surveiller un fichier et voir les modifications qui y étaient écrites. Cela a été très utile, en particulier pour vérifier les fichiers journaux.
Savez-vous comment ça s'appelle?
Vous vouliez probablement parler de queue, selon la réponse de Jon Skeet.
Un autre utile est watch ; il vous permet d'exécuter une commande périodiquement et de voir la sortie en plein écran. Par exemple:
watch -n 10 -d ls -l /var/adm/messages
Exécutera la commande ls -l /var/adm/messages
toutes les 10 secondes et mettez en évidence la différence de sortie entre les exécutions suivantes. (Utile pour observer la vitesse de croissance d'un fichier journal, par exemple).
inotifywait
from inotify-tools est utile si vous souhaitez exécuter une commande chaque fois qu'un fichier (ou n'importe quel fichier d'un répertoire) change. Par exemple:
inotifywait -r -m -e modify /var/log |
while read path _ file; do
echo $path$file modified
done
Je préfère utiliser less +FG
1 plus de tail -f
car je dois rechercher dans un fichier journal une erreur ou un ID spécifique. Si je dois rechercher quelque chose, je tape ^C
pour arrêter de suivre le fichier et ?
pour commencer la recherche en arrière.
Les raccourcis clavier sont à peu près les mêmes que dans vi
. Toute commande peut être initialisée au démarrage à l'aide de +
option:
+cmd Causes the specified cmd to be executed each time a new file is
examined. For example, +G causes less to initially display each
file starting at the end rather than the beginning.
Pour les journaux très longs, je trouve pratique d'utiliser le -n
option qui désactive la numérotation des lignes. Depuis la page de manuel:
-n or --line-numbers
Suppresses line numbers. The default (to use line numbers) may
cause less to run more slowly in some cases, especially with a
very large input file. Suppressing line numbers with the -n
option will avoid this problem. Using line numbers means: the
line number will be displayed in the verbose Prompt and in the =
command, and the v command will pass the current line number to
the editor (see also the discussion of LESSEDIT in PROMPTS
below).
1. Pointe du chapeau à rgmarcha pour l'avoir signalé dans les commentaires.
Tail is great ... moins peut aussi être utilisé commencer moins sur le fichier c'est-à-dire moins mon fichier puis appuyer sur Shift+F. Cela a moins de fonction de queue.
J'édite un fichier LaTeX et je voulais également le surveiller pour les changements quelque part au milieu. J'ai fouetté le petit script Shell suivant qui m'a été utile. J'espère que cela sera également utile à quelqu'un d'autre.
#!/bin/bash
FILE="$1"
CMD="$2"
LAST=`ls -l "$FILE"`
while true; do
sleep 1
NEW=`ls -l "$FILE"`
if [ "$NEW" != "$LAST" ]; then
"$CMD" "$FILE"
LAST="$NEW"
fi
done
Enregistrez-le sous watch.sh
et fait chmod u+x watch.sh
. Ensuite, je l'exécute comme suit:
./watch.sh file.tex pdflatex
Si vous souhaitez que la commande ne soit exécutée qu'en cas de modification réelle, vous pouvez utiliser `md5sum "$FILE"`
au lieu de `ls -l "$FILE"`
.
vous pouvez utiliser la commande tailf la plus simple
tailf logfile.log
Vous pouvez également utiliser inotifywatch/inotifywait qui se connecte au sous-système inotify des noyaux. De cette façon, vous pouvez également surveiller des éléments comme "ouvrir", "fermer" ou "accéder".
Mais si vous voulez simplement ajouter des lignes à la sortie, je suis d'accord sur la queue.
Tail est l'outil Unix standard, traditionnel, disponible partout. Un outil un peu plus sophistiqué est multitail qui peut surveiller plusieurs fichiers simultanément et met en évidence la syntaxe.
Si je veux pouvoir rechercher autour du fichier en plus de le suivre, j'utilise moins avec la commande "F".
Lorsque vous utilisez tail, gardez à l'esprit que des arguments supplémentaires sont nécessaires si le fichier peut être survolé ou remplacé par edit (mode par défaut pour vim's: w).
tail -f obligera tail à stocker le descripteur de fichier et à le suivre. Si le fichier est remplacé, le descripteur sera modifié. L'avantage de suivre le descripteur de fichier est que si le fichier est renommé, vous le suivrez toujours.
tail --follow = fera queue suivre le fichier nommé en le rouvrant périodiquement pour voir s'il a été remplacé.
--retry est une autre option utile si vous souhaitez suivre un fichier journal mais que le fichier n'a pas encore été créé.
tail -F est un raccourci pour --follow = --retry.
Oubliez tailf, diff est la commande que vous souhaitez. Voici une bonne astuce pour observer les différences lorsqu'elles se produisent en temps réel (ou se ferment) entre 2 fichiers ou dans un fichier en cours d'écriture.
Vous pouvez utiliser ces méthodes pour modifier le comportement comme vous le souhaitez, par exemple en écrivant les modifications dans un fichier à conserver. Jouez avec l'intervalle de veille ou d'autres options pour les commandes ci-dessous.
Vous avez 1 fichier et vous souhaitez surveiller les modifications qui y sont apportées:
Voici donc quoi faire:
copier le fichier
cp file file2
écrire un script bash pour trouver les différences et mettre à jour le fichier2
touch check-differences.sh
nano check-differences.sh
chmod 755 check-differences.sh
Voici une idée de base pour le script. Faites-le écrire dans un fichier si vous le souhaitez
#!/bin/bash
diff file file2
cp file file2
Ensuite, vous pouvez soit regarder les différences à l'écran en utilisant la montre
watch ./check-differences
cela se mettra à jour toutes les 2 secondes par défaut. Donc, si vous devez revenir en arrière et les lire, écrivez ensuite la sortie de diff dans un fichier du script.
Ou utilisez cron
pour exécuter votre script régulièrement si vous n'avez pas besoin de voir la sortie.
Tandis que tail -f somefile.txt
continue de défiler avec de nouvelles données, je parfois préfère less +G somefile.txt
aussi pour regarder un patch des dernières données dans le fichier.