GNU/Linux >> Tutoriels Linux >  >> Linux

Exemples de commandes Linux tail

La commande Linux tail génère la dernière partie des fichiers. Il existe une option pour garder le fichier ouvert pour d'autres entrées. Il est donc très utile de travailler avec des fichiers journaux où nous pouvons vérifier les journaux en temps réel lorsqu'un événement se produit.

1. Syntaxe de commande Linux tail

La syntaxe de la commande tail est :


$ tail [OPTION]... [FILE]...

Toutes les options et les noms de fichiers sont facultatifs.

2. Que fera tail si aucun fichier n'est fourni ?

Si vous ne fournissez pas le nom du fichier à queue ou si vous le spécifiez sous forme de trait d'union (-), l'entrée standard est lue.

3. Lire les 10 dernières lignes d'un fichier

Si nous ne spécifions aucune option, la queue lira les 10 dernières lignes d'un fichier.


# tail error.log
2019-10-29 11:31:09.887840 [INFO] [16169] [APVH_recipes_Sulsphp73:]: locked pid file [/tmp/lshttpd/APVH_recipes_Suphp73.sock.pid].
2019-10-29 11:31:09.887968 [INFO] [16169] [APVH_recipes_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_recipes_Suphp73.sock
2019-10-29 11:31:09.896280 [INFO] [16169] [APVH_recipes_Sulsphp73:] add child process pid: 27035, procinfo: 0x2c5e2b0
2019-10-29 11:31:09.896396 [INFO] [16169] [APVH_recipes_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_recipes_Suphp73.sock.pid].
2019-10-29 11:31:17.182067 [INFO] [16169] [APVH_golangd_Sulsphp73:]: locked pid file [/tmp/lshttpd/APVH_golangd_Suphp73.sock.pid].
2019-10-29 11:31:17.182116 [INFO] [16169] [APVH_golangd_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_golangd_Suphp73.sock
2019-10-29 11:31:17.182991 [INFO] [16169] [APVH_golangd_Sulsphp73:] add child process pid: 27067, procinfo: 0x447cff0
2019-10-29 11:31:17.183048 [INFO] [16169] [APVH_golangd_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_golangd_Suphp73.sock.pid].
2019-10-29 11:31:20.641690 [INFO] [16169] [149.56.101.239:45604] [ACL] Access to context [/] is denied!
2019-10-29 11:31:27.245789 [INFO] [16169] [198.199.83.232:46876] [ACL] Access to context [/] is denied!
# 

4. Options de commande Linux tail

Option courte Option longue Description
-c –bytes=K affiche les K derniers octets du fichier. Nous pouvons utiliser "-c +K" pour générer des octets commençant par le Kth de chaque fichier.
-f –follow[={name|descriptor}] affiche les données ajoutées au fur et à mesure que le fichier grandit. Si nous spécifions -F, cela revient à "–follow=name –retry"
-n –lines=K affiche les K dernières lignes, au lieu des 10 dernières ; ou utilisez '-n +K' pour sortir en commençant par la Kème ligne.
-q –silencieux, –silencieux ne jamais afficher d'en-têtes donnant des noms de fichiers
–retry continuer d'essayer d'ouvrir un fichier s'il est inaccessible
-s –sleep-interval=N utilisé avec -f pour dormir pendant environ N secondes (par défaut 1.0) entre les itérations.
-v –verbeux affiche toujours des en-têtes donnant des noms de fichiers
–version afficher les informations de version et quitter.
  • Si le premier caractère de K (le nombre d'octets ou de lignes) est un '+', imprimer en commençant par le Kème élément à partir du début de chaque fichier, sinon, imprimer les K derniers éléments du fichier.
  • K peut avoir un suffixe multiplicateur :b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, et ainsi de suite pour T, P , E, Z, Y.
  • Avec –follow (-f), la queue suit par défaut le descripteur de fichier, ce qui signifie que même si un fichier avec queue est renommé, la queue continuera à suivre sa fin. Ce comportement par défaut n'est pas souhaitable lorsque vous voulez vraiment suivre le nom réel du fichier, et non le descripteur de fichier (par exemple, la rotation des journaux).
  • Utilisez –follow=name dans ce cas. Cela amène la queue à suivre le fichier nommé d'une manière qui permet de renommer, de supprimer et de créer.

5. Exemples de commandes Linux tail

Regardons quelques exemples d'utilisation de la commande tail.

5.1) Limiter le nombre de lignes dans la sortie de queue

Nous pouvons utiliser l'option -n ou –lines pour limiter le nombre de lignes dans la sortie finale.


# tail -n 5 error.log

# tail --lines=5 error.log

Si nous utilisons le préfixe + avec la valeur de l'option, la sortie commencera à partir de ce numéro de ligne dans le fichier.


# wc -l error.log
27360 error.log

# tail -n +27358 error.log
2019-10-29 13:09:35.142604 [INFO] [16169] [APVH_javastr_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_javastr_Suphp73.sock
2019-10-29 13:09:35.144320 [INFO] [16169] [APVH_javastr_Sulsphp73:] add child process pid: 18132, procinfo: 0x367c520
2019-10-29 13:09:35.144389 [INFO] [16169] [APVH_javastr_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].

# tail --lines=+27358 error.log
2019-10-29 13:09:35.142604 [INFO] [16169] [APVH_javastr_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_javastr_Suphp73.sock
2019-10-29 13:09:35.144320 [INFO] [16169] [APVH_javastr_Sulsphp73:] add child process pid: 18132, procinfo: 0x367c520
2019-10-29 13:09:35.144389 [INFO] [16169] [APVH_javastr_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].
#

5.2) Limiter le nombre d'octets dans la sortie de queue

Nous pouvons utiliser l'option -c ou –bytes pour sortir les octets spécifiés à partir de la fin du fichier.


# tail -c 100 error.log
 [16169] [APVH_android_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_android_Suphp73.sock.pid].
# tail --bytes=100 error.log
 [16169] [APVH_android_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_android_Suphp73.sock.pid].
# 

Si nous utilisons + avec la valeur de l'option, les données de fichier de cet octet seront envoyées à la console.


# ls -ltr error.log
-rw-r--r--. 1 nobody nobody 3475359 Oct 29 13:15 error.log
# tail -c +3475350 error.log
ock.pid].
#

5.3) Commande Linux tail avec plusieurs fichiers

Nous pouvons passer plusieurs noms de fichiers et la sortie aura un en-tête avec le nom du fichier suivi de la sortie.


# tail -n 2 error.log error.log.2019_10_27
==> error.log <==
2019-10-29 13:17:24.356633 [INFO] [16169] [APVH_golangd_Sulsphp73:] add child process pid: 19670, procinfo: 0x27af560
2019-10-29 13:17:24.356789 [INFO] [16169] [APVH_golangd_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_golangd_Suphp73.sock.pid].

==> error.log.2019_10_27 <==
2019-10-27 20:26:31.050022 [INFO] [16169] [176.9.99.9:34084] [ACL] Access to context [/] is denied!
2019-10-27 20:26:31.216835 [INFO] [16169] [176.9.99.9:34118] [ACL] Access to context [/] is denied!
#

Nous pouvons utiliser l'option -q pour une sortie silencieuse. Il est utile de fusionner la sortie de plusieurs fichiers.


# tail -n 2 -q error.log error.log.2019_10_27
2019-10-29 13:18:44.095709 [INFO] [16169] [APVH_javastr_Sulsphp73:] add child process pid: 19947, procinfo: 0x4312b50
2019-10-29 13:18:44.095766 [INFO] [16169] [APVH_javastr_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].
2019-10-27 20:26:31.050022 [INFO] [16169] [176.9.99.9:34084] [ACL] Access to context [/] is denied!
2019-10-27 20:26:31.216835 [INFO] [16169] [176.9.99.9:34118] [ACL] Access to context [/] is denied!
#

5.4) Surveiller un fichier pour les modifications

