9 exemples pratiques de la commande Tail sous Linux

En tant qu’utilisateurs de Linux, nous travaillons souvent avec des processus Linux en arrière-plan de longue durée, appelés démons ou services. Certains exemples courants de services sont Secure Shell (sshd), Network Manager (networkd), Volume Manager (LVM), Cron, et la liste continue.

De nombreuses fois, nous devons surveiller les journaux de ces services pour déboguer les problèmes système. Cependant, l’un des principaux défis est que ces services génèrent beaucoup de journaux et la plupart du temps, les parcourir devient fastidieux, c’est là que nous pouvons utiliser la commande tail.

La commande tail est une utilitaire en ligne de commande, similaire à la commande head, qui lit un fichier et affiche les 10 dernières lignes (contenu) d’un ou plusieurs fichiers en sortie standard.

Dans ce guide pratique, nous apprendrons sur la commande tail. À la fin de ce guide, les utilisateurs de ligne de commande Linux pourront utiliser la commande tail efficacement.
Table des matières

Syntaxe de la commande tail

La syntaxe de la commande tail est similaire à d’autres commandes Linux:

$ tail [OPTIONS] [FILE-1] [FILE-2] ...

1. Afficher les 10 dernières lignes d’un fichier sous Linux

Par défaut, la commande tail affiche les 10 dernières lignes du fichier donné comme illustré ci-dessous.

$ tail /var/log/secure


Apr  2 14:17:24 TecMint sshd[201178]: Disconnected from user tecmint 192.168.0.162 port 59774
Apr  2 14:17:24 TecMint sshd[201165]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 14:29:12 TecMint sshd[201366]: Accepted password for tecmint from 192.168.0.162 port 56378 ssh2
Apr  2 14:29:12 TecMint systemd[201371]: pam_unix(systemd-user:session): session opened for user tecmint(uid=1002) by (uid=0)
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session opened for user tecmint(uid=1002) by (uid=0)
Apr  2 14:29:12 TecMint sshd[201382]: Received disconnect from 192.168.0.162 port 56378:11: disconnected by user
Apr  2 14:29:12 TecMint sshd[201382]: Disconnected from user tecmint 192.168.0.162 port 56378
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

Ici, nous pouvons voir que la commande ci-dessus montre les dix dernières lignes du fichier /var/log/secure.

2. Afficher les N dernières lignes d’un fichier sous Linux

Dans le dernier exemple, la commande affiche les 10 dernières lignes du fichier donné. Cependant, nous pouvons utiliser l’option -n qui nous permet de limiter le nombre de lignes à afficher à l’écran comme illustré.

$ tail -n 3 /var/log/secure

Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

Dans cet exemple, nous pouvons voir que maintenant la commande affiche uniquement les trois dernières lignes au lieu des dix lignes.

3. Ignorer les N premières lignes d’un fichier sous Linux

Ici, nous pouvons utiliser le symbole plus (+) avec l’option -n, ce qui nous permet de contrôler le point de départ à partir du fichier donné.

Pour comprendre cela, utilisons la valeur +5 pour démarrer la sortie à partir de la 5ème ligne:

$ tail -n +5 /var/log/secure

Apr  2 14:17:24 TecMint sshd[201178]: Disconnected from user tecmint 192.168.0.162 port 59774
Apr  2 14:17:24 TecMint sshd[201165]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 14:29:12 TecMint sshd[201366]: Accepted password for tecmint from 192.168.0.162 port 56378 ssh2
Apr  2 14:29:12 TecMint systemd[201371]: pam_unix(systemd-user:session): session opened for user tecmint(uid=1002) by (uid=0)
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session opened for user tecmint(uid=1002) by (uid=0)
Apr  2 14:29:12 TecMint sshd[201382]: Received disconnect from 192.168.0.162 port 56378:11: disconnected by user
Apr  2 14:29:12 TecMint sshd[201382]: Disconnected from user tecmint 192.168.0.162 port 56378
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

4. Afficher les derniers N caractères du fichier

De manière similaire aux lignes, nous pouvons également utiliser la commande pour afficher les derniers N caractères du fichier en utilisant l’option -c comme indiqué ci-dessous:

$ tail -c 7 /var/log/secure

(uid=0)

Dans cet exemple, nous pouvons voir que la commande affiche les sept derniers caractères ASCII du fichier donné.

5. Supprimer les premiers N caractères du fichier

De manière similaire, nous pouvons utiliser le symbole plus (+) avec l’option -c pour sauter le premier caractère N. Ainsi, sautons la première ligne du fichier en utilisant la commande ci-dessous:

$ tail -c +5 /var/log/secure

Apr  2 03:02:59 TecMint sudo[162801]: root : TTY=pts/2 ; PWD=/root ; USER=root ; COMMAND=/bin/dnf install R
Apr  2 03:02:59 TecMint sudo[162801]: pam_unix(sudo:session): session opened for user root(uid=0) by root(uid=0)
Apr  2 03:03:02 TecMint sudo[162801]: pam_unix(sudo:session): session closed for user root
Apr  2 03:11:17 TecMint groupadd[163602]: group added to /etc/group: name=avahi, GID=70
Apr  2 03:11:18 TecMint groupadd[163602]: group added to /etc/gshadow: name=avahi
Apr  2 03:11:18 TecMint groupadd[163602]: new group: name=avahi, GID=70
Apr  2 03:11:19 TecMint useradd[163610]: new user: name=avahi, UID=70, GID=70, home=/var/run/avahi-daemon, shell=/sbin/nologin, from=none
Apr  2 03:13:41 TecMint groupadd[163704]: group added to /etc/group: name=colord, GID=986
Apr  2 03:13:41 TecMint groupadd[163704]: group added to /etc/gshadow: name=colord

