Skip to content

Entrée et Sortie dans Linux

Dans Linux, l'entrée et la sortie sont des concepts essentiels qui vous permettent d'interagir avec le système et de traiter des données. Comprendre comment fonctionnent l'entrée et la sortie dans l'environnement Linux est crucial pour travailler efficacement dans le terminal.

Entrée Standard, Sortie Standard et Erreur Standard

Il existe trois flux standard dans Linux : STDIN (Entrée Standard), STDOUT (Sortie Standard) et STDERR (Erreur Standard). Ces flux sont utilisés pour gérer l'entrée, la sortie et les messages d'erreur lors de l'exécution de programmes et de commandes.

  • STDIN est le flux d'entrée standard qui lit les données du clavier ou d'un autre programme. Le numéro 0 représente le flux STDIN.
  • STDOUT est le flux de sortie standard qui affiche la sortie d'un programme ou d'une commande. Le numéro 1 représente le flux STDOUT.
  • STDERR est le flux d'erreur standard qui affiche les messages d'erreur et les informations de diagnostic. Le numéro 2 représente le flux STDERR.

Par défaut, STDIN est connecté au clavier, et STDOUT et STDERR sont connectés au terminal. Cela signifie que lorsque vous exécutez une commande dans le shell, l'entrée provient du clavier, et la sortie et les messages d'erreur sont affichés sur le terminal.

Une bonne pratique consiste à séparer les messages d'erreur de la sortie régulière afin que vous puissiez facilement identifier et gérer les erreurs. Mais certains programmes peuvent ne pas suivre cette convention, et les messages d'erreur peuvent être mélangés à la sortie régulière.

Redirection d'Entrée

Dans Linux, la redirection d'entrée vous permet de contrôler d'où provient l'entrée. Par défaut, lorsque vous exécutez une commande dans le shell, STDIN est connecté au clavier.

La redirection d'entrée vous permet de changer l'origine de l'entrée de la commande. Vous pouvez rediriger l'entrée pour qu'elle provienne d'un fichier au lieu du clavier.

Pour rediriger l'entrée afin qu'elle provienne d'un fichier, vous utilisez le symbole inférieur à (<) suivi du nom du fichier. Par exemple, pour lire l'entrée à partir d'un fichier appelé input.txt, vous utiliseriez la commande suivante :

sh
command < input.txt

Voici un exemple de fonctionnement de la redirection d'entrée dans des scénarios réels. Supposons que vous avez un fichier nommé data.txt qui contient une liste de noms et que vous voulez compter le nombre de noms dans le fichier en utilisant la commande wc. Au lieu de taper manuellement chaque nom dans le terminal, vous pouvez rediriger l'entrée pour qu'elle provienne du fichier. En exécutant la commande wc -l < data.txt, la commande wc lira le contenu de data.txt comme entrée et comptera le nombre de lignes, ce qui représente le nombre de noms dans le fichier. De cette façon, vous économisez du temps et des efforts en n'ayant pas à saisir manuellement les noms. Le contenu du fichier data.txt pourrait ressembler à ceci :

John Doe
Jane Smith
Michael Johnson
Emily Brown
William Davis

Dans ce cas, le fichier contient une liste de 5 noms, chacun sur une ligne séparée. En redirigeant l'entrée pour qu'elle provienne du fichier, la commande wc comptera le nombre de lignes dans le fichier et affichera le résultat.

Le double symbole inférieur à (<<) est utilisé pour un document "here", qui vous permet de fournir une entrée à une commande de manière interactive. Par exemple :

sh
command << EOF
Ceci est une entrée.
EOF

Dans ce cas, l'entrée est fournie de manière interactive entre les marqueurs << et EOF. Cela peut être utile lorsque vous devez fournir plusieurs lignes d'entrée à une commande.

Redirection de Sortie

La redirection de sortie vous permet de changer où la commande envoie sa sortie. Vous pouvez rediriger la sortie vers un fichier au lieu du terminal.

Pour rediriger la sortie vers un fichier, vous utilisez le symbole supérieur à (>) suivi du nom du fichier. Par exemple, pour rediriger la sortie vers un fichier appelé output.txt, vous utiliseriez la commande suivante :

sh
command > output.txt

