La commande head de Linux, tout comme la commande tail de Linux, est un des outils es­sen­tiels de la ligne de commande. La fonction prin­ci­pale 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 ap­par­tient aux « GNU Core Utilities » (Coreutils). Il s’agit d’un ensemble de commandes de base en ligne de commande. Con­for­mé­ment à la phi­lo­so­phie 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 dis­po­nibles pour un grand nombre de systèmes d’ex­ploi­ta­tion dif­fé­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é­ces­saire ? Pour répondre à cette question, examinons le fonc­tion­ne­ment 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é­sen­tent moins d’intérêt ici.
  • L’entrée et la sortie standard : texte qui est affiché dans le terminal à l’uti­li­sa­teur, ou entré à cet endroit par ce dernier.
  • Ce que l’on appelle les « pipes » (ou encore « tubes » ou « pipelines ») : des con­ca­té­na­tions 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 in­com­men­su­rables de texte. Par exemple, un fichier de plusieurs gigabytes contient des milliards de signes ! Par con­sé­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 res­treindre l’affichage à une certaine zone.

Si nos ex­pli­ca­tions vous semblent quelque peu abs­traites jusqu’à présent, regardez les exemples pratiques ci-dessous. Ceux-ci doivent permettre de saisir de manière concrète les idées pré­sen­tées.

Si nos ex­pli­ca­tions vous semblent quelque peu abs­traites jusqu’à présent, regardez les exemples pratiques ci-dessous. Ceux-ci doivent permettre de saisir de manière concrète les idées pré­sen­té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 pa­ra­mètres fa­cul­ta­tifs, 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 con­ven­tion, la commande head de Linux est contrôlée par des pa­ra­mètres op­tion­nels. Dans le cadre des GNU Coreutils, il existe une forme longue pour chaque option ; pour les options les plus fré­quem­ment utilisées, il existe également une forme courte, souvent dé­ter­mi­née his­to­ri­que­ment. Le tableau ci-dessous donne un aperçu des options les plus utiles :

Option (forme courte / forme longue) Ex­pli­ca­tion
-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 in­for­ma­tions d’aide de la commande
Note
Dans les exemples suivants, nous utilisons les options dans leur forme courte ('-n' au lieu de '--lines', etc.). Vous ren­con­tre­rez souvent cet usage lorsque vous lirez d’autres do­cu­men­ta­tions ou exemples de code.

Dis­gres­sion : comment com­prendre les lignes et les ca­rac­tères ?

Avant d’examiner les exemples pratiques, quelques mots sur la ter­mi­no­lo­gie. Que voulons-nous dire en réalité lorsque nous parlons de « lignes » et de « ca­rac­tères » ? De manière purement intuitive, vous pouvez cer­tai­ne­ment donner une réponse à cette question. Mais dans l’en­vi­ron­ne­ment numérique stric­te­ment ré­gle­menté, nous devons le savoir très pré­ci­sé­ment.

En interne, un fichier texte est une chaîne de ca­rac­tères unique et continue. La fin de chaque ligne est sim­ple­ment marquée par un caractère appelé « saut de ligne ». Le caractère utilisé peut être différent en fonction du système d’ex­ploi­ta­tion, 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 cor­res­pond exac­te­ment à un caractère. Cela fonc­tionne pour le jeu de ca­rac­tères ASCII, mais peut poser des problèmes dans d’autres si­tua­tions. Le jeu de ca­rac­tères Unicode largement utilisé aujourd’hui est un codage de ca­rac­tères « multi-bytes ». Pour re­pré­sen­ter 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 se­con­daires peuvent se produire. Par exemple, l’uti­li­sa­tion de l’option '-c' peut faire en sorte qu’un tréma (par exemple « ü ») devienne la voyelle cor­res­pon­dante (« u »).

Exemples d’uti­li­sa­tion de la commande head de Linux

Pour rendre les exemples suivants con­crè­te­ment com­pré­hen­sibles, nous utilisons le texte de la Dé­cla­ra­tion uni­ver­selle des droits de l’homme (« Dé­cla­ra­tion uni­ver­selle des droits de l’homme », DUDH). Avec des tra­duc­tions dans plus de 460 langues, c’est l’un des textes les plus traduits de l’histoire de l’humanité. Nous té­lé­char­geons le texte de la dé­cla­ra­tion avec la commande linux-curl-command et le sau­ve­gar­dons 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
Conseil
L’affichage de la première ligne est par­ti­cu­liè­re­ment in­té­res­sant pour l’affichage de ce que l’on appelle le « Shebang » d’un fichier script. Il contient une in­di­ca­tion de l’in­ter­pré­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é­ci­fiques

Main­te­nant, 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 uni­que­ment une certaine ligne. Pour cela, nous utilisons la commande tail avec l’option '-n 1'. Par exemple, pour éditer uni­que­ment 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 uni­que­ment la partie jusqu’à « security », nous ajoutons un autre appel « piped » à la commande head de Linux. De plus, nous utilisons l’option '-c' et essayons dif­fé­rentes valeurs comme arguments jusqu’à ce que nous coupions exac­te­ment la bonne zone. Dans ce cas, nous n’avons besoin que des 62 premiers ca­rac­tères :

head -n 28 ~/Desktop/udhr.txt | tail -n 1 | head -c 62

Il peut être plus intuitif de compter le nombre de ca­rac­tè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 sou­hai­tons supprimer les espaces de tête. Vous pouvez pro­ba­ble­ment déjà deviner : pour y parvenir, nous ajoutons un autre appel à la commande head. Ici, nous four­nis­sons 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 sig­ni­fi­ca­tion de l’option : au lieu de limiter la sortie aux cinq derniers ca­rac­tères comme d'ha­bi­tude, 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 main­te­nant si l’effort de cons­truire 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 com­bi­nai­son courante consiste à filtrer le texte de sortie avec la commande grep. Ainsi, nous pouvons limiter la sortie aux lignes qui con­tien­nent le terme recherché. Ici, nous sortons les lignes des trente premières lignes du texte de la DUDH qui con­tien­nent 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 ex­pli­ci­te­ment plusieurs noms de fichiers ou chemins. Ou bien nous indiquons un ré­per­toire 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 con­fi­gu­ra­tion du ré­per­toire 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 trai­te­ment 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 cor­res­pond à 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é­per­toires. Avec l’option '-t', nous trions la liste par ordre dé­crois­sant selon la date de la dernière mo­di­fi­ca­tion. 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 ca­rac­tères. Pour comparer deux hachages à l’œil nu, il n’est souvent pas né­ces­saire de regarder l’ensemble du hachage. Par exemple, il peut être suffisant d’examiner seulement les huit premiers ca­rac­tères. Vous con­nais­sez 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
Aller au menu principal