Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Paradigmes informatiques

Les caractères spéciaux de la ligne de commande Linux

15/04/2023

Il y a certains caractères spéciaux en ligne de commande Linux qui ne sont pas explicites au premier abord. Il est important de les comprendre car ceux-ci sont des éléments clés de la manipulation des entrées et sorties des commandes. Dans cet article, je vais passer en revue les caractères spéciaux les plus rencontrés.

Redirection des sorties standard/erreur

Dans un shell Unix, la sortie d'une commande est généralement envoyée vers la sortie standard (stdout) et les messages d'erreur vers la sortie d'erreur standard (stderr). Plusieurs caractères spéciaux permettent de jouer sur la sortie d'une commande.

Caractère
Description
Exemple
|

Redirige la sortie d'une commande vers une autre commande, en tant qu'entrée de type chaîne de caractères.

# Applique la commande grep sur la sortie générée par ls
ls | grep "fichier.txt"
>

Redirige la sortie vers un fichier.

Crée le fichier s'il n'existe pas et le remplace s'il existe déjà.

# Crée le fichier fichier.txt, contenant la liste des fichiers renvoyés par ls
ls > fichier.txt
>>

Redirige la sortie vers un fichier.

Crée le fichier s'il n'existe pas, le complète s'il existe déjà.

# Crée le fichier fichier.txt puis le complète à partir des informations sur l'espace disque (df)
ls > fichier.txt ; df >> fichier.txt
>|

Force la redirection de la sortie standard vers un fichier, même si le fichier est en lecture seule

# Ecrit le fichier "fichier.txt" même s'il existe déjà en lecture seule
echo "Hello" >| "fichier.txt"
>!

Redirige la sortie standard vers un fichier existant, même si le fichier est en lecture seule.

Cette fonction permet d'éviter les avertissements de sécurité de lecture seule, par rapport à la fonction ">|"

# Crée/remplace "fichier.txt" par le contenu du répertoire même si le fichier est en lecture seule. Le fichier doit cependant déjà exister.
ls >! "fichier.txt"
2>

Redirige les erreurs standards (stderr) d'une commande vers un fichier, et le remplace s'il existe déjà.

Pour ne pas afficher le message d'erreur système, on peut le diriger vers le flux null (/dev/null), qui est une sorte de poubelle pour les données.

# Affiche le contenu d'un fichier. Comme celui n'existe pas, écrit l'erreur générée par la commande dans le fichier erreur.txt
cat "inexistant.txt" 2>"erreur.txt"

# Si fichier.txt existe, son contenu est envoyé sur fichier2.txt, sinon l'erreur est envoyé dans erreur.txt
cat "fichier.txt" > "fichier2.txt" 2>"erreur.txt"

# Si le répertoire n'existe pas, n'affiche pas l'erreur système
ls /inexistant 2>/dev/null
2>>

Redirige les erreurs standards (stderr) d'une commande vers un fichier, et le complète s'il existe déjà.

# En lançant la commande 2 fois, l'erreur est enregistrée 2 fois dans le fichier erreur.txt
cat "inexistant.txt" 2>>"erreur.txt"
&>
ou
>&

Redirige la sortie standard (stdout) et les erreurs standards (stderr) vers un fichier, et le remplace s'il existe déjà.

# Si fichier.txt existe, fichier2.txt contiendra le même texte. Sinon, il contiendra l'erreur générée par la commande "cat"
cat "fichier.txt" &> "fichier2.txt"
&>>

Redirige la sortie standard (stdout) et les erreurs standards (stderr) vers un fichier, et le complète s'il existe déjà.

# Crée le fichier "fichier.txt" avec le contenu du répertoire, puis le complète avec à nouveau le même contenu du répertoire
ls > "fichier.txt" ; ls &>> "fichier.txt"
>( commande )

Redirige l'entrée standard d'une commande à partir du résultat d'une autre commande en tant que fichier temporaire.

Cette commande peut fonctionner à partir d'une liste de fichiers.

A noter que cette syntaxe est nommée "opérateur de substitution de processus" et peut être utilise sur des sorties volumineuses, afin d'utiliser un fichier temporaire.

# Redirige l'entrée la sortie de la commande "ls" vers l'entrée de la commande "grep", en utilisant un fichier temporaire
ls > >(grep "fichier.txt")
<( commande )

Redirige la sortie standard d'une commande vers l'entrée d'une autre commande en tant que fichier temporaire.

# Les sorties "a b" et "a c" sont envoyées à la commande "diff"
diff <(echo -e "a\nb") <(echo -e "a\nc")
2>&1

Redirige la sortie d'erreur vers la sortie standard.

# La commande grep reçoit le contenu renvoyé par "ls", que ce soit le fichier ou l'erreur "No such file or directory"
ls "inexistant.txt" 2>&1 | grep "No such file"
|&

Redirige vers la commande suivante à la fois les erreurs standards et la sortie standard.

La principale différence avec la commande précédente est que celle-ci crée un processus sous-jacent pour gérer la redirection des deux sorties (dans certains cas, cela peut entraîner des problèmes de performance ou de compatibilité).

# La commande grep reçoit le contenu renvoyé par "cat", que ce soit le fichier ou l'erreur "No such file or directory"
cat "inexistant.txt" |& grep "No such file"

Redirections des entrées

L'entrée des commandes peut être manipulée au moyen de quelques caractères spéciaux.

Caractère
Description
Exemple
<

Redirige l'entrée d'une commande à partir d'un fichier.

# Affiche sur la sortie le contenu trié du fichier
sort < "fichier.txt"

# Un équivalent
cat "fichier.txt" | sort
<<<

Redirige l'entrée d'une commande à partir d'une chaîne de caractères.

# Recherche "b" dans la chaîne "a b c"
grep "b" <<< "a b c"
<<

Redirige l'entrée d'une commande à partir d'une chaîne de caractères multilignes et délimitée.

# Affiche "Hello, world!" avec un retour chariot entre les deux mots
cat << DEBUT
Hello,
world!
DEBUT

Autres fonctions

D'autres caractères spéciaux ont des fonctionnalités sans aucun rapport avec l'entrée-sortie, comme des conditions d'enchaînement par exemple.

Caractère
Description
Exemple
&

Lance un processus en arrière-plan (sans bloquer le terminal).

# Attend 60 secondes en fond de tâche, sans bloquer le terminal
sleep 60 &
;

Exécute une autre commande après la fin de la première, qu'elle ait réussi ou non

# Se place dans le répertoire /opt puis liste les fichiers
cd /opt ; ls
&&

Exécute plusieurs commandes consécutivement, seulement si la précédente s'est bien déroulée.

# Se place dans le répertoire /opt et liste les fichiers seulement s'il existe
cd /opt && ls
||

Exécute plusieurs commandes consécutivement, seulement si la précédente s'est mal déroulée.

# Se place dans le répertoire /inexistant et liste les fichiers seulement si la commande a échoué (un message d'erreur est affiché par la commande en erreur)
cd /inexistant || echo "Erreur !"

# Exécute la même commande mais redirige l'erreur standard vers /dev/null
cd /inexistant 2>/dev/null || echo "Erreur !"
!!

Réexécute la dernière commande exécutée.

# Exécute 2 fois l'affichage du répertoire courant
ls ; !!
Dernière modification le 15/04/2023 - Quillevere.net

Commentaires

Aucune inscription n'est requise si vous souhaitez

Rechercher sur le site

fr en rss RSS info Informations