tail -f path
Ce qui précède produira instantanément les modifications apportées au fichier, mais je veux appliquer un filtre à la sortie, pour ne l'afficher que lorsqu'il y a un mot-clé. xxx
en elle.
Comment aborder cette question ?
tail -f path
Ce qui précède produira instantanément les modifications apportées au fichier, mais je veux appliquer un filtre à la sortie, pour ne l'afficher que lorsqu'il y a un mot-clé. xxx
en elle.
Comment aborder cette question ?
Réponse courte : tail -f somefile | grep somepattern
Cependant, cela a tendance à ne pas être suffisant. Disons que vous suivez un fichier qui est souvent modifié (s'il s'agit d'un journal de débogage, il peut être modifié plusieurs fois). Dans ce cas tail -F
est votre ami. Je te laisse chercher la différence.
Mais tail -f
y tail -F
imprime d'abord un tas de lignes, ce qui est souvent indésirable dans ce cas d'utilisation, donc dans ce cas ajoutez -n0
tail -F -n0 somefile | grep somepattern
Ce sera parfait jusqu'à ce que vous souhaitiez effectuer d'autres filtrages. Dans ce cas, vous devrez faire attention à la mise en mémoire tampon. lors de l'écriture dans un terminal mais lorsqu'il s'agit d'écrire dans un tube, le tampon est plein. Ainsi, ce qui suit émettra des lignes dès qu'elles seront trouvées, car tail
est explicitement tamponné par ligne (ou il vide sa sortie à la fin de chaque ligne), et grep
est également mis en tampon de ligne car sa sortie est envoyée à votre terminal :
tail -F -n0 somefile | grep somepattern
Mais ensuite, vous décidez d'utiliser quelque chose comme awk
ou cut
pour poursuivre le traitement de la sortie.
tail -F -n0 somefile | grep somepattern | awk '{print $3}'
Et maintenant, vous vous demandez où est passée votre sortie... selon le volume des journaux, vous pouvez constater que vous obtenez une sortie, mais ce sera une page à la fois parce que maintenant le stdout de grep
fonctionne en mode "full-buffer", et donc awk
reçoit l'entrée 4kB à la fois (par défaut).
Dans ce cas, vous pouvez dire grep
pour que la ligne stdout soit toujours mise en tampon en utilisant l'option --line-buffered
option.
tail -F -n0 somefile | grep --line-buffered somepattern | ...
Cependant, la plupart des commandes n'ont pas d'analogue de --line-buffered
. Dans le cas d'outils plus scriptables, vous pouvez utiliser une fonction pour purger la sortie (par exemple, dans la fonction awk
la fonction est fflush()
Les outils comme Perl et Python ont quelque chose de similaire).
Avec des personnes comme cut
vous n'avez probablement pas de chance ; ... mais vous pouvez essayer de rechercher unbuffer
qui, je pense, est fourni par le expect
toolchain (je ne l'ai jamais utilisé).
J'espère que cela vous a été utile.
A la vôtre, Cameron
Et vous pouvez utiliser plusieurs pipes et greps, et exclure des choses avec grep -v, obtenir une insensibilité à la casse avec grep -i, etc.
c'est-à-dire tail -100f /var/log/messages | grep -V ACPI | grep -i ata
commencez à suivre 100 lignes à partir de la fin, et continuez à suivre, excluez d'abord toutes les lignes avec ACPI, puis montrez les lignes avec ata, ATA, ou n'importe quel mélange de ceux-ci.
Une autre option pratique est l'option ABC, pour les lignes After, Before et Context (lignes avant et après).
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.