Tuberías y Redirección


¿Cuál es la diferencia exacta entre la tubería y la redirección ?

¿Dónde debemos usar la tubería y dónde debemos usar la redirección ?

¿Cómo funcionan internamente?

Author: Vikram, 2012-03-04

5 answers

Redirection es (principalmente) para archivos (redirecciona flujos hacia/desde archivos).

Piping es para procesos: canaliza (redirecciona) flujos de un proceso a otro.

Esencialmente lo que realmente haces es "conectar" un flujo estándar (generalmente stdout) de un proceso a un flujo estándar de otro proceso (generalmente stdin) a través de una tubería.

Las tuberías también tienen el sincronización "efecto secundario": bloquean un proceso (al leer) cuando el otro no tiene nada para escribir (todavía) o cuando el proceso de lectura no puede leer lo suficientemente rápido (cuando el búfer de la tubería está lleno).

 25
Author: sirgeorge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-02 03:15:25

Piping dirige la salida de un programa a otro programa.

Por ejemplo:

ls * | grep "name"

Canaliza los nombres de todos los archivos en el directorio actual a grep. Re-direction dirige o añade la salida a un archivo.

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 tubería le ahorra la molestia de tener que escribir en un archivo, luego leer desde un archivo para ejecutar un programa en la salida de otro programa.

ls * > file
grep "name" file

Es equivalente a

ls * | grep "name"

En cuanto a cómo funcionan internamente, solo estoy aprendiendo que mi yo ahora. Pero encontré este enlace que ofrece alguna discusión al respecto.

¿Cómo Funciona la Tubería en Linux?

Debe usar piping si desea pasar salidas entre programas; use redirección si desea escribir en un archivo.

 6
Author: kiwicomb123,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:21

Redirección: envía la salida (stdout y / o stderr) de un comando a un archivo Ejemplo: ls > your_file escriba el resultado de la lista de directorios en un archivo llamado your_file

Piping: envía la salida a otro comando. Ejemplo ls | wc envía la misma salida (listado de directorios) al comando wc que cuenta caracteres.

 1
Author: Guillaume Poussel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-04 09:07:21

He notado que la segmentación se aplica a la salida de la sustitución de procesos, pero no a la redirección:

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
Author: robert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-11 18:47:24

Básicamente, la redirección y la canalización son algunas de las muchas maneras de lograr la comunicación entre Procesos en Unix.

  1. Redirección: Los datos se escriben y leen desde un archivo UNIX típico. Cualquier número de procesos pueden interoperar. esto debe usarse cuando se comparten grandes conjuntos de datos.

ls > FileName

  1. Tubería : La tubería es un proceso donde la salida de un proceso se hace la entrada de otro. Evolucionaron en las formas más primitivas del sistema operativo Unix. Proporcionan un flujo unidireccional de comunicación entre procesos dentro del mismo sistema. Una tubería se crea invocando la llamada al sistema de tuberías, que crea un par de descriptores de archivo. [ Para los descriptores de archivo leer http://www.bottomupcs.com/file_descriptors.html ]

ls | grep $myName

Funciona en el intercambio de datos simples, como productor y consumidor.

Comparación de propiedades: La tubería es siempre unidireccional mientras la redirección se puede utilizar para redireccionar tanto la entrada como la salida.

ls > grep myFileName [ Redirigiendo la salida del primer comando a uno posterior ] sort < fileName.txt [Redireccionando el nombre del archivo.archivo txt como entrada al comando sort]

También se puede escribir a continuación para usar la redirección bidireccional en una sola instrucción.

sort < fileName.txt > sortNewFile.txt

Mientras que Piping, siempre es salida del primer comando suministrado al último y que a simulanoeously.

ls | grep myName | awk '{ print $NF }' [ múltiples tuberías en una sola declaración ]

Nota 1: command > fileName . Si hay un comando llamado fileName, eso haría que el uso de la redirección sea mucho más difícil y más propenso a errores. Uno debe comprobar primero, si hay un comando llamado como archivo de destino.

Otras formas de lograr IPC en el sistema Unix son:

  1. Tubería con nombre
  2. Signal
  3. memoria Compartida
  4. Socket
 0
Author: Piyush Baijal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-21 10:46:57