Aller au contenu

GNU coreutils

À quoi il sert

Le paquet coreutils réunit une centaine de commandes élémentaires, présentes sur toute distribution GNU/Linux : manipulation de fichiers (ls, cp, mv, rm, chmod, install), informations système (date, id, df) et surtout les filtres de texte. wc compte, head et tail découpent le début et la fin, cut extrait des colonnes, tr traduit ou supprime des caractères, sort trie (par champ avec -k, numériquement avec -n, -h ou -V, de façon stable avec -s), uniq fusionne les lignes consécutives identiques et les compte (-c), comm et join comparent et associent deux fichiers triés, paste les juxtapose, tac inverse l'ordre des lignes, tee duplique un flux, stdbuf règle la mise en tampon d'un programme. Ubuntu 24.04 fournit coreutils 9.4, Debian 13 la version 9.7.

Quand le choisir

Pour composer des réponses rapides dans un tube : cut -d' ' -f3 | sort | uniq -c | sort -rn répond en une ligne à « quelles valeurs, combien de fois ». Ces outils sont rapides (sort sait faire un tri externe sur des fichiers plus gros que la mémoire) et disponibles partout. Quand la question demande des conditions sur plusieurs champs, des sommes ou des regroupements, un seul programme awk remplace avantageusement une longue chaîne ; pour du CSV avec guillemets ou du JSON, prenez un outil qui connaît le format.

Points d'attention

  • Le résultat de sort, comm, join et uniq dépend de la locale et de son ordre de collation : fixez LC_ALL=C.UTF-8 dans les scripts, et triez dans la même locale que l'outil qui relit.
  • uniq ne fusionne que des lignes consécutives : triez d'abord. sort -k2 va du deuxième champ jusqu'à la fin de la ligne ; écrivez -k2,2.
  • cut -d' ' traite chaque espace comme un séparateur : sur des colonnes alignées par plusieurs espaces, utilisez awk. cut -c compte des octets, pas des caractères, dans ces versions.
  • sort fichier > fichier vide le fichier avant de le lire ; sort -o fichier fichier est sûr.
  • Les fichiers temporaires de sort (dans TMPDIR) contiennent une copie des données triées.
  • Dans un tube sous pipefail, head qui se termine tôt peut faire mourir l'écrivain par SIGPIPE (code 141).

Par où commencer

La leçon Penser en flux : lignes, champs et petits outils du cours Traiter du texte, et la leçon Lire et éditer des fichiers de Linux : premiers pas. Puis le manuel de GNU coreutils, en particulier les chapitres sur sort et sur les opérations sur des fichiers triés.