GNU/Linux >> Tutoriels Linux >  >> Linux

Que signifie le symbole du tuyau linux | fais?

Si vous êtes à l'aise avec la redirection de sortie et d'entrée, l'explication est vraiment très simple.

Command1 | Command2

fait la même chose que

Command1 > tempfile
Command2 < tempfile

mais sans tempfile . La sortie de Command1 est directement relié à l'entrée de Command2 et le transfert s'effectue en mémoire.


Ce qui suit est un peu simplifié pour aider les nouveaux utilisateurs.

Eh bien, 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 que stdin est votre clavier et stdout est votre écran ou votre fenêtre de terminal.

Ainsi, lorsque vous exécutez ls , il lancera sa sortie à stdout . Si vous ne faites rien d'autre, il ira à votre écran ou à la fenêtre du terminal et vous le visualiserez.

Désormais, certaines commandes Linux interagissent avec l'utilisateur et utilisent stdin pour ce faire, votre éditeur de texte en fait partie. Il lit à partir de stdin pour accepter vos frappes, faire des choses, puis écrire des choses dans stdout .

Cependant, il existe également des commandes non interactives ou "filtre" qui ne fonctionnent PAS de manière interactive, mais qui nécessitent un ensemble de données. Ces commandes prendront tout stdin a, faites quelque chose, puis lancez-le à stdout

Regardons une autre commande appelée du - représente l'utilisation du disque. du /usr , par exemple, imprimera (à 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 voir dès le départ, il n'est pas trié et vous voulez probablement qu'il soit trié par ordre de taille.

sort est l'une de ces commandes de "filtre" qui prendra un tas de choses de stdin et triez-le.

Donc, si nous faisons ceci :

# du /usr | sort -nr

on obtient 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" relie le stdout d'une commande au stdin d'un autre. En règle générale, vous l'utiliserez dans des situations comme celle-ci où vous souhaitez filtrer, trier ou manipuler 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 par lui-même, il essaiera toujours de lire à partir de stdin . Depuis stdin est connecté à votre clavier, il vous attendra pour taper et traiter les choses jusqu'à ce que vous appuyiez sur Control-D. Il ne vous demandera pas car il n'est pas vraiment destiné à être utilisé de manière interactive.

Il est possible qu'un programme dise si stdin est interactif ou non, certains programmes peuvent donc agir différemment si vous les lancez seuls ou au bout d'un tuyau.

En outre, diriger un programme qui ne fonctionne que de manière interactive, comme vi , vous fera passer un mauvais moment.

Les canaux sont différents de la redirection en ce sens que les données sont mélangées d'une commande à l'autre sans être stockées nulle part. Ainsi, dans l'exemple ci-dessus, du La sortie de n'est stockée nulle part. La plupart du temps, vous ne voulez pas cela avec des canaux car la raison d'utiliser des canaux est de traiter la sortie d'une commande d'une manière ou d'une autre - mais il existe une commande tee qui vous permet d'avoir votre gâteau et de le manger aussi, il copiera ce qu'il reçoit de stdin aux deux stdout et un fichier de votre choix. Vous pouvez aussi probablement le faire à partir de bash avec une syntaxe obscure impliquant des esperluettes et des crochets que je ne connais pas.


Vraiment, si vous voulez savoir ce que font les pipes et la différence entre> et |, alors allez dans un répertoire avec beaucoup de fichiers, et

depuis un terminal ls contre ls | more (ou le faire depuis Windows avec DIR et DIR | MORE)

Si vous avez utilisé> more, vous verrez qu'il crée un fichier appelé 'more' plutôt que d'envoyer la sortie de ls à la commande 'more'. Donc, si quelqu'un en faisait> plus, ce serait probablement une erreur, on ne ferait pas> plus que vous feriez> file1. More est une commande bien connue.

Le sert aussi à lier une commande et un fichier, plutôt qu'une commande à une commande. Mais tandis que> envoie la sortie d'une commande à un fichier, le

$ grep a

$ fichier chat1 | grep aabc

grep avec 2 paramètres se présente sous la forme d'un fichier de modèle grep. grep avec un paramètre est grep pattern. Et vous pouvez lui envoyer le fichier en y transférant le contenu du fichier ou en utilisant <. Si vous utilisez <, vous écrivez d'abord le nom de la commande, puis le nom du fichier après la commande

De plus, de nombreuses commandes prennent de toute façon un fichier en entrée, donc grep a file1 fonctionnera, tout comme cat file1 | grep un, et grep un

Je faisais des pipes (|) et> sur DOS il y a même 15 ans.

Pour résumer comment | diffère de - Le tube se situe entre 2 commandesLes se situent entre une commande et un fichier. Le> est sorti dans un fichier. Le


Linux
  1. Maîtrisez la commande Linux ls

  2. Que signifie la sortie de Ps ?

  3. Que signifie - dans cette commande Linux ?

  4. Quel est l'équivalent du ~ (tilde) de Linux dans Windows ?

  5. Que fait le -e dans un bash shebang ?

ExplainShell - Trouvez ce que fait chaque partie d'une commande Linux

Seashells - Canalisez la sortie de votre commande Linux vers le Web en temps réel

Que signifie la commande Cat sous Linux ?

La commande timer sous Linux

Que sont les tuyaux sous Linux ? Comment fonctionne la redirection de tuyau ?

Qu'est-ce que la commande kill sous Linux ?