Nous pouvons utiliser l'option -f pour surveiller le fichier pour d'autres modifications. C'est l'option la plus utilisée avec la commande tail. Il est utile de suivre les journaux en temps réel et de les déboguer.


[root@li1197-217 logs]# tail -f error.log 
2019-10-29 13:22:31.719103 [INFO] [16169] [APVH_cultwpc_Sulsphp73:] add child process pid: 20640, procinfo: 0x384a9a0
2019-10-29 13:22:31.719172 [INFO] [16169] [APVH_cultwpc_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_cultwpc_Suphp73.sock.pid].
2019-10-29 13:22:32.176946 [INFO] [16169] [APVH_android_Sulsphp73:]: locked pid file [/tmp/lshttpd/APVH_android_Suphp73.sock.pid].
2019-10-29 13:22:32.176979 [INFO] [16169] [APVH_android_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_android_Suphp73.sock
2019-10-29 13:22:32.177901 [INFO] [16169] [APVH_android_Sulsphp73:] add child process pid: 20645, procinfo: 0x2df6830
2019-10-29 13:22:32.177955 [INFO] [16169] [APVH_android_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_android_Suphp73.sock.pid].
2019-10-29 13:22:39.634710 [INFO] [16169] [APVH_javastr_Sulsphp73:]: locked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].
2019-10-29 13:22:39.634755 [INFO] [16169] [APVH_javastr_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_javastr_Suphp73.sock
2019-10-29 13:22:39.641576 [INFO] [16169] [APVH_javastr_Sulsphp73:] add child process pid: 20677, procinfo: 0x286e3b0
2019-10-29 13:22:39.641694 [INFO] [16169] [APVH_javastr_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].

Nous pouvons aussi regarder plusieurs fichiers avec l'option -f.


[root@li1197-217 logs]# tail -f error.log lsrestart.log 
==> error.log <==
2019-10-29 13:22:31.719103 [INFO] [16169] [APVH_cultwpc_Sulsphp73:] add child process pid: 20640, procinfo: 0x384a9a0
2019-10-29 13:22:31.719172 [INFO] [16169] [APVH_cultwpc_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_cultwpc_Suphp73.sock.pid].
2019-10-29 13:22:32.176946 [INFO] [16169] [APVH_android_Sulsphp73:]: locked pid file [/tmp/lshttpd/APVH_android_Suphp73.sock.pid].
2019-10-29 13:22:32.176979 [INFO] [16169] [APVH_android_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_android_Suphp73.sock
2019-10-29 13:22:32.177901 [INFO] [16169] [APVH_android_Sulsphp73:] add child process pid: 20645, procinfo: 0x2df6830
2019-10-29 13:22:32.177955 [INFO] [16169] [APVH_android_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_android_Suphp73.sock.pid].
2019-10-29 13:22:39.634710 [INFO] [16169] [APVH_javastr_Sulsphp73:]: locked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].
2019-10-29 13:22:39.634755 [INFO] [16169] [APVH_javastr_Sulsphp73:] remove unix socket for detached process: /tmp/lshttpd/APVH_javastr_Suphp73.sock
2019-10-29 13:22:39.641576 [INFO] [16169] [APVH_javastr_Sulsphp73:] add child process pid: 20677, procinfo: 0x286e3b0
2019-10-29 13:22:39.641694 [INFO] [16169] [APVH_javastr_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].

==> lsrestart.log <==
Thu Oct 10 17:45:33 UTC 2019
restart, LSWS running: 1
Wed Oct 23 08:53:16 UTC 2019
restart, LSWS running: 1
Wed Oct 23 09:03:02 UTC 2019
restart, LSWS running: 1

Nous pouvons également spécifier le nombre de lignes dans la sortie avec l'option -f.


# tail -2f error.log
2019-10-29 13:28:46.086130 [INFO] [16169] [APVH_cultwpc_Sulsphp73:] add child process pid: 21976, procinfo: 0xd032210
2019-10-29 13:28:46.086193 [INFO] [16169] [APVH_cultwpc_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_cultwpc_Suphp73.sock.pid].

5.5) Utilisation de la commande tail avec pipe et grep

