Menu
Dossiers

cat Linux : Maîtrisez la concaténation et la lecture de fichiers en ligne de commande

cat Linux : Maîtrisez la concaténation et la lecture de fichiers en ligne de commande #

Afficher un fichier de configuration, coller trois journaux bout à bout, écrire un script à la volée depuis le terminal : cat fait tout cela en une ligne. Encore faut-il savoir ce qui relève du standard POSIX, ce qui est une extension GNU absente ailleurs, et quelles redirections détruisent un fichier au lieu de le lire.

L’essentiel en 30 secondes
cat (pour concatenate) lit un ou plusieurs fichiers dans l’ordre indiqué et écrit leur contenu sur la sortie standard. Sans argument, il copie l’entrée standard vers la sortie standard. C’est un utilitaire normalisé POSIX : il est donc présent sur tout système conforme.
  • cat fichier — afficher un fichier
  • cat a.txt b.txt > total.txt — concaténer (⚠ > écrase la cible)
  • cat > note.txt — saisir au clavier, terminer par la touche de fin de fichier (Ctrl+D en configuration standard)
  • POSIX ne normalise qu’une seule option : -u. Tout le reste (-A -b -e -E -n -s -t -T -v) est une extension, et les extensions GNU et BSD ne se recouvrent pas.

Origine et signification de la commande cat #

cat tire son nom de la concaténation : la page de manuel la résume en une ligne, « cat — concatenate files and print on the standard output ». La norme POSIX décrit le même comportement : lire les fichiers séquentiellement et écrire leur contenu sur la sortie standard dans le même ordre. C’est de là que vient sa capacité à faire défiler plusieurs fichiers dans un flux unique.

Deux conséquences que l’on confond souvent. cat est un utilitaire normalisé : sa présence et son comportement de base sont garantis sur tout système conforme à POSIX. L’implémentation, elle, varie — sur Linux c’est celle des coreutils GNU, sur macOS et les BSD une implémentation BSD dont la liste d’options diffère. Sous WSL, vous utilisez le cat de la distribution Linux installée, donc la version GNU.

À lire Découvrez les Secrets des Grands Groupes pour Fusionner des Fichiers CSV et Boostez Vos Analyses de Données

Lecture et affichage du contenu de fichiers #

L’usage le plus courant reste l’affichage direct du contenu d’un fichier texte sur la sortie standard : lire d’un coup un fichier de configuration, un rapport d’incident ou un extrait de journal. Contrairement à un éditeur comme nano ou vim, cat n’ouvre rien en écriture — il affiche et rend la main.

# Lire un fichier de configuration
cat /etc/passwd
# Relire un script avant de l'exécuter
cat backup.sh
# Afficher plusieurs fichiers à la suite
cat /etc/hostname /etc/hosts
Contresens fréquent
cat ne suit pas un fichier qui grossit. Il lit le contenu présent à l’instant T, puis se termine. Pour voir arriver les nouvelles lignes d’un journal en temps réel, c’est tail -f qu’il faut employer : l’option -f, --follow de tail est justement décrite comme « output appended data as the file grows ».

Concaténation et fusion de plusieurs fichiers #

Le potentiel de cat se révèle quand il s’agit de fusionner plusieurs fichiers en un seul : regrouper des journaux épars, consolider des fragments de configuration après une migration, assembler des états d’inventaire avant archivage. La norme POSIX donne elle-même l’exemple canonique, cat doc1 doc2 > doc.all.

# Consolider trois journaux en un seul fichier
cat jour1.log jour2.log jour3.log > semaine.log
# Le shell développe le motif : les fichiers sont pris dans l'ordre alphabétique
cat inventaire_*.txt > inventaire_total.txt
# Ajouter à la fin d'un fichier existant, sans l'écraser
cat nouveau.log >> archive.log
⚠ Commande destructrice
L’opérateur > n’ajoute rien : le manuel de Bash est explicite, « if the file does not exist it is created; if it does exist it is truncated to zero size ». Une redirection > vers un fichier existant détruit son contenu avant même que cat ne commence à lire. Utilisez >> pour ajouter, et vérifiez toujours le nom de la cible avant de valider.

Création et manipulation de fichiers texte #

Parce qu’il lit l’entrée standard quand aucun fichier ne lui est passé, cat sert aussi à la création rapide de fichiers texte : on tape, on termine la saisie, le fichier est écrit — pratique pour un correctif jetable ou une note d’intervention.

# Créer un fichier en tapant son contenu, puis Ctrl+D pour terminer
cat > correctif.sh
# Prise de notes rapide
cat > rapport_intervention.txt
# Ajouter quelques lignes à un fichier déjà existant
cat >> rapport_intervention.txt

Deux réserves. cat > fichier obéit à la même règle de troncature : si le fichier existe, il est vidé. Et pour copier un fichier, cp source destination reste l’outil prévu — il préserve les métadonnées, ce que cat source > destination ne fait pas.

À lire VPN et Hadopi : Ce que les internautes français doivent vraiment savoir