Ici, nous pouvons voir que la commande affiche toutes les lignes sauf la première ligne.

6. Afficher le nom du fichier dans l’en-tête

Nous pouvons demander à la commande tail d’afficher le nom du fichier actuel en tant qu’en-tête d’affichage, ce qui est pratique lorsque l’on travaille avec plusieurs fichiers.

Alors, utilisons l’option -v pour activer l’en-tête d’affichage :

$ tail -n 3 -v /var/log/secure

==>/var/log/secure <==
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

7. Afficher le nom du fichier en tant qu’en-tête dans plusieurs fichiers

Tout comme n’importe quelle autre commande de traitement de fichier, nous pouvons également utiliser plusieurs fichiers avec la commande tail. Dans de tels cas, l’en-tête d’affichage est utilisé pour séparer le contenu du fichier.

$ tail -n 3 -v /var/log/secure /var/log/secure-20230402

==> /var/log/secure <==
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

==> /var/log/secure-20230402 <==
Mar 31 03:50:53 TecMint groupadd[156163]: new group: name=docker, GID=987
Mar 31 04:46:11 TecMint sshd[159403]: Accepted password for root from 192.168.0.162 port 46480 ssh2
Mar 31 04:46:11 TecMint sshd[159403]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

Dans la sortie ci-dessus, nous pouvons voir l’en-tête d’affichage pour chaque fichier.

8. Comment désactiver l’en-tête d’affichage dans un fichier

Dans l’exemple précédent, nous avons vu que la commande active l’en-tête d’affichage lorsqu’elle travaille avec plusieurs fichiers. Cependant, nous pouvons supprimer ce comportement par défaut en utilisant l’option -q.

$ tail -q -n 3 /var/log/secure /var/log/secure-20230402

Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Mar 31 03:50:53 TecMint groupadd[156163]: new group: name=docker, GID=987
Mar 31 04:46:11 TecMint sshd[159403]: Accepted password for root from 192.168.0.162 port 46480 ssh2
Mar 31 04:46:11 TecMint sshd[159403]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

Ici, nous pouvons voir que maintenant la commande affiche le contenu du fichier les uns après les autres sans aucun en-tête d’affichage.

9. Comment surveiller un fichier pour les modifications

Jusqu’à présent, nous avons vu que la commande tail se termine une fois qu’elle a traité le nombre de lignes ou de caractères requis. Cependant, parfois nous voulons aussi voir les journaux nouvellement générés.

Dans de tels cas, nous pouvons utiliser l’option -f avec la commande, ce qui nous permet de surveiller le fichier pour les changements en temps réel.

Pour comprendre cela, commençons par exécuter la commande ci-dessous dans le premier terminal:

$ tail -f /var/log/messages


Apr  2 15:13:28 TecMint NetworkManager[741]:   [1680462808.8441] policy: set-hostname: current hostname was changed outside NetworkManager: 'TecMint'
Apr  2 15:13:28 TecMint systemd[1]: Starting Network Manager Script Dispatcher Service...
Apr  2 15:13:28 TecMint systemd[1]: Started Network Manager Script Dispatcher Service.
Apr  2 15:13:37 TecMint arpwatch[11001]: rename arp.dat -> arp.dat-: Operation not permitted
Apr  2 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully.
Apr  2 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: Deactivated successfully.
Apr  2 15:18:03 TecMint systemd[1]: Starting dnf makecache...
Apr  2 15:18:03 TecMint dnf[202235]: Metadata cache refreshed recently.
Apr  2 15:18:03 TecMint systemd[1]: dnf-makecache.service: Deactivated successfully.
Apr  2 15:18:03 TecMint systemd[1]: Finished dnf makecache.

Voici, nous pouvons voir que la commande attend indéfiniment après avoir affiché les dix dernières lignes:

Ensuite, ouvrons un autre terminal et ajoutons du texte au fichier numbers-2.txt:

$ echo "View Logs in Real-Time" >> /var/log/messages

Maintenant, passons au premier terminal pour voir le texte nouvellement ajouté:

$ tail -f /var/log/messages

Apr  2 15:13:28 TecMint NetworkManager[741]:   [1680462808.8441] policy: set-hostname: current hostname was changed outside NetworkManager: 'TecMint'
Apr  2 15:13:28 TecMint systemd[1]: Starting Network Manager Script Dispatcher Service...
Apr  2 15:13:28 TecMint systemd[1]: Started Network Manager Script Dispatcher Service.
Apr  2 15:13:37 TecMint arpwatch[11001]: rename arp.dat -> arp.dat-: Operation not permitted
Apr  2 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully.
Apr  2 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: Deactivated successfully.
Apr  2 15:18:03 TecMint systemd[1]: Starting dnf makecache...
Apr  2 15:18:03 TecMint dnf[202235]: Metadata cache refreshed recently.
Apr  2 15:18:03 TecMint systemd[1]: dnf-makecache.service: Deactivated successfully.
Apr  2 15:18:03 TecMint systemd[1]: Finished dnf makecache.
View Logs in Real-Time

Ici, nous pouvons voir que la commande tail affiche le texte nouvellement ajouté.

Connaissez-vous un autre meilleur exemple de la commande tail dans Linux ? Faites-nous part de vos avis dans les commentaires ci-dessous.

Source:
https://www.tecmint.com/tail-command-linux/