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éro0
représente le fluxSTDIN
.STDOUT
est le flux de sortie standard qui affiche la sortie d'un programme ou d'une commande. Le numéro1
représente le fluxSTDOUT
.STDERR
est le flux d'erreur standard qui affiche les messages d'erreur et les informations de diagnostic. Le numéro2
représente le fluxSTDERR
.
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 de1>
, qui redirigeSTDOUT
vers un fichier. Si vous voulez redirigerSTDERR
vers un fichier, vous pouvez utiliser2>
.
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 fluxSTDOUT
vers le fichieroutput.txt
.2>
redirige le fluxSTDERR
quelque part.&1
fait référence au descripteur de fichier1
, qui estSTDOUT
.
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.