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.
cat fichier— afficher un fichiercat 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.
Plan de l'article
- cat Linux : Maîtrisez la concaténation et la lecture de fichiers en ligne de commande
- Origine et signification de la commande cat
- Lecture et affichage du contenu de fichiers
- Concaténation et fusion de plusieurs fichiers
- Création et manipulation de fichiers texte
- Utilisation de l’entrée et de la sortie standard
- Options avancées et personnalisations
- Gestion des erreurs et limites de la commande
- Comparaison avec d’autres commandes de visualisation
- Les pièges classiques à éviter avec cat
- À retenir
- Questions fréquentes sur la commande cat
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.
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
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
> 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
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 GNU | Effet documenté | Quand s’en servir |
|---|---|---|
-n, --number | Numérote toutes les lignes de sortie, à partir de 1 | Repérer une ligne précise dans un script ou un extrait |
-b, --number-nonblank | Numérote les lignes non vides ; annule -n | Numérotation lisible sur un texte aéré |
-E, --show-ends | Affiche un $ en fin de chaque ligne | Repérer espaces finaux et fins de ligne |
-T, --show-tabs | Affiche les tabulations sous la forme ^I | Distinguer tabulations et espaces (Makefile, YAML) |
-v, --show-nonprinting | Affiche les caractères de contrôle en notation ^ et M-, sauf saut de ligne et tabulation | Débusquer un caractère parasite dans un flux |
-s, --squeeze-blank | Réduit une suite de lignes vides adjacentes à une seule | Nettoyer un fichier très espacé à la lecture |
-A, --show-all | Équivalent à -vET | Tout rendre visible d’un coup |
-e / -t | Équivalents respectifs de -vE et -vT | Raccourcis des deux combinaisons les plus fréquentes |
-u | La 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
[-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.
cat /etc renvoie cat: /etc: Is a directory. Pour lister un répertoire, c’est ls.ls -l avant de préfixer par sudo.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.
| Commande | Définition officielle | À préférer quand… |
|---|---|---|
| cat | Concatène les fichiers et les écrit sur la sortie standard | Fichier court, concaténation, usage dans un script |
| less | Affiche 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 |
| more | Pager historique, affichage page par page | Environnement minimaliste où less est absent |
| head | « output the first part of files » — 10 premières lignes par défaut | Vé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 fichier | Dernières entrées d’un journal, suivi en direct |
| tac | « concatenate and print files in reverse » — dernière ligne d’abord | Lire 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.
Les pièges classiques à éviter avec cat #
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.> remplace, >> ajoute. L’option noclobber du shell fait échouer une redirection > vers un fichier régulier existant ; >| force au cas par cas.cat f | grep motif, cat f | wc -l, cat f | sed … : ces outils lisent déjà les fichiers directement.file mon_fichier dit de quoi il s’agit, head en montre le début, less le parcourt sans tout envoyer au terminal.À retenir #
- 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 » ?
Comment terminer une saisie lancée avec cat > fichier ?
Pourquoi cat -A ne fonctionne-t-il pas sur mon Mac ?
[-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 ?
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 ?
>> 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 ?
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.




