Linux : comment afficher les X premières lignes d’un fichier ?
I. Présentation
Sur un serveur Linux, il n'est pas rare de croiser des fichiers de configuration à rallonge ou des fichiers de logs très conséquents. Même si l'on s'intéresse souvent aux événements les plus récents, situés à la fin du fichier, il n'est rare d'avoir besoin de consulter les 10 ou les 20 premières lignes d'un fichier. Comment faire sans avoir à ouvrir le fichier entièrement (ce qui nécessite de le charger) ? C'est ce que nous allons voir dans ce tutoriel.
II. Afficher les 10 premières lignes d'un fichier
La commande "head" est intégrée à de nombreuses distributions Linux, notamment Debian que j'utilise pour cet exemple, et elle permet d'afficher le contenu d'un fichier en commençant par le début (d'où le nom de ce programme, probablement). Ainsi, si l'on appelle la commande head suivie d'un nom de fichier, sans préciser d'options, les 10 premières lignes du fichier s'affichent à l'écran. Voici un exemple avec le fichier "/var/log/apache2/access.log" :
head /var/log/apache2/access.log
Ce qui donne :
Pour utiliser cette commande, il n'est pas utile d'avoir un accès root sur la machine, à moins que vous cherchiez à lire le contenu d'un fichier protégé auquel cas il sera nécessaire d'avoir suffisamment de privilèges. En préfixant la commande par "sudo", ça devrait aller si votre utilisateur est autorisé.
Maintenant, si l'on veut avoir plus de 10 lignes, admettons 20 lignes, comment faire ? Ce n'est pas beaucoup plus compliqué puisqu'il suffit de spécifier le nom de ligne sous le format "-X" où X représente le nombre de lignes à afficher. Voici comment afficher les 20 premières lignes du fichier access.log :
sudo head -20 /var/log/apache2/access.log
En fait, il y a une autre écriture possible à partir de l'option "-n" :
sudo head -n 20 /var/log/apache2/access.log
Ce que j'aime bien avec la commande head, c'est que l'on peut afficher le contenu de plusieurs fichiers en même temps. Pour comparer les données issues de plusieurs fichiers de logs ou plusieurs fichiers de configuration, ça peut être intéressant. Pour cela, il suffit de préciser les noms de fichiers à la suite (séparé par un espace) :
sudo head /var/log/apache2/access.log /var/log/apache2/error.log
Peut-on récupérer la valeur de la première ligne et la stocker dans une variable ?
La réponse est oui ! Et cela peut s'avérer utile dans un script, d'autant plus dans le cas d'un fichier de configuration. La syntaxe est facile à trouver pour afficher la première ligne :
sudo head -n 1 /var/log/apache2/access.log
Dans un script, on pourra stocker la valeur de cette ligne dans une variable. Voici un exemple avec une variable nommée "log" :
log=$(sudo head -n 1 /var/log/apache2/access.log)
Désormais, vous savez comment afficher les X premières lignes d'un fichier à l'aide de la commande head ! Elle est très pratique et facile à utiliser, même si l'on peut également effectuer la même chose avec awk et sed.