Utilisation de l’entrée et de la sortie standard #

cat incarne la philosophie UNIX du flux : tout se lit, tout se redirige. Sans argument, il copie l’entrée standard vers la sortie standard — la page de manuel donne l’exemple tel quel : « cat: Copy standard input to standard output ». Mieux, un tiret seul comme opérande désigne l’entrée standard à cette position précise dans la liste : cat f - g — « Output f’s contents, then standard input, then g’s contents ». POSIX autorise explicitement plusieurs tirets dans la même commande.

# Insérer une saisie clavier entre deux fichiers
cat entete.txt - pied.txt > document.txt
# Injecter la sortie d'une commande au milieu d'un assemblage
date | cat entete.txt - corps.txt > rapport.txt
L’usage inutile de cat
Écrire cat fichier.log | grep "ERREUR" fait travailler deux processus là où un seul suffit : grep accepte directement des fichiers en opérandes (grep [OPTION]... MOTIFS [FICHIER]...). La forme correcte est grep "ERREUR" fichier.log — et elle a un avantage concret : grep connaît alors le nom du fichier, donc il peut le préfixer aux résultats quand vous en passez plusieurs. Le tube reste légitime dès que la source n’est pas un fichier (sortie d’une commande, plusieurs fichiers assemblés avec -).

Options avancées et personnalisations #

C’est ici que se joue la portabilité, et c’est l’erreur la plus répandue dans les tutoriels : POSIX ne normalise qu’une seule option pour cat, -u (écriture des octets sans délai). Toutes les autres sont des extensions d’implémentation. Voici la liste GNU, telle que documentée dans les coreutils.

Option GNUEffet documentéQuand s’en servir
-n, --numberNumérote toutes les lignes de sortie, à partir de 1Repérer une ligne précise dans un script ou un extrait
-b, --number-nonblankNumérote les lignes non vides ; annule -nNumérotation lisible sur un texte aéré
-E, --show-endsAffiche un $ en fin de chaque ligneRepérer espaces finaux et fins de ligne
-T, --show-tabsAffiche les tabulations sous la forme ^IDistinguer tabulations et espaces (Makefile, YAML)
-v, --show-nonprintingAffiche les caractères de contrôle en notation ^ et M-, sauf saut de ligne et tabulationDébusquer un caractère parasite dans un flux
-s, --squeeze-blankRéduit une suite de lignes vides adjacentes à une seuleNettoyer un fichier très espacé à la lecture
-A, --show-allÉquivalent à -vETTout rendre visible d’un coup
-e / -tÉquivalents respectifs de -vE et -vTRaccourcis des deux combinaisons les plus fréquentes
-uLa seule option POSIX. Ignorée par GNU, conservée pour compatibilitéPortabilité de scripts anciens

Notez la nuance que beaucoup d’articles ratent : -E marque seulement la fin de ligne, tandis que -e est un raccourci qui active aussi l’affichage des caractères non imprimables. Pour ne voir que les fins de ligne, c’est bien -E qu’il faut taper.

Ces options se combinent comme n’importe quelles options courtes : cat -nE fichier numérote les lignes et marque leur fin. Une seule priorité est à mémoriser, et elle est documentée telle quelle : -b l’emporte sur -n quand les deux sont présents.

À lire Découvrez les secrets de Java: techniques de test pour une qualité logicielle infaillible

Portabilité
Le cat de FreeBSD — et donc celui de macOS, qui en dérive — se limite à [-belnstuv]. Ni -A, ni -E, ni -T, ni les options longues de type --number. Un script écrit sur Linux avec cat -A échouera donc sur un Mac. À l’inverse, -l (verrou consultatif sur la sortie standard) existe côté BSD et pas côté GNU.

Gestion des erreurs et limites de la commande #

cat rencontre des situations où il refuse de travailler — et d’autres, plus insidieuses, où il travaille très bien et vous cause quand même un problème.

« Is a directory »
cat /etc renvoie cat: /etc: Is a directory. Pour lister un répertoire, c’est ls.
« Permission denied »
Le fichier existe mais les droits de lecture manquent. Vérifiez avec ls -l avant de préfixer par sudo.
Fichier très volumineux
Rien ne « sature » : cat diffuse le contenu au fil de la lecture. Le problème est ailleurs — le terminal reçoit tout d’un coup et le défilement devient inexploitable.
Fichier binaire
Les octets sont envoyés bruts au terminal, qui peut les interpréter comme des séquences d’échappement et se retrouver dans un état anormal.

Ce dernier point surprend toujours. Sur un binaire, un exécutable ou une archive, cat fait exactement ce qu’on lui demande : il recopie les octets. Or certains sont des caractères de contrôle que l’émulateur de terminal traite comme des instructions — couleurs figées, jeu de caractères changé, saisie qui ne s’affiche plus. C’est le rôle de cat -v, qui les rend visibles en notation ^ et M- au lieu de les émettre tels quels. Si le mal est fait, reset rétablit des modes « sains » : son manuel la recommande « after a program dies leaving a terminal in an abnormal state ».