Parfois, nous ne sommes intéressés que par des messages spécifiques dans la sortie de queue. Nous pouvons utiliser la commande tail avec pipe et grep pour filtrer les messages spécifiques dans la sortie.


# tail -100f error.log | grep 'denied'
2019-10-29 13:21:49.170651 [INFO] [16169] [159.65.53.153:38448] [ACL] Access to context [/] is denied!
2019-10-29 13:22:00.991330 [INFO] [16169] [182.71.209.203:22089] [ACL] Access to context [/] is denied!
2019-10-29 13:25:47.188167 [INFO] [16169] [79.137.42.145:36674] [ACL] Access to context [/] is denied!
2019-10-29 13:25:52.668213 [INFO] [16169] [162.144.60.165:52886] [ACL] Access to context [/] is denied!

5.6) Utilisation de la commande tail pour filtrer une autre sortie de commande

Nous pouvons utiliser la commande tail avec une autre commande pour filtrer les lignes de sortie. C'est utile lorsque nous ne nous intéressons qu'aux quelques lignes d'une sortie de commande.


# ls -ltr | tail -n 3
-rw-r--r--. 1 nobody nobody    24406 Oct 23 09:08 error.log.2019_10_23.02
-rw-r--r--. 1 nobody nobody 10486279 Oct 27 20:26 error.log.2019_10_27
-rw-r--r--. 1 nobody nobody  3494794 Oct 29 13:29 error.log
#

