La commande `less` offre la possibilité de naviguer à travers un document texte, en présentant le contenu par écrans successifs. Bien qu’elle puisse sembler simple au premier abord, elle recèle des fonctionnalités bien plus avancées qu’il n’y paraît.
Genèse de `less`
Tout dans l’univers Linux et Unix a son histoire. Le programme `less` est dérivé du programme `more`, initialement publié en 1978 avec la version 3.0 de la Berkeley Software Distribution (3.0BSD). `more` permettait de visualiser un fichier texte progressivement, un écran à la fois.
Face à l’impossibilité des premières versions de `more` de remonter dans un fichier, Mark Nudelman fut incité à développer `less` pour pallier ce manque. Ce travail débuta en 1983, et la première version fut diffusée en dehors de son entreprise en 1985. Depuis octobre 2019, il assure encore la maintenance de `less`.
Il est légitime de se demander s’il existe un utilisateur Linux qui n’a jamais utilisé `less`. Même s’il ne l’a pas utilisé pour explorer un fichier texte spécifique, il y a de fortes chances qu’il ait eu recours à la commande `man`. Et `man` fait appel à `less` en arrière-plan pour afficher les pages de manuel.
Cette commande est dotée d’un grand nombre de fonctionnalités pratiques.
Pourquoi `less` est supérieur à `more`
`less` a été continuellement enrichi au fil du temps. Il offre un nombre impressionnant d’options en ligne de commande et de raccourcis clavier. Une simple comparaison entre la page de manuel de `less` et la page de manuel de `more` révèle la supériorité incontestable de `less`.
`more` a certes corrigé son incapacité initiale à remonter dans le texte, mais uniquement pour les fichiers. Il ne peut pas remonter lors d’une entrée via un pipeline. C’est possible avec `less`.
Grâce à sa flexibilité pour la navigation dans les fichiers, la gestion de plusieurs fichiers, la recherche de texte, la création de signets et la gestion des entrées par pipeline, `less` l’emporte haut la main. Préférez donc `less` à `more`.
Ouvrir un fichier avec `less`
Pour charger un fichier dans `less`, spécifiez son nom sur la ligne de commande :
less Dr-Jekyll-and-Mr-Hyde-001.txt
Le fichier est alors chargé et affiché. Le début du fichier est visible dans la fenêtre du terminal. Vous pouvez utiliser la molette de votre souris pour parcourir le texte dans les deux directions.
Sur le clavier, la barre d’espace ou la touche Page suivante permet d’avancer dans le texte, un écran à la fois.
La touche Page précédente permet de remonter dans le fichier. Les touches Début et Fin vous mènent directement au début et à la fin du document texte, respectivement.
Le nom du fichier apparaît en bas à gauche de l’écran. Lorsque vous commencez à vous déplacer dans le fichier, cette ligne est effacée. Elle est utilisée pour afficher des messages et vous permettre de saisir des commandes.
Appuyez sur « q » pour quitter `less`.
Afficher les numéros de ligne
Pour que `less` numérote les lignes du fichier texte, utilisez l’option `-N` (numéros de ligne).
less -N Dr-Jekyll-and-Mr-Hyde-001.txt
Les numéros de ligne peuvent être utiles pour naviguer vers des lignes ou sections spécifiques dans des fichiers logs ou d’autres types de fichiers qui ne sont pas rédigés sous forme de texte standard.
Effectuer une recherche avec `less`
Pour effectuer une recherche dans le texte du fichier, appuyez sur « / », puis saisissez votre expression de recherche. La recherche est sensible à la casse. Votre expression de recherche s’affiche sur la dernière ligne de l’écran. Appuyez sur « Entrée » pour lancer la recherche.
Dans cet exemple, le terme recherché est « Enfield », visible en bas de l’écran.
La recherche s’effectue de la page actuelle jusqu’à la fin du fichier texte. Pour effectuer une recherche sur l’ensemble du fichier, placez-vous en haut du fichier avant de lancer la recherche.
Si aucune correspondance n’est trouvée, un message vous l’indiquera. Si une correspondance est trouvée, l’affichage se déplace pour présenter l’élément trouvé.
Pour trouver l’élément correspondant suivant, appuyez sur « n ». Pour rechercher l’élément correspondant précédent, appuyez sur « N ».
Pour effectuer une recherche en arrière, de votre position actuelle dans le fichier vers le début du fichier, appuyez sur la touche « ? » et saisissez votre terme de recherche. Pour trouver l’élément correspondant suivant, appuyez sur « n ». Pour rechercher l’élément correspondant précédent, appuyez sur « N ».
Notez que lorsque vous effectuez une recherche en arrière, l’élément correspondant suivant (trouvé avec « n ») est le suivant le plus proche du début du fichier, et le « N » pour l’élément correspondant précédent recherche un élément correspondant plus proche de la fin du fichier. Autrement dit, « n » et « N » inversent leur direction de recherche lorsque vous effectuez une recherche en arrière.
Ouvrir un fichier avec un terme de recherche
L’option `-p` (motif) permet à `less` de rechercher un terme spécifique dans le fichier texte et d’afficher la page contenant le premier élément correspondant, au lieu d’afficher la première page du fichier. Sauf, bien sûr, si l’élément recherché se trouve sur la première page du fichier.
Notez qu’il n’y a pas d’espace entre le `-p` et le terme de recherche.
less -pEnfield Dr-Jekyll-and-Mr-Hyde-001.txt
Le fichier s’affiche avec le premier terme de recherche correspondant mis en surbrillance.
Navigation dans `less` : les touches essentielles
Utilisez ces touches pour naviguer et effectuer des recherches dans le fichier texte.
Avancer d’une ligne : flèche vers le bas, Entrée, e ou j
Reculer d’une ligne : flèche vers le haut, y ou k
Avancer d’une page : barre d’espace ou Page suivante
Reculer d’une page : Page précédente ou b
Faire défiler vers la droite : Flèche droite
Faire défiler vers la gauche : Flèche gauche
Aller au début du fichier : Début ou g
Aller à la fin du fichier : Fin ou G
Aller à une ligne spécifique : saisissez le numéro de ligne, puis appuyez sur « g »
Aller à un pourcentage dans le fichier : saisissez le pourcentage, puis appuyez sur « p » ou « % ». (Vous pouvez même saisir des valeurs décimales. Par exemple, pour passer à 27,2 % du fichier, saisissez « 27,2 », puis appuyez sur « p » ou « % ». Pourquoi utiliser des décimales ? Honnêtement, je n’en ai aucune idée.)
Recherche avant : appuyez sur « / » et saisissez votre recherche, par exemple « /Jekyll », puis appuyez sur Entrée
Recherche arrière : appuyez sur « ? » et saisissez votre recherche, par exemple « ?Hyde », puis appuyez sur Entrée
Élément de recherche correspondant suivant : n
Élément de recherche correspondant précédent : N
Quitter : q
Suppression des lignes vides
L’option `-s` (squeeze blank lines) permet de réduire une série de lignes vides à une seule ligne vierge.
Notre fichier d’exemple contient plusieurs lignes vides consécutives. Voyons comment `less` les traite avec l’option `-s` :
less -s Dr-Jekyll-and-Mr-Hyde-001.txt
Toutes les lignes vierges doubles (ou plus) ont été remplacées par une seule ligne vierge.
Afficher plusieurs fichiers
`less` peut ouvrir plusieurs fichiers. Vous pouvez naviguer d’un fichier à l’autre, `less` conservant votre position dans chacun d’eux.
less Dr-Jekyll-and-Mr-Hyde-001.txt Dr-Jekyll-and-Mr-Hyde-002.txt
Les fichiers sont ouverts et le premier s’affiche. Vous voyez quel fichier vous visualisez et combien de fichiers ont été chargés, comme indiqué ci-dessous.
Pour afficher le fichier suivant, appuyez sur « : », puis sur « n ».
L’affichage basculera sur le deuxième fichier, et les informations sur la ligne du bas seront mises à jour pour indiquer que vous visualisez le deuxième fichier, comme indiqué ci-dessous.
Pour passer au fichier précédent, saisissez « : », puis appuyez sur « p ».
Utiliser des marques
`less` permet de définir des marques pour revenir facilement à des passages spécifiques. Chaque marque est représentée par une lettre. Pour définir une marque sur la ligne la plus haute affichée, appuyez sur « m », puis sur la lettre de votre choix, par exemple « a ».
Lorsque vous appuyez sur « m », la ligne inférieure de l’écran affiche une invite en attendant que vous appuyiez sur une touche alphabétique.
Dès que vous appuyez sur une lettre, l’invite disparaît.
Depuis n’importe quel autre emplacement dans le fichier, vous pouvez facilement revenir à une marque en appuyant sur l’apostrophe (ou guillemet simple) « ‘ », puis sur la lettre de la marque vers laquelle vous souhaitez retourner. Lorsque vous appuyez sur la touche « ‘ », vous êtes invité à indiquer la marque à atteindre.
Appuyez sur la lettre de la marque et cette partie du fichier texte s’affichera.
Utilisation de l’entrée canalisée avec `less`
`less` peut afficher les informations fournies sous forme de flux de texte canalisé, aussi facilement que s’il s’agissait d’un fichier.
La commande `dmesg` affiche les messages du tampon d’anneau du noyau. Nous pouvons rediriger la sortie de `dmesg` vers `less` en utilisant la commande suivante :
dmesg | less
La sortie de `dmesg` s’affiche.
Vous pouvez parcourir et effectuer des recherches dans l’entrée canalisée comme s’il s’agissait d’un fichier. Pour voir les messages les plus récents, appuyez sur « Fin » pour aller au bas du fichier.
Au fur et à mesure que de nouveaux messages arrivent, vous devez continuer à appuyer sur « Fin » pour que `less` affiche le bas du fichier. Ce n’est pas très pratique. Pour que `less` affiche toujours le bas du texte, même lorsque de nouvelles données sont ajoutées, utilisez l’option `+F` (avant). Notez l’utilisation de `+` et non de `-` comme indicateur d’option.
dmesg | less +F
L’indicateur d’option `+` indique à `less` de traiter l’option comme si vous aviez utilisé cette commande dans `less`. Ainsi, si vous avez oublié d’utiliser l’option `+F`, appuyez sur « F » à l’intérieur de `less`.
`less` affiche le bas du texte, soit les messages les plus récents de `dmesg`, et indique qu’il est en attente de nouvelles données. Lorsque d’autres messages du noyau apparaissent, l’affichage défile afin que vous puissiez toujours voir les messages les plus récents.
Dans ce mode, vous ne pouvez pas faire défiler ni effectuer de pagination, car il est dédié à l’affichage du bas du flux de texte. Pour quitter ce mode, appuyez sur Ctrl+c, vous reviendrez alors au mode interactif habituel de `less`.
Modifier des fichiers avec `less`
Vous pouvez éditer des fichiers avec `less`, enfin, en quelque sorte. Cette commande ne modifie pas les fichiers, mais si vous saisissez « v » lorsque vous visualisez un fichier, le fichier est transféré à votre éditeur par défaut. Lorsque vous quittez l’éditeur, vous revenez à `less`.
Appuyez sur « v » lors de la visualisation d’un fichier avec `less` :
Le fichier est chargé dans l’éditeur par défaut, ici `nano` :
Lorsque vous fermez l’éditeur, vous êtes redirigé vers `less`.
En résumé
Aussi paradoxal que cela puisse paraître, dans ce cas, `less` est supérieur à `more`.