231 votes

Shell pour surveiller les changements dans un fichier.

Je sais qu'il y avait une commande sous Unix que je pouvais utiliser pour surveiller un fichier et voir les changements qui y sont écrits. C'était très utile, notamment pour vérifier les fichiers journaux.

Savez-vous comment ça s'appelle ?

291voto

Justin Walgran Points 552

Voulez-vous dire

tail -f logfile.log

?

( Page de manuel pour tail )

0 votes

Merci, je pense que c'est celui que je cherchais. Mais est-ce qu'il met à jour en temps réel ? Si ce n'est pas le cas, puis-je modifier l'intervalle ?

7 votes

Oui, c'est en temps réel.

19 votes

Note : Si votre distribution fournit la commande tailf, utilisez-la de préférence à tail -f. tailf est plus efficace car il n'a pas besoin d'accéder au fichier surveillé s'il n'est pas en cours d'écriture (les accès en poll sont ennuyeux si vous avez monté le système de fichiers avec la mise à jour atime).

152voto

Davide Gualano Points 804

Vous vouliez probablement dire queue, comme dans la réponse de Jon Skeet.

Un autre outil utile est regarder 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).

83voto

richvdh Points 771

inotifywait de inotify-tools est utile si vous voulez exécuter une commande à chaque fois qu'un fichier (ou tout autre fichier dans un répertoire) change. Par exemple :

inotifywait -r -m -e modify /var/log | 
   while read path _ file; do 
       echo $path$file modified
   done

9 votes

Il faut savoir que path n'est pas le meilleur choix pour un nom de variable. Sur zsh il semble que les variables d'environnement ne soient pas sensibles à la casse. Pour moi, le fait de définir path causes PATH et cela signifie que rien ne s'exécutera tant que vous n'aurez pas corrigé cela. Sur bash , réglage path n'a aucun effet sur PATH .

2 votes

@Thanatos Variables Zsh アール sensibles à la casse, mais parmi les variables définies par Zsh lui-même, Zsh "lie" la variable *PATH à un tableau du même nom, mais minuscule . Les variables liées sont toujours composées d'un scalaire et d'un tableau (ex. PATH y path ), et la modification de l'un modifie l'autre. Une caractéristique clé est que la version tableau est automatiquement divisée sur le séparateur dans la version scalaire (le caractère : ). Voyez par vous-même avec print "$PATH\n$path" . Le deuxième paragraphe de la PARAMETERS USED BY THE SHELL dans la section zshparam(1) La page de manuel contient des informations plus détaillées.

0 votes

De plus, il y a pas mal de variables utilisées par Zsh qui sont liées, pas seulement PATH y path . Ils sont tous énumérés dans la section de mon commentaire précédent, y compris, mais sans s'y limiter : FPATH / fpath , CDPATH / cdpath , MANPATH / manpath , FIGNORE / fignore et plus encore.

41voto

FigBug Points 213

Je préfère utiliser less +FG 1 sur tail -f parce que je me retrouve à devoir rechercher dans un fichier journal une erreur ou un ID spécifique. Si j'ai besoin de rechercher quelque chose, je tape ^C pour arrêter de suivre le dossier et ? pour commencer la recherche en arrière.

Les liaisons entre les touches sont à peu près les mêmes que celles de l'application vi . Toute commande peut être initialisée au démarrage en utilisant la commande + 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 bûches vraiment longues, je trouve pratique d'utiliser la fonction -n qui désactive la numérotation des lignes. De 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. Coup de chapeau à <a href="https://serverfault.com/users/4815/rgmarcha">rgmarcha </a>pour l'avoir signalé dans les commentaires.

0 votes

N'oubliez pas de définir un alias avec les options que vous souhaitez, afin de ne pas avoir à les taper à chaque fois.

1 votes

En fait, vous devriez généralement préférer les fonctions Shell aux alias dans la plupart des cas.

0 votes

Je voudrais savoir pourquoi +FG au lieu de +F ?

22voto

trent Points 3094

Tail est génial ... less peut également être utilisé pour lancer less sur le fichier, c'est-à-dire less monfichier puis appuyer sur Shift + F . Cela a moins d'effet que la queue.

5 votes

Less +F monfichier le fera aussi

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X