Remarque : > est une simplification de 1>, qui redirige STDOUT vers un fichier. Si vous voulez rediriger STDERR vers un fichier, vous pouvez utiliser 2>.

Si vous voulez ajouter la sortie à un fichier existant au lieu de l'écraser, vous pouvez utiliser le double symbole supérieur à (>>) au lieu du symbole supérieur à simple (>). Par exemple :

sh
command >> output.txt

Le symbole esperluette (&) fait référence à un descripteur de fichier. Dans le contexte de la redirection de sortie, 1 représente STDOUT, et 2 représente STDERR. En combinant les descripteurs de fichier avec les symboles de redirection, vous pouvez rediriger à la fois STDOUT et STDERR vers le même fichier. Par exemple :

sh
command > output.txt 2>&1

Décomposons la commande :

  • command est la commande que vous voulez exécuter.
  • > (identique à 1>) redirige le flux STDOUT vers le fichier output.txt.
  • 2> redirige le flux STDERR quelque part.
  • &1 fait référence au descripteur de fichier 1, qui est STDOUT.

En combinant 2> et &1, vous redirigez STDERR vers le même emplacement que STDOUT, qui dans ce cas est le fichier output.txt.

Combinaison de la Redirection d'Entrée et de Sortie

Vous pouvez combiner la redirection d'entrée et de sortie pour à la fois lire à partir d'un fichier et écrire dans un fichier en même temps. Par exemple :

sh
command < input.txt > output.txt

En utilisant la redirection d'entrée et de sortie, vous pouvez contrôler d'où provient l'entrée et où va la sortie, rendant vos commandes shell plus flexibles et puissantes.

Utilisation des Tubes pour Connecter les Commandes

Les tubes sont une fonctionnalité puissante dans Linux qui vous permettent de connecter plusieurs commandes et de créer des séquences de commandes complexes. L'utilisation des tubes peut grandement améliorer votre productivité et votre efficacité lorsque vous travaillez dans le terminal.

Un tube est représenté par le symbole barre verticale |. Il permet de rediriger la sortie d'une commande comme entrée d'une autre commande. Cela vous permet d'enchaîner plusieurs commandes et d'effectuer des opérations sur les données qui circulent entre elles.

Par exemple, supposons que vous avez un répertoire avec un grand nombre de fichiers texte et que vous voulez trouver le nombre de mots pour chaque fichier. Vous pouvez utiliser la commande ls pour lister tous les fichiers du répertoire, puis rediriger la sortie vers la commande wc pour compter les mots. La commande ressemblerait à ceci :

sh
ls | wc -w

Dans cet exemple, la commande ls liste tous les fichiers du répertoire et le symbole de tube | redirige la sortie vers la commande wc. La commande wc compte ensuite les mots dans l'entrée et affiche le résultat.

Les tubes peuvent être utilisés avec n'importe quelle commande qui produit une sortie. Ils vous permettent de créer des combinaisons puissantes de commandes et d'effectuer des tâches complexes avec facilité.

Un autre cas d'utilisation courant des tubes est le filtrage et le traitement de texte. Par exemple, vous pouvez utiliser la commande grep pour rechercher un modèle spécifique dans un fichier, puis rediriger la sortie vers la commande sort pour trier les lignes. La sortie résultante peut ensuite être redirigée vers un nouveau fichier ou affichée à l'écran.

Voici un exemple :

sh
grep 'error' log.txt | sort > errors.txt

Dans cet exemple, la commande grep recherche les lignes contenant le mot error dans le fichier log.txt, et le tube redirige la sortie vers la commande sort. La commande sort trie ensuite les lignes par ordre alphabétique et le symbole > redirige la sortie vers le fichier errors.txt.

L'utilisation des tubes pour connecter les commandes vous permet de construire des séquences de commandes complexes et d'automatiser des tâches répétitives. Cela vous donne la flexibilité d'effectuer des opérations sur la sortie d'une commande avant de la transmettre à la commande suivante, vous permettant de créer de puissants pipelines de données.

Conclusion

L'entrée et la sortie sont des concepts fondamentaux dans Linux qui vous permettent d'interagir avec le système et de traiter des données. En comprenant comment fonctionnent la redirection d'entrée et de sortie, les tubes et les flux, vous pouvez travailler plus efficacement dans le terminal et effectuer une large gamme de tâches efficacement.