Un tube de communication, ou pipe en anglais, permet de faire communiquer 2 commandes.
Ce "tube" est représenté par la barre verticale "|".
Le résultat de la commande de gauche est envoyé dans le tube et récupéré par la commande de droite.
C'est à dirte que la sortie standard "1" de la commande de gauche est connecté directement à l'entrée standard "0" de la commande de droite.
La sortie d'erreur standard "2" de la commande de gauche n'est pas envoyée dans le tube.
Pour que cette utilisation est un sens il faut impérativement que la commande de gauche utilise la sortie standard "1" et que la commande de droite utilise l'entrée standard "0".
Les commandes lisant leur entrée standard sont facilement identifiable car elles demandent une saisie au clavier.
Envoyer par mail la liste des users connectés :
$ who | mail toto
Envoyer par mail la liste des fichiers d'un répertoire :
$ ls -lht | mail toto
Envoyer un message à un utilisateur connecté au système :
$ echo "coucou, comment vas tu ?" | write tata
Afficher le nombre de fichiers d'un répertoire :
$ ls | wc -l
29
Envoyer par mail le nombre de fichiers d'un répertoire :
$ ls | wc -l | mail toto
Afficher avec pagination le contenu d'un fichier :
$ cat /etc/passwd | more
Lister le contenu d'un répertoire avec pagination :
$ ls -lht /etc | more
Afficher uniquement certains éléments d'un fichier :
$ cat /etc/passwd | grep root | cut -d':' -f1,7
root:/bin/bash
Envoyer par mail certains éléments d'un fichier :
$ cat /etc/passwd | grep root | cut -d':' -f1,7 | mail toto
Afficher à l'écran et enregistrer dans un fichier le contenu d'un répertoire :
$ ls -t | tee listeFichiers
listeFichiers
envoiMail.sh
message
script.sh
$ cat listeFichiers
listeFichiers
envoiMail.sh
message
script.sh
Il est donc tout à fait possible de cumuler autant de commandes que l'on souhaite à partir du moment où l'on respecte l'ordre des commandes et des sorties / entrées standard.
$ ls -l /root 2>&1 | tee listeFichiers
ls: impoossible d'ouvrir le répertoire /root: Permission non accordée
$ cat listeFichiers
ls: impoossible d'ouvrir le répertoire /root: Permission non accordée