# ls -ltr | tail -n +15
-rw-r--r--. 1 nobody nobody 10490954 Oct 21 09:42 error.log.2019_10_21
-rw-r--r--. 1 nobody nobody 10485856 Oct 22 07:44 error.log.2019_10_22
-rw-r--r--. 1 nobody nobody 10485809 Oct 22 14:16 error.log.2019_10_22.01
-rw-r--r--. 1 nobody nobody  5398751 Oct 23 08:29 error.log.2019_10_23
-rw-r--r--. 1 nobody nobody    61485 Oct 23 08:58 error.log.2019_10_23.01
-rw-r--r--. 1 root   root        162 Oct 23 09:03 lsrestart.log
-rw-r--r--. 1 nobody nobody    24406 Oct 23 09:08 error.log.2019_10_23.02
-rw-r--r--. 1 nobody nobody 10486279 Oct 27 20:26 error.log.2019_10_27
-rw-r--r--. 1 nobody nobody  3499801 Oct 29 13:34 error.log

5.7) Impression de la version finale

Nous pouvons utiliser –version pour imprimer la version de la commande tail.


# tail --version
tail (GNU coreutils) 8.22
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Paul Rubin, David MacKenzie, Ian Lance Taylor,
and Jim Meyering.
#

5.8) sortie détaillée de la commande tail

Si nous utilisons l'option détaillée, la sortie aura un en-tête avec le nom du fichier.


# tail -v -n 2 error.log
==> error.log <==
2019-10-29 13:39:30.769561 [INFO] [16169] [APVH_javastr_Sulsphp73:] add child process pid: 24454, procinfo: 0x405b840
2019-10-29 13:39:30.769618 [INFO] [16169] [APVH_javastr_Sulsphp73:]: unlocked pid file [/tmp/lshttpd/APVH_javastr_Suphp73.sock.pid].
#

6. Conclusion

La commande Linux tail est très utile pour déboguer les messages du journal en temps réel. C'est un excellent outil permettant aux développeurs de travailler avec des fichiers journaux.

Référence :Page Wikipédia


Linux
  1. Commande mv sous Linux :7 exemples essentiels

  2. ln Exemples de commandes sous Linux

  3. Exemples de commandes gzip sous Linux

  4. plus d'exemples de commandes sous Linux

  5. file Exemples de commandes sous Linux

5 exemples pratiques de la commande Tail sous Linux

Exemples de commande Linux cat

Exemples de commande Linux gzip

Exemples de commandes dumpe2fs sous Linux

Exemples de commandes fsck sous Linux

Exemples de commandes mkfs sous Linux