Il est temps pour quelques bases de Linux. Parce que la chose la plus importante dans tous les domaines est :Ayez vos bases droites ! Parlons donc des tubes et de la redirection sous Linux .
Que sont les canaux et la redirection sous Linux ?
Redirection
Chaque processus sous Linux dispose d'au moins 3 canaux de communication disponibles :
- Entrée standard - STDIN
- Sortie standard - STDOUT
- Erreur standard :STDERR
Le noyau lui-même configure ces canaux pour le compte du processus. Le processus lui-même ne sait pas nécessairement où ils mènent. La plupart des commandes Linux acceptent les entrées de STDIN et écrire la sortie dans STDOUT . Les messages d'erreur sont écrits dans STDERR . Cela vous permet de connecter des commandes ensemble pour créer des pipelines.
Le Shell utilise les symboles < ,> et >> en tant qu'instructions pour rediriger les instructions d'une entrée ou d'une sortie de commande vers ou depuis un fichier. Le < le symbole connecte le STDIN de la commande au contenu d'un fichier existant. Le > et le >> symboles redirigent STDOUT . > remplace le contenu existant du fichier et le >> des symboles leur sont ajoutés.
Regardons quelques exemples.
La commande suivante stocke le texte que vous tapez entre les " " dans un fichier. Si le fichier n'existe pas, il sera créé.
echo "Test Message" > testmessage
La commande suivante enverrait un e-mail avec le contenu de ce fichier, donc uniquement le texte, pas le fichier lui-même, à l'utilisateur Peter.
mail -s "testmsg" peter < testmessage
Un exemple avec la commande find
Si nous utilisons la commande find, nous obtenons une belle démonstration de la raison pour laquelle vous voudriez gérer STDOUT et STDERR séparément. Si nous lançons la commande suivante :
find / -name core
Nous recevons généralement beaucoup de messages d'erreur d'autorisation refusée. Pour supprimer tous ces messages d'erreur, vous pouvez exécuter la commande suivante à la place :
find / -name core 2> /dev/null
Ce qui nous donne un résultat beaucoup plus propre.
Tuyaux
Si nous voulons connecter certaines commandes, ou plus précisément le STDOUT d'une commande et le STDIN d'une autre, nous pouvons utiliser le symbole Pipe | pour faire ça. Faisons un exemple :
ls | head -4
Ce que cela fait, c'est qu'il connecte la commande ls avec la commande head via le Pipe | . Cela signifie qu'il exécute le ls commande avec la tête -4 extensions, répertoriant uniquement les 4 premiers fichiers de ce dossier. Vous pouvez également continuer et diriger une autre commande à la fin de celle-ci.
Si vous voulez que la deuxième commande ne soit exécutée que lorsque la première a réussi, vous pouvez utiliser le && symboles pour cela. Par exemple :
lpr /tmp/test && rm /tmp/test
Ne supprimerait le fichier de test que s'il avait d'abord été mis en file d'attente avec succès pour l'impression.
D'autre part, le || commande n'exécuterait la deuxième commande que si la première commande échouait.
Conclusion
Si vous travaillez régulièrement avec Linux, il est très important de savoir ce que font Pipes and Redirection sous Linux. Vous les utiliserez beaucoup si vous devez travailler sur la ligne de commande. Je ferai plus de ces morceaux plus courts de Linux Basics à l'avenir. Je ne veux pas que ces articles soient trop longs pour que vous puissiez assimiler les informations plus facilement. Consultez également d'autres didacticiels Linux et Open Source !