Comprendre les flux d'entrée/sortie sous Linux
Chaque commande exécutée dispose de trois flux de données
- STDIN (0) - Entrée standard, descripteur 0
- STDOUT (1) - Sortie standard, descripteur 1, représentée par &1
- STDERR (2) - Erreur standard, descripteur 2
Ces flux peuvent être manipulés via des redirections ou des tubes.
< : Redirige le contenu d'un fichier vers l'entrée standard. Cette syntaxe est peu fréquente car les commandes nécessitant une entrée standard sont généralement capables de lire directement. De plus, la lecture depuis STDIN ne permet pas d'obtenir le nom du fichier source.
# Affiche le contenu de fichier_sortie avec cat
cat < fichier_sortie
# Recherche 'redis' dans fichier_sortie
grep redis < fichier_sortie
# Exemple d'utilisation pratique
# docker cp peut extraire une archive tar depuis l'entrée standard
# et la copier vers le répertoire spécifié dans le conteneur
docker cp - conteneur:/opt < archive.tar
> : Redirige la sortie standard vers un fichier, en écrasant son contenu
# Redirige le résultat de ls vers fichier_sortie
ls > fichier_sortie
# Équivalent ci-dessus. Le 1 devant > représente la sortie standard et peut être omis
ls 1> fichier_sortie
# Aucune sortie ne s'affiche car le résultat est redirigé vers fichier_sortie
# asdjkfhka est un répertoire inexistant, une erreur s'affiche à l'écran
# car seule la sortie standard est redirigée, pas les erreurs
ls asdjkfhka > fichier_sortie
# Redirige à la fois la sortie standard ET les erreurs vers fichier_sortie
ls asdjkfhka > fichier_sortie 2> fichier_sortie
# Redirige la sortie standard vers fichier_sortie, les erreurs vers la sortie standard
# &1 doit être collé à 2> sinon une erreur survient
# La redirection de la sortie standard doit être définie en premier
# car la redirection des erreurs la référence
ls asdjkfhka > fichier_sortie 2>&1
# &1 désigne le flux de sortie standard. Sans le &, il serait interprété
# comme un nom de fichier et redirigé vers un fichier nommé '1'
>> : Ajoute la sortie standard à la fin d'un fichier existant
# Ajoute le résultat de ls à la fin de fichier_sortie
ls >> fichier_sortie
| : Redirige la sortie standard de la commande précédente vers l'entrée standard de la commande suivante
# Redirige la sortie de ls vers less pour une lecture paginée
ls | less
# Cas d'utilisation fréquent
ps -ef | grep redis
# La sortie de ls est redirigée vers cat, qui l'écrit dans resultat
ls | cat > resultat
# dkjfahgf est un fichier inexistant, le tube ne redirige pas
# les erreurs de ls vers cat, elles s'affichent directement
ls dkjfahgf | cat > erreurs
Sources :