Commande cat de Linux : signification et application
La commande cat de Linux est l'une des commandes Linux les plus fréquemment utilisées. Elle est surtout utile pour afficher le contenu d'un fichier en sortie standard. Cependant, il existe un certain nombre d'autres utilisations, que nous abordons dans cet article.
Qu'est-ce que la commande cat de Linux ?
Malgré son nom, la commande cat de Linux n'a rien à voir avec les chats. En fait, cette commande permet de faire quelque chose d'assez banal : la commande cat de Linux lit le contenu des fichiers et l'affiche sur la sortie standard. L'origine du nom vient du terme « concaténation » (plus d'informations à ce sujet ci-dessous).
Examinons le schéma de base d'un appel à la commande cat de Linux. Comme vous pouvez le voir, nous écrivons d'abord 'cat', suivi d'options si nécessaire, puis du nom/chemin des fichiers à afficher :
cat [Options] <Nomdefichier>
La commande cat de Linux appartient aux outils de base (Coreutils) GNU. Il s'agit d'une collection de commandes de base en ligne de commande. Les coreutils sont des « logiciels libres et open source » (FOSS) et sont présents dans presque toutes les distributions Linux. De plus, la commande cat de Linux est disponible sous macOS ainsi que sous Windows en utilisant le « sous-système Windows pour Linux » (WSL/WSL2).
Pour déterminer si la commande cat de Linux est disponible sur votre système, procédez comme suit : ouvrez un terminal et exécutez la commande ‘which cat’. Si la commande cat de Linux est présente sur votre système, le chemin de l'exécutable cat (par exemple, '/bin/cat') est affiché. Si un message d'erreur s'affiche, la commande cat de Linux n'est pas disponible sur votre système.
Options de la commande cat de Linux
Comme la plupart des commandes du terminal, la commande cat de Linux est contrôlée par des paramètres optionnels lorsqu'elle est appelée. Ces options suivent le nom de la commande. Il convient de noter qu'une distinction est faite entre les majuscules et les minuscules. Il existe généralement deux manières d’écrire la plupart des options :
1. Forme courte : -, par exemple 'cmd -h'
La forme abrégée n'est pas très explicite. Plusieurs options peuvent être combinées en une seule, par exemple 'ls -la' au lieu de 'ls -l -a'. La forme courte est adaptée pour travailler rapidement avec des commandes connues en ligne de commande.
2. Forme longue : --, par exemple 'cmd --help'
La forme longue est facile à comprendre, mais elle est plus longue à taper et prend plus de place. La forme longue est adaptée à la création de scripts. Les noms d'options significatifs sont utilisés à des fins de documentation.
Examinons les options les plus importantes de la commande cat de Linux :
Option | Explication |
---|---|
-h, --help | afficher l'aide de la commande cat de Linux |
-n | numéroter toutes les lignes |
-s | combiner plusieurs lignes vierges en une seule |
-b | numéroter toutes les lignes sauf les lignes vides |
-v | afficher les caractères invisibles |
-e | comme -v, y compris le marqueur de fin de ligne |
-t | comme -v, y compris le marqueur de tabulation |
-et | Combinaison de -e et -t ; numéroter tous les caractères invisibles |
Que signifie réellement la concaténation ?
Le nom de la commande cat de Linux vient de « concaténation », lui-même dérivé du terme latin « catena » pour chaîne. La concaténation est un concept important en informatique. Ce terme décrit le chaînage, l'enchaînement ou la jonction d'éléments de structures de données de conteneurs similaires. En particulier, plusieurs tableaux ou chaînes peuvent être combinés en un seul tableau ou une seule chaîne dans la plupart des langages. Dans ce processus, les éléments individuels des conteneurs concaténés sont combinés dans un nouveau conteneur tout en conservant l'ordre.
Un exemple simple en pseudo-code : nous passons plusieurs chaînes de caractères à la fonction cat, qui sont combinées en une seule chaîne.
cat("Pierre ", "et ", "Paul") -> "Pierre et Paul"
La commande cat de Linux fait conceptuellement la même chose : elle traite en tant qu’éléments les lignes groupées dans un fichier.
Les différents langages de programmation utilisent des symboles différents pour l'opérateur de concaténation des chaînes de caractères. Examinons quelques exemples de langages de programmation populaires. Dans tous les cas, le résultat de la concaténation est la chaîne « Pierre et Paul » :
Opérateur | Langue(s) | Exemple |
---|---|---|
+ | Java, JavaScript, Python | Pierre + "et" + " Paul" |
. | PHP, Perl | Pierre . "et" . " Paul" |
.. | Lua | Pierre .. "et" .. " Paul" |
~ | Twig | Pierre ~ "et" ~ " Paul" |
& | VisualBasic | Pierre & "et" & " Paul" |
Certains langages, notamment Python, utilisent le même opérateur pour concaténer d'autres structures de données conteneurisées telles que des listes :
# Concaténer les listes
[1, 2, 3] + [45, 56, 67]
# -> [1, 2, 3, 45, 56, 67]
# Attention, PAS :
# [[1, 2, 3], [45, 56, 67]]
# Concaténation de tuples
(1, 2) + (33, 44)
# -> (1, 2, 33, 44)
Le langage statistique « R » est intéressant : il ne connaît pas d'opérateur de concaténation. Au lieu de cela, la fonction 'c()' est utilisée. Essayez de deviner la signification du « c ». C’est bien cela : il signifie « concaténer ». On voit ici la concaténation imbriquée de plusieurs valeurs :
c(c(1, 2, 3), c(45, 56, 67))
# -> 1, 2, 3, 45, 56, 67
Comment la commande cat de Linux est-elle utilisée en pratique ?
L'utilisation réelle de la commande cat de Linux est limitée. Cela suit la philosophie UNIX : « faire une chose, et la faire bien ». La plupart des scénarios opérationnels résultent du chaînage de commande avec d'autres commandes. Des redirections de l'entrée et de la sortie standard sont utilisées. Plus précisément, il s'agit de ce que l’on appelle les pipes et les redirections. Ils sont fournis par le shell et leur utilisation s'étend à toutes les commandes :
Redirection | Symbole | Utilisation | Explication |
Pipe | | | cmd1 | cmd2 | Transférer la sortie de la commande cmd1 vers l’entrée de la commande cmd2 |
Input-Redirect | < | cmd < data | Entrée de la commande cmd lue à partir du fichier data |
Output-Redirect | > | cmd > data | Écrit la sortie de la commande cmd dans le fichier data ; si nécessaire, le fichier existant est écrasé |
Output-Redirect | >> | cmd >> data | Écrit la sortie de la commande cmd à la fin du fichier data ; si nécessaire, le fichier data est créé |
La commande cat de Linux est souvent utilisée avec un certain nombre d'autres commandes Linux. Examinons quelques-unes des plus courantes :
Passons maintenant aux scénarios d'utilisation courante de la commande cat de Linux.
Utilisation de la commande cat de Linux pour sortir des fichiers sur la ligne de commande
L'utilisation la plus courante de la commande cat de Linux est probablement d'afficher le contenu complet d’un fichier sur la ligne de commande. Cette fonction est utile pour jeter un coup d'œil rapide sur un fichier. Contrairement à l’ouverture du fichier dans un éditeur, vous ne devez pas craindre de modifier accidentellement le fichier. Voici un exemple de sortie d'un fichier sur la sortie standard :
cat ./path/to/file.txt
Examinons quelques scénarios courants. Imaginez que vous êtes connecté via SSH sur un serveur exécutant WordPress. Vous êtes dans le répertoire racine de WordPress et vous voulez voir le contenu du fichier de configuration 'wp-config.php'. Alors l’appel suivant de la commande cat de Linux est suffisant :
cat wp-config.php
Souvent, la sortie d’un fichier sur la sortie standard est suffisante. Cependant, dans certains cas, nous pouvons vouloir copier le contenu du fichier dans le presse-papiers. En outre, la sortie visible peut présenter un risque pour les données sensibles. Dans les deux cas, il est bon de transmettre la sortie de la commande cat de Linux à un programme qui écrit les données dans le presse-papiers. Sous macOS, l’outil de ligne de commande 'pbcopy' est disponible à cet effet ; sous Windows avec WSL/2 et les différentes distributions Linux, des outils équivalents tels que 'clip' ou 'xclip' sont disponibles.
Prenons l’exemple suivant : nous voulons copier notre clé publique SSH pour mettre en place un dépôt GitHub. Supposons également que la clé nommée 'id_rsa.pub' se trouve dans le répertoire '.ssh/' de notre répertoire utilisateur. Nous pouvons ensuite réaliser l’opération sous macOS avec l'appel suivant de la commande cat de Linux :
cat ~/.ssh/id_rsa.pub > pbcopy
Comme le nom de la commande cat de Linux le suggère, plusieurs fichiers peuvent être combinés et édités en une seule fois. Imaginons que nous ayons enregistré des listes de fruits, de légumes et de produits laitiers dans trois fichiers du répertoire 'food/'. Avec l'appel suivant de la commande cat de Linux, nous combinons les trois listes en une seule et l'écrivons dans le fichier 'food.txt' :
cat ./food/fruit.txt ./food/veggies.txt ./food/dairy.txt > food.txt
Comme d’habitude sur la ligne de commande, nous pouvons utiliser le caractère générique '*'pour sélectionner tous les fichiers d'un répertoire :
cat ./food/*.txt > food.txt
Écrire du texte dans un fichier avec la commande cat de Linux
En utilisant les redirections de sortie mentionnées ci-dessus, vous pouvez écrire du texte dans un fichier avec la commande cat de Linux. Cela peut être utilisé de trois façons :
- Créez un nouveau fichier dans lequel le texte saisi est écrit.
- Écraser un fichier existant avec le texte saisi.
- Attacher le texte saisi à un fichier existant.
Examinons les trois scénarios. Tout d’abord, nous écrivons du texte depuis la ligne de commande dans un fichier inexistant :
- Invoquez la commande cat de Linux et transférez la sortie vers un fichier inexistant. La commande accepte les données de l'entrée standard jusqu'à ce que le caractère de fin de fichier (« End-of-file », EOF) soit lu :
cat > new.txt
- Saisissez le texte souhaité sur la ligne de commande.
- Terminez la saisie en appuyant sur la combinaison de touches [Ctrl] + [D]. Cette combinaison de touches correspond au caractère de fin de fichier.
Le texte saisi se trouve maintenant dans le fichier 'new.txt'. Nous vérifions cela en appelant la commande 'cat new.txt'.
Utilisons la même approche pour joindre le texte saisi à un fichier existant :
- Appelez la commande cat de Linux et transférez la sortie dans un fichier existant :
cat >> existing.txt
- Saisissez le texte souhaité sur la ligne de commande.
- Terminez la saisie en appuyant sur la combinaison de touches [Ctrl] + [D].
Si nous utilisons le symbole '>' au lieu du transfert de sortie '>>', le fichier existant est écrasé par le texte saisi. Faites attention : le contenu précédent est irrévocablement perdu !
Préparer les données pour un traitement ultérieur avec la commande cat de Linux
Une utilisation courante de la commande cat de Linux consiste à combiner les données de plusieurs fichiers. Souvent, les données résumées passent par des filtres pour les préparer à un traitement ultérieur. Ce schéma se retrouve toujours lorsque des données similaires sont réparties sur plusieurs fichiers. Chacun de ces fichiers contient une entrée par ligne. Pensez, par exemple, à des listes de noms, d’adresses IP ou autres.
Afin d’obtenir une vue d’ensemble de toutes les caractéristiques des données, effectuez la tâche suivante : nous voulons combiner toutes les entrées, en supprimant toute entrée en double. Enfin, les entrées doivent être triées et écrites dans un nouveau fichier. À titre d’exemple concret, imaginons que nous ayons un ensemble de fichiers texte. Chaque fichier contient les noms des acteurs d'un épisode particulier de la série de dessins animés « Les Simpsons ». Si nous combinons les entrées de tous les fichiers comme décrit, nous obtenons une liste de tous les acteurs des Simpsons.
Les fichiers décrits dans notre exemple avec les acteurs des Simpsons ressembleraient schématiquement à ceci :
simpsons-1.txt | simpsons-2.txt | simpsons-3.txt |
---|---|---|
Lisa | Bart | Bart |
Marge | Lisa | Maggie |
Homer | Homer | Nelson |
Flanders | Milhouse |
Supposons également que les différents fichiers texte se trouvent dans le répertoire « simpsons/ ». L’appel suivant de la commande Linux-Cat, concaténé avec les commandes 'uniq' et 'sort', est suffisant pour écrire la liste de tous les acteurs des Simpsons dans le fichier 'simpsons.txt' :
cat ./simpsons/*.txt | uniq | sort > simpsons.txt
Numérotation des lignes d'un fichier texte avec la commande cat de Linux
Une utilisation courante de la commande cat de Linux consiste à numéroter les lignes d’un fichier texte. Imaginons que nous ayons un fichier texte avec des entrées, une entrée par ligne. Maintenant, nous voulons préfixer chaque ligne avec le numéro de ligne. Cela est utile, par exemple, lorsque nous transmettons le fichier à une autre partie pour examen. Cela permet aux deux parties de se référer à des lignes spécifiques dans la correspondance.
La numérotation est très facile avec la commande cat de Linux. Nous utilisons l'option '-n' et une redirection de sortie :
cat -n doc.txt > doc.numbered.txt
Dans le scénario décrit, il peut être judicieux de numéroter toutes les lignes, à l’exception des lignes vides. En outre, nous combinons plusieurs lignes vierges en une seule. Pour cela, nous utilisons la combinaison des options '-s' et '-b' :
cat -sb doc.txt > doc.numbered.txt
Combinaison de fichiers modèles avec la commande cat de Linux
Un schéma bien connu de la programmation Web consiste à assembler des documents à partir de pièces détachées. La combinaison des parties dites « modèles » et des parties uniques permet d'obtenir des documents diversifiés dont la structure est cohérente. Normalement, vous utilisez PHP avec l'instruction 'include' ou un langage de modèle spécial comme Twig. Cependant, le même principe peut également être mis en œuvre avec la commande cat de Linux.
Imaginons que nous ayons plusieurs modèles de parties dans le répertoire 'parts/'. L’en-tête et le pied de page doivent être identiques dans tous les documents générés. La structure et le contenu de l'en-tête et du pied de page sont définis dans les fichiers 'header.html' et 'footer.html'. En outre, il existe plusieurs fichiers contenant le contenu réel des documents dans le répertoire 'main/'. Les documents finis sont enregistrés dans le répertoire de sortie 'www/'. Pour créer un document, l'appel suivant de la commande cat de Linux est suffisant :
cat ./parts/header.html ./main/home.html ./parts/footer.html > ./www/index.html
Un autre scénario opérationnel : une base de code doit être fournie avec un texte de licence pour la publication. La licence doit être insérée au début de chaque fichier de code. Imaginons la disposition suivante des répertoires :
- Fichiers de code source Python avec l'extension '.py' dans le répertoire 'src/'
- Un fichier de licence 'license.py' dans le répertoire 'inc/'
- Un répertoire 'dist/' initialement vide pour stocker les fichiers traités
Nous utilisons la commande cat de Linux dans une boucle. Chaque fois que le corps de la boucle est exécuté, le même fichier de licence est concaténé avec l'un des fichiers sources. Le résultat est écrit dans un nouveau fichier de code source portant le même nom :
for file in ./src/*.py ; do
cat ./inc/license.py "$file" > "./dist/${file}"
done
Fusionner des fichiers fractionnés avec la commande cat de Linux
La plupart du temps, la commande cat de Linux est utilisée pour traiter les fichiers de texte brut. Cependant, la commande fonctionne également avec les fichiers binaires. Ceci est utile dans certains scénarios. D'une part, les commandes Linux 'split' ou 'csplit' peuvent être utilisées pour réassembler des fichiers qui ont été divisés en plusieurs parties. Nous montrons ici l’approche générale :
# Nom du fichier à désassembler
file_name="./path/to/file"
# Spécifier explicitement l'extension du fichier pour l'ajouter après la fusion
extension="txt"
# Diviser le fichier original en morceaux de 10 kilo-octets avec le préfixe 'part_'
split -b 10k "${file_name}.${extension}" part_
# Fusionner les morceaux individuels dans un nouveau fichier
cat part_* > combined
# Restaurer l'extension de fichier originale
mv combined "combined.${extension}"
D’autre part, la commande cat de Linux se prête à la combinaison de téléchargements partiels. De nombreux outils permettent de mettre les téléchargements en pause et de les reprendre plus tard. Cela est particulièrement utile pour télécharger un gros fichier sur une connexion réseau faible. N’hésitez pas à essayer l’exemple sur votre propre système :
# Créer un dossier de test sur le bureau
mkdir ~/Desktop/cat-test/
# Changez pour le dossier de test
cd ~/Desktop/cat-test/
# Image de chat du domaine public de WikiMedia
image=https://upload.wikimedia.org/wikipedia/commons/f/fa/Cat_using_computer.jpg
# Télécharger l'image avec 'curl' en deux parties
curl -s -r 0-500000 "$image" -o first-half &
curl -s -r 500001- "$image" -o second-half &
wait
# Combiner les parties et écrire dans le fichier JPEG
cat first-half second-half > image.jpg
Combinaison de flux de données avec la commande cat de Linux
La commande cat de Linux peut être utilisée pour combiner des flux de données dans le traitement vidéo. Nous montrons ici le schéma général. Tout d'abord, nous créons plusieurs flux vidéo courts à partir d'une image JPEG en utilisant la commande ffmpeg. Nous les combinons ensuite en une seule vidéo continue :
# Créer une boucle à partir de l'image
ffmpeg -y -loop 1 -i image.jpg -t 3 \
-c:v libx264 -vf scale=w=800:h=-1 \
still.ts
# Créer un fondu enchaîné à partir de l'image
ffmpeg -y -loop 1 -i image.jpg -t 3 \
-c:v libx264 -vf scale=w=800:h=-1,fade=in:0:75 \
fadein.ts
# Créer un fondu à partir de l'image
ffmpeg -y -loop 1 -i image.jpg -t 3 \
-c:v libx264 -vf scale=w=800:h=-1,fade=out:0:75 \
fadeout.ts
# Combinez le fondu en entrée, la boucle et le fondu en sortie
cat fadein.ts still.ts fadeout.ts > video.ts
Quand ne pas utiliser la commande cat de Linux ?
L'utilisation inutile de la commande cat de Linux est un « anti-modèle » bien connu. Cette situation est décrite dans de nombreux articles ; il existe même un prix « Utilisation inutile de cat ». D’une manière générale, la commande cat de Linux doit être utilisée lorsqu'il est nécessaire de combiner plusieurs fichiers. Si vous voulez traiter un seul fichier, c'est généralement possible sans cat.
Examinons l’approche générale qui peut nous aider à minimiser l'utilisation inutile de la commande cat de Linux. Le modèle suivant se retrouve souvent dans les messages de forum et les articles de blog :
cat example.txt | less
La commande cat de Linux est appelée pour lire un seul fichier. La sortie est transmise via une redirection de pipe à la commande less pour afficher le contenu du fichier page par page. Cependant, on peut aussi le faire plus simplement :
less < example.txt
Nous appelons la commande less et utilisons la redirection d’entrée du shell pour lire le fichier. Et même cette approche peut être encore simplifiée :
less example.txt
Au lieu d'utiliser la redirection des entrées, nous passons le fichier à traiter à la commande less. Cela est dû au fait que presque toutes les commandes Linux prennent le(s) nom(s) de fichier(s) comme paramètres.
Quelles sont les alternatives à la commande cat de Linux ?
Comme décrit ci-dessus, la commande cat de Linux est souvent utilisée inutilement. Il existe des solutions de rechange pour certains des scénarios d'utilisation les plus courants. Nous présentons ici trois exemples:
Commande | Utilisation alternative | Exemple |
---|---|---|
less / more | Sortie du contenu du fichier page par page sur le terminal ou « affichage du contenu page par page sur le terminal » | less file.txt, more file.txt |
touch | Créer un nouveau fichier vide | touch new.txt |
echo | Écrire du texte dans un fichier | echo "Text" > file.txt |
Quelles sont les commandes similaires à la commande cat de Linux ?
Il existe un certain nombre de commandes Linux qui sont similaires à la commande cat. Pour faire une petite blague, les noms de ces commandes sont souvent basés sur le terme cat. Il y a d'abord la commande tac, dont le nom est simplement cat inversé. Et voici comment fonctionne la commande tac : comme la commande cat de Linux, mais avec la sortie inversée. Ainsi, lorsque la commande tac est appelée avec un seul fichier, la dernière ligne est sortie en premier au lieu de la première comme avec cat.
Une autre commande dont le nom est similaire à la commande cat de Linux est la commande nc, abrégée pour « Netcat ». Cette commande est souvent appelée le « couteau suisse pour TCP/IP ». Au lieu d'opérer sur des fichiers locaux comme cat, Netcat lit et écrit des données via des connexions réseau. Vous pouvez en savoir plus dans notre article sur le sujet.
Comme alternative plus récente à la commande cat de Linux, il y a la commande bat. Sur la page GitHub de la commande, elle est appelée « clone de cat avec des ailes » (« A cat clone with wings »). La commande bat conserve les fonctionnalités de base de la commande cat de Linux, mais offre quelques fonctions de confort. En particulier, la commande bat ajoute une coloration syntaxique à la sortie des fichiers de code source.