Comparaison avec d’autres commandes de visualisation #

cat garde l’avantage sur les fichiers courts et dans les scripts. Dès qu’il s’agit de parcourir, de chercher ou de ne lire qu’une portion, d’autres utilitaires font le travail plus proprement. Le tableau reprend leur définition officielle plutôt qu’une impression d’usage.

CommandeDéfinition officielleÀ préférer quand…
catConcatène les fichiers et les écrit sur la sortie standardFichier court, concaténation, usage dans un script
lessAffiche le contenu d’un fichier dans un terminal ; « does not have to read the entire input file before starting »Fichier long : navigation et recherche, démarrage immédiat
morePager historique, affichage page par pageEnvironnement minimaliste où less est absent
head« output the first part of files » — 10 premières lignes par défautVérifier un en-tête, un format de colonnes
tail« output the last part of files » — 10 dernières lignes par défaut ; -f suit le fichierDernières entrées d’un journal, suivi en direct
tac« concatenate and print files in reverse » — dernière ligne d’abordLire un journal du plus récent au plus ancien
nl« number lines of files »Numérotation avec formats et sections, plus riche que cat -n

Le bon réflexe tient en une phrase : cat quand on veut le contenu entier dans un flux — pour le lire d’un coup, l’assembler ou l’envoyer à un autre programme ; un pager ou un outil spécialisé dès qu’il s’agit de naviguer dedans. Les deux familles ne s’opposent pas, elles se chaînent.

À lire Les secrets des pros pour une numérotation personnalisée parfaite dans LaTeX: découvrez comment ils le font!

Les pièges classiques à éviter avec cat #

1. Rediriger vers un fichier qu’on est en train de lire
cat a.txt b.txt > a.txt ne concatène rien : le shell tronque a.txt à zéro octet avant de lancer la commande, et il ne reste que le contenu de b.txt. Écrivez toujours vers un troisième nom de fichier.
2. Confondre > et >>
> remplace, >> ajoute. L’option noclobber du shell fait échouer une redirection > vers un fichier régulier existant ; >| force au cas par cas.
3. Passer par un tube sans raison
cat f | grep motif, cat f | wc -l, cat f | sed … : ces outils lisent déjà les fichiers directement.
4. Ouvrir un binaire ou un fichier énorme au jugé
file mon_fichier dit de quoi il s’agit, head en montre le début, less le parcourt sans tout envoyer au terminal.

À retenir #

Synthèse
  • cat lit des fichiers dans l’ordre et les écrit sur la sortie standard ; sans argument, il copie l’entrée standard.
  • Une seule option est normalisée par POSIX : -u. -A -b -e -E -n -s -t -T -v sont des extensions GNU, absentes du cat BSD de macOS.
  • La redirection > tronque le fichier cible à zéro avant l’exécution : ne jamais rediriger vers un fichier source, préférer >> pour ajouter.
  • Un tube depuis cat vers grep, wc ou sed est superflu : ces outils acceptent le fichier en argument.
  • Fichier long ou binaire : passer par less, head, tail ou cat -v plutôt que d’inonder le terminal.

Questions fréquentes sur la commande cat #

Que signifie exactement « cat » ?
C’est l’abréviation de concatenate. La page de manuel la définit comme « concatenate files and print on the standard output » : elle lit les fichiers séquentiellement et écrit leur contenu sur la sortie standard dans le même ordre.
Comment terminer une saisie lancée avec cat > fichier ?
En envoyant la fin de fichier au terminal, c’est-à-dire Ctrl+D dans une configuration standard. La commande lit l’entrée standard jusqu’à cette fin de fichier, puis écrit le résultat dans la cible de la redirection.
Pourquoi cat -A ne fonctionne-t-il pas sur mon Mac ?
Parce que macOS embarque une implémentation de la famille BSD, limitée à [-belnstuv]. Les options -A, -E, -T et les options longues du type --number sont des ajouts des coreutils GNU.
cat peut-il suivre un fichier de journal en temps réel ?
Non. Il affiche le contenu présent au moment de l’appel, puis se termine. Le suivi en continu est le rôle de tail -f, dont l’option affiche les données ajoutées au fur et à mesure que le fichier grossit.
Comment éviter d’écraser un fichier par erreur avec une redirection ?
Trois réflexes : utiliser >> quand on veut ajouter, ne jamais rediriger vers un fichier figurant aussi en entrée, et activer l’option noclobber du shell, qui fait échouer une redirection > vers un fichier régulier existant.
Mon terminal est illisible après un cat sur un binaire, que faire ?
Lancez reset, qui rétablit des modes de terminal sains — son manuel le recommande explicitement après qu’un programme a laissé le terminal dans un état anormal. La saisie peut ne pas s’afficher pendant que vous tapez la commande.

Une ressource utile sur le sujet : autre site.

Digga est édité de façon indépendante. Soutenez la rédaction en nous ajoutant dans vos favoris sur Google Actualités :

Dans la même rubrique : Outils & Tech