Ce qui suit est un peu simplifié pour aider les nouveaux utilisateurs.
Eh bien, tout d’abord, il est nécessaire de comprendre le concept d’entrée standard et de sortie standard.
Sous Linux et d'autres systèmes d'exploitation de type UNIX, chaque processus a une entrée standard ( stdin
) et une sortie standard ( stdout
). La situation habituelle est celle de stdin
votre clavier et celle de stdout
votre écran ou de votre terminal.
Ainsi, lorsque vous exécutez ls
, il renvoie sa sortie à stdout
. Si vous ne faites rien d’autre, il s’affichera sur votre écran ou votre terminal.
Désormais, certaines commandes Linux interagissent avec l'utilisateur et l'utilisent stdin
, notamment l'éditeur de texte. Il lit à partir de stdin
pour accepter vos frappes au clavier, faire des choses, puis écrit des choses à stdout
.
Cependant, il existe également des commandes non interactives ou "filtre" qui ne fonctionnent PAS de manière interactive, mais qui nécessitent un tas de données. Ces commandes vont prendre tout ce qu’il stdin
a, faire quelque chose, puis le jeter àstdout
Regardons une autre commande appelée du
- représente l'utilisation du disque. du /usr
, par exemple, affichera ( stdout
comme toute autre commande Linux) une liste de tous les fichiers de ce répertoire et sa taille:
# du /usr
2312 /usr/games
124 /usr/lib/tc
692 /usr/lib/rygel-1.0
400 /usr/lib/apt/methods
40 /usr/lib/apt/solvers
444 /usr/lib/apt
6772 /usr/lib/gnash
Comme vous pouvez le constater dès le départ, il n’est pas trié et vous souhaitez probablement le faire par ordre de taille.
sort
est l’une de ces commandes "filter" qui vont prendre un tas de choses stdin
et les trier.
Donc, si on fait ça:
# du /usr | sort -nr
nous obtenons ceci, qui est un peu mieux:
4213348 /usr
2070308 /usr/lib
1747764 /usr/share
583668 /usr/lib/vmware
501700 /usr/share/locale
366476 /usr/lib/x86_64-linux-gnu
318660 /usr/lib/libreoffice
295388 /usr/lib/vmware/modules
290376 /usr/lib/vmware/modules/binary
279056 /usr/lib/libreoffice/program
216980 /usr/share/icons
Et vous pouvez maintenant voir que le "tuyau" connecte la stdout
commande d'une commande à la commande stdin
d'une autre. En règle générale, vous l'utiliserez dans des situations telles que celle où vous souhaitez filtrer, trier ou manipuler de toute autre manière la sortie d'une commande. Ils peuvent être mis en cascade si vous souhaitez traiter la sortie via plusieurs commandes de type filtre.
Si vous tapez sort
seul, il essaiera toujours de lire stdin
. Puisque stdin
est connecté à votre clavier, il attendra que vous tapiez et traitiez les choses jusqu'à ce que vous appuyiez sur Ctrl-D. Cela ne vous le demandera pas car ce n'est pas vraiment fait pour être utilisé de manière interactive.
Il est possible qu'un programme indique s'il stdin
est interactif ou non. Certains programmes peuvent donc agir différemment si vous les publiez eux-mêmes ou à la fin d'un tuyau.
En outre, si vous programmez un programme qui ne fonctionne que de manière interactive, vous vi
passerez un mauvais moment.
Les pipes diffèrent de la redirection en ce sens que les données sont brassées d'une commande à l'autre sans être stockées nulle part. Ainsi, dans l'exemple ci-dessus, du
la sortie de n'est pas stockée nulle part. La plupart du temps, vous ne le souhaitez pas avec les pipes, car l’utilisation des pipes a pour but de traiter la sortie d’une commande, mais il existe une commande tee
qui vous permet d’avoir votre gâteau et de le manger aussi. copier ce qu’il reçoit stdin
dans les deux stdout
fichiers et dans un fichier de votre choix. Vous pouvez aussi probablement le faire bash
avec une syntaxe mystérieuse impliquant des esperluettes et des crochets que je ne connais pas.
|
est qu’elle n’utilise pas de nom. La sortie de la commande à main gauche est directement transmise à l’entrée de la commande située du côté droit du tuyau.