Commande head de Linux
La commande head de Linux, tout comme la commande tail de Linux, est un des outils essentiels de la ligne de commande. La fonction principale de cette commande est d’afficher le début d’un fichier (texte), autrement dit de limiter l’affichage d’une commande Linux à un certain nombre de lignes.
La commande head de Linux appartient aux « GNU Core Utilities » (Coreutils). Il s’agit d’un ensemble de commandes de base en ligne de commande. Conformément à la philosophie Unix, les commandes utilisent le texte comme format universel d’entrée et de sortie. Les Coreutils sont publiés sous licence open source et sont disponibles pour un grand nombre de systèmes d’exploitation différents.
Finalité de la commande head de Linux
La commande head de Linux est utilisée pour limiter l’affichage du texte sur la ligne de commande. Mais pourquoi cela est-il utile ou nécessaire ? Pour répondre à cette question, examinons le fonctionnement général de la ligne de commande Linux. La plupart des commandes Linux acceptent le texte comme entrée et délivrent, en revanche, le texte comme sortie. La source ou la cible d’une commande peuvent être :
- Des fichiers : notamment les fichiers texte au format ASCII. Les fichiers binaires tels que les images JPEG ou les documents Word présentent moins d’intérêt ici.
- L’entrée et la sortie standard : texte qui est affiché dans le terminal à l’utilisateur, ou entré à cet endroit par ce dernier.
- Ce que l’on appelle les « pipes » (ou encore « tubes » ou « pipelines ») : des concaténations de plusieurs commandes Linux. La sortie texte d’une commande est transmise comme entrée texte à la commande suivante.
Tenons aussi compte du fait que les fichiers peuvent contenir des quantités incommensurables de texte. Par exemple, un fichier de plusieurs gigabytes contient des milliards de signes ! Par conséquent, il est souvent utile de limiter la quantité de texte affichée ou de n’afficher que des lignes ou quantités données de texte. Voici un aperçu des commandes Linux courantes pour afficher des fichiers textes :
- Linux-CAT : afficher le fichier entier. L’affichage de gros fichiers submerge la ligne de commande.
- Linux-LESS : afficher le fichier entier page par page. Pas très pratique pour les gros fichiers.
- Linux-HEAD : afficher le début d’un fichier ou limiter l’affichage à une certaine zone.
- Linux-TAIL : afficher la fin d’un fichier ou restreindre l’affichage à une certaine zone.
Si nos explications vous semblent quelque peu abstraites jusqu’à présent, regardez les exemples pratiques ci-dessous. Ceux-ci doivent permettre de saisir de manière concrète les idées présentées.
Si nos explications vous semblent quelque peu abstraites jusqu’à présent, regardez les exemples pratiques ci-dessous. Ceux-ci doivent permettre de saisir de manière concrète les idées présentées.
Appel de la commande head de Linux sur la ligne de commande
La commande head de Linux est appelée sur la ligne de commande. Le nom de la commande, suivi de paramètres facultatifs, est alors saisi. L’appel se termine par le nom ou le chemin d’accès d’un ou plusieurs fichiers. Pour commencer, regardons comment écrire un cas général :
head [options] <fichiers>
Sans options, l’appel le plus simple de la commande head de Linux se fait selon le modèle suivant :
head <fichier>
Appelée de cette manière, la commande head de Linux affiche les dix premières lignes du fichier spécifié. De cette façon, on peut jeter un coup d’œil rapide sur le début d’un fichier. Souvent, cela vous indique sur quoi porte le fichier.
Dans l’usage quotidien, la commande head de Linux est souvent appelée avec l’option « -n » Avec le nombre qui le suit, on détermine le nombre de lignes à afficher. Prenons deux exemples. L’appel suivant n’affiche que la première ligne d’un fichier :
head -n 1 <fichier>
Nous pouvons utiliser le même schéma pour afficher les 100 premières lignes d’un fichier :
head -n 100 <fichier>
Options de la commande head de Linux
Par convention, la commande head de Linux est contrôlée par des paramètres optionnels. Dans le cadre des GNU Coreutils, il existe une forme longue pour chaque option ; pour les options les plus fréquemment utilisées, il existe également une forme courte, souvent déterminée historiquement. Le tableau ci-dessous donne un aperçu des options les plus utiles :
Option (forme courte / forme longue) | Explication |
---|---|
-n / --lines | Limiter l’affichage aux n premières lignes / supprimer l’affichage des n dernières lignes |
-c / --bytes | Limiter l’affichage aux n premiers bytes / supprimer l’affichage des n derniers bytes |
-q / --quiet, --silent | Supprimer l’affichage des noms de fichiers lorsqu’il y a plusieurs fichiers |
-v / --verbose | Forcer l’affichage des noms de fichiers lorsqu’il y a plusieurs fichiers |
--help | Afficher les informations d’aide de la commande |
Dans les exemples suivants, nous utilisons les options dans leur forme courte ('-n' au lieu de '--lines', etc.). Vous rencontrerez souvent cet usage lorsque vous lirez d’autres documentations ou exemples de code.
Disgression : comment comprendre les lignes et les caractères ?
Avant d’examiner les exemples pratiques, quelques mots sur la terminologie. Que voulons-nous dire en réalité lorsque nous parlons de « lignes » et de « caractères » ? De manière purement intuitive, vous pouvez certainement donner une réponse à cette question. Mais dans l’environnement numérique strictement réglementé, nous devons le savoir très précisément.
En interne, un fichier texte est une chaîne de caractères unique et continue. La fin de chaque ligne est simplement marquée par un caractère appelé « saut de ligne ». Le caractère utilisé peut être différent en fonction du système d’exploitation, ce qui peut donner lieu à toutes sortes de problèmes divers. Sous Linux, le caractère « Linefeed » ('LF') marque le saut de ligne.
Lorsque l’option '-c' / '--bytes' est utilisée, il est supposé qu’un byte correspond exactement à un caractère. Cela fonctionne pour le jeu de caractères ASCII, mais peut poser des problèmes dans d’autres situations. Le jeu de caractères Unicode largement utilisé aujourd’hui est un codage de caractères « multi-bytes ». Pour représenter un seul caractère, plusieurs bytes peuvent être utilisés. Si vous traitez des fichiers texte Unicode avec la commande head de Linux, de curieux effets secondaires peuvent se produire. Par exemple, l’utilisation de l’option '-c' peut faire en sorte qu’un tréma (par exemple « ü ») devienne la voyelle correspondante (« u »).
Exemples d’utilisation de la commande head de Linux
Pour rendre les exemples suivants concrètement compréhensibles, nous utilisons le texte de la Déclaration universelle des droits de l’homme (« Déclaration universelle des droits de l’homme », DUDH). Avec des traductions dans plus de 460 langues, c’est l’un des textes les plus traduits de l’histoire de l’humanité. Nous téléchargeons le texte de la déclaration avec la commande linux-curl-command et le sauvegardons dans un fichier 'udhr.txt' sur le bureau. À cette fin, exécutez le code suivant dans l’interface en ligne de commande :
curl https://www.unicode.org/udhr/d/udhr_eng.txt> ~/Bureau/udhr.txt
Afficher seulement la première ligne avec la commande head de Linux
Nous avons déjà présenté le modèle pour l’affichage de la première ligne d’un fichier texte. Voici l’appel approprié basé sur notre exemple concret :
head -n 1 ~/Desktop/gg.txt
L’affichage de la première ligne est particulièrement intéressant pour l’affichage de ce que l’on appelle le « Shebang » d’un fichier script. Il contient une indication de l’interpréteur utilisé pour exécuter le script et son chemin d’accès.
Afficher tout jusqu’à la dernière ligne avec la commande head de Linux
De manière analogue à la première ligne, la commande head de Linux peut également être utilisée pour afficher le texte entier jusqu'à la dernière ligne. Pour ce faire, nous utilisons l’option '-n' et faisons précéder l’argument d’un signe moins :
head -n -1 ~/Desktop/gg.txt
Combiner la commande head de Linux avec la commande tail pour afficher des zones de texte spécifiques
Maintenant, que se passe-t-il si nous voulons seulement sortir le préambule de la DUDH des lignes 9 à 18 ? Pour ce faire, nous avons recours à la commande sœur de la commande head de Linux. La commande tail affiche la fin d’un fichier texte de manière analogue à la commande head de Linux. Si nous combinons les deux commandes avec le symbole de pipe '|', nous pouvons couper une zone définie dans un texte :
head -n 18 ~/Desktop/udhr.txt | tail -n 10
Il est donc également possible d’éditer uniquement une certaine ligne. Pour cela, nous utilisons la commande tail avec l’option '-n 1'. Par exemple, pour éditer uniquement la ligne 28 « Tout individu a droit à la vie, à la liberté et à la sûreté de sa personne », nous avons recours à la commande suivante.
head -n 28 ~/Desktop/udhr.txt | tail -n 1
Comme vous pouvez le voir, la ligne entière est éditée. Pour afficher uniquement la partie jusqu’à « security », nous ajoutons un autre appel « piped » à la commande head de Linux. De plus, nous utilisons l’option '-c' et essayons différentes valeurs comme arguments jusqu’à ce que nous coupions exactement la bonne zone. Dans ce cas, nous n’avons besoin que des 62 premiers caractères :
head -n 28 ~/Desktop/udhr.txt | tail -n 1 | head -c 62
Il peut être plus intuitif de compter le nombre de caractères à couper à compter de la fin. Cela est également possible en faisant précéder l’argument de l’option '-c' d’un signe moins. La sortie de la commande reste la même :
head -n 28 ~/Desktop/udhr.txt | tail -n 1 | head -c -12
Enfin, nous souhaitons supprimer les espaces de tête. Vous pouvez probablement déjà deviner : pour y parvenir, nous ajoutons un autre appel à la commande head. Ici, nous fournissons l’argument de l’option '-c' avec un signe plus. De manière analogue au signe moins de la commande head de Linux, nous inversons ainsi la signification de l’option : au lieu de limiter la sortie aux cinq derniers caractères comme d'habitude, nous limitons la sortie au reste à partir du cinquième caractère de tête :
head -n 28 ~/Desktop/udhr.txt | tail -n 1 | head -c -12 | tail -c +6
Vous vous demandez peut-être maintenant si l’effort de construire une commande aussi complexe en vaut vraiment la peine. Ou existe-t-il un moyen plus simple ? En fait, il ne s’agit que d’un exemple. L’opération peut être résolue de manière plus élégante avec la sed-command. Pour les gros fichiers, cependant, la commande head de Linux est plus rapide que la commande Sed.
Filtrer l’affichage de la commande head de Linux avec la commande grep
Vous avez déjà vu comment la commande head de Linux peut être combinée avec la commande head. Une autre combinaison courante consiste à filtrer le texte de sortie avec la commande grep. Ainsi, nous pouvons limiter la sortie aux lignes qui contiennent le terme recherché. Ici, nous sortons les lignes des trente premières lignes du texte de la DUDH qui contiennent le mot « personne » :
head -n 30 ~/Desktop/udhr.txt | grep personne
Traiter plusieurs fichiers avec la commande head de Linux
Pour l’instant, nous avons utilisé la commande head de Linux pour traiter un seul fichier. Cependant, il est possible d’indiquer plusieurs fichiers lors de l’appel. Pour cela, nous listons explicitement plusieurs noms de fichiers ou chemins. Ou bien nous indiquons un répertoire entier comme source de la commande avec des fichiers ou une chaîne de recherche. Cette dernière est présentée ici à titre d’exemple en utilisant les fichiers de configuration du répertoire système '/etc/'. Les fichiers ont l’extension '.conf', que nous indiquons comme chaîne de recherche '*.conf' :
head -n 1 /etc/*.conf
Pour supprimer l’affichage des noms de fichiers lors du traitement de plusieurs fichiers, nous utilisons l’option '-q' :
head -q -n 1 /etc/*.conf
De même, nous pouvons utiliser l’option '-v' pour forcer l’affichage des noms de fichiers. Ceci est utile si un seul fichier correspond à la chaîne de recherche :
head -v /etc/host*.conf
Lister les cinq fichiers les plus récemment modifiés avec la commande head de Linux
Sous Linux, la commande ls est utilisée pour lister les fichiers et les répertoires. Avec l’option '-t', nous trions la liste par ordre décroissant selon la date de la dernière modification. De plus, pour que la liste soit coupée après cinq entrées, nous ajoutons un appel à la commande head de Linux en tant que pipe :
ls -t | head -n 5
Afficher un hachage aléatoire de longueur donnée avec la commande head de Linux
La commande Linux 'sha512sum' crée un hachage d’une longueur de 128 caractères. Pour comparer deux hachages à l’œil nu, il n’est souvent pas nécessaire de regarder l’ensemble du hachage. Par exemple, il peut être suffisant d’examiner seulement les huit premiers caractères. Vous connaissez peut-être ce modèle grâce aux commits Git. Pour cela, nous utilisons la commande head de Linux avec l’option '-c'. Comme source de données, nous utilisons la fonction bash '$RANDOM', qui restitue un nombre aléatoire :
echo $RANDOM | sha512sum | head -c 8