Canalisation et réacheminement

Quelle est la différence exacte entre la tuyauterie et la Redirection ?

où devrions-nous utiliser la tuyauterie et où devrions-nous utiliser la redirection ?

Comment fonctionnent-ils à l'interne ?

23
demandé sur Vikram 2012-03-04 12:59:48

5 réponses

Redirection est (surtout) pour les fichiers (vous rediriger les flux vers/à partir de fichiers).

Tuyauterie est pour les processus: vous pipe (redirection) des flux d'un processus à un autre.

essentiellement, ce que vous faites vraiment est de" connecter "un flux standard (habituellement stdout ) d'un processus au flux standard d'un autre processus (habituellement stdin ) par l'intermédiaire de tuyaux.

Pipes ont également le synchronisation effet secondaire": ils bloquent un processus (en lecture) lorsque l'autre n'a rien à écrire (encore) ou lorsque la lecture du processus ne peut pas lire assez rapide (lorsque le tampon du tuyau est plein).

25
répondu sirgeorge 2016-03-02 03:15:25

Tuyauterie dirige la sortie d'un programme à l'autre.

par exemple:

ls * | grep "name"

Pipes les noms de tous les fichiers du répertoire courant vers grep. Re-direction dirige ou ajoute la sortie à un fichier.

ls * > file  # writes all file names in current directory to the "file"
ls * >> file # appends all files names in current directory to the "file"
La tuyauterie

vous évite d'avoir à écrire dans un fichier, puis à lire à partir d'un fichier pour exécuter un programme sur la sortie d'un autre programme.

ls * > file
grep "name" file

est équivalent à

ls * | grep "name"

quant à la façon dont ils fonctionnent à l'interne, Je ne fais qu'apprendre que mon moi maintenant. Mais j'ai trouvé ce lien qui offre quelques discussions à ce sujet.

Comment fonctionne la tuyauterie sous Linux?

vous devez utiliser la tuyauterie si vous voulez passer des sorties entre les programmes; utilisez la redirection si vous voulez écrire dans un fichier.

6
répondu kiwicomb123 2017-05-23 12:10:21

Redirection: envoyer la sortie ( stdout et/ou stderr ) d'une commande vers un fichier Exemple: ls > your_file Ecrire le résultat de l'inscription dans un répertoire à un fichier nommé your_file

tuyauterie: envoyer la sortie à une autre commande. Exemple ls | wc envoyer la même sortie (liste du répertoire) à la commande wc qui comptent les caractères.

1
répondu Guillaume Poussel 2012-03-04 09:07:21

j'ai remarqué que le pipelage s'applique à la sortie de la substitution de processus, mais pas à la redirection:

bash-3.2$ echo $'one\ntwo\nthree' | tee >(grep o) | cat > pipe
bash-3.2$ echo $'one\ntwo\nthree' | tee >(grep o) > redirect
bash-3.2$ one
two

bash-3.2$ cat pipe
one
two
three
one
two
bash-3.2$ cat redirect
one
two
three
1
répondu robert 2016-03-11 18:47:24

essentiellement la redirection et la tuyauterie sont quelques-uns des moyens parmi beaucoup pour atteindre la communication inter-processus dans Unix.

  1. Redirection : les données sont écrites et lues à partir d'un fichier UNIX typique. Plusieurs procédés peuvent interagir. ce doit être utilisé lors du partage de grands ensembles de données.

ls > FileName

  1. Tuyauterie : la Tuyauterie est un processus par lequel le produit d'un processus est en fait l'entrée d'un autre. Qu'ils ont évolué dans les formes les plus primitives du système d'exploitation Unix. Ils assurent un flux unidirectionnel de communication entre les processus d'un même système. Une pipe est créée en invoquant l'appel de système de pipe, qui crée une paire de descripteurs de fichier. [ Pour les descripteurs de fichier Lire http://www.bottomupcs.com/file_descriptors.html ]

ls | grep $myName

il fonctionne sur le partage simple de données, tels que le producteur et le consommateur.

comparaison de propriétés: la tuyauterie est toujours unidirectionnelle tandis que la redirection peut être utilisée pour rediriger l'entrée aussi bien que la sortie.

ls > grep myFileName [ redirection de la sortie de la première commande vers une commande ultérieure ] sort < fileName.txt [ Redirection de nom de fichier.fichier txt comme une entrée de commande de tri ]

On peut aussi écrire ci-dessous pour utiliser la redirection bi-directionnelle dans l'énoncé simple.

sort < fileName.txt > sortNewFile.txt

tandis que Piping , il est toujours sortie de première commande fournie à la dernière et celle à simulanoeously.

ls | grep myName | awk '{ print $NF }' [*multiples dans un seul énoncé ]

Note 1: command > fileName . S'il y a une commande appelée fileName , cela rendrait l'utilisation de la redirection beaucoup plus difficile et plus les risques d'erreurs. Il faut d'abord vérifier s'il y a une commande nommée comme fichier de destination.

les autres moyens de réaliser la CIB dans le système Unix sont:

  1. Pipe dénommée
  2. Signal
  3. mémoire partagée
  4. Socket
0
répondu Piyush Baijal 2015-05-21 10:46:57