¿Cuál es la diferencia exacta entre Tubería y Redirección?Tubería y redirección
¿Dónde deberíamos usar tuberías y dónde deberíamos usar la redirección?
¿Cómo funcionan internamente?
¿Cuál es la diferencia exacta entre Tubería y Redirección?Tubería y redirección
¿Dónde deberíamos usar tuberías y dónde deberíamos usar la redirección?
¿Cómo funcionan internamente?
La redirección es (principalmente) para archivos (redirige las secuencias a/desde archivos).
La tubería es para procesos: canaliza (redirige) flujos de un proceso a otro.
Esencialmente lo que realmente se hace es "conectar" una corriente estándar (generalmente stdout
) de un proceso a la transmisión estándar de otro proceso (generalmente stdin
) a través de una tubería.
tuberías tienen también la sincronización "efecto secundario": bloquean un proceso (de lectura) cuando el otro no tiene nada que escribir (aún) o cuando el proceso de lectura no puede leer suficientemente rápido (cuando el búfer de la tubería es completo).
redirección: enviar la salida (stdout
y/o stderr
) de un comando a un archivo Ejemplo: ls > your_file
escribir el resultado del listado de directorio en un archivo denominado your_file
Tubería: enviar la salida a otro comando. Ejemplo ls | wc
envía la misma salida (listado de directorios) al comando wc
que cuenta los caracteres.
La tubería dirige la salida de un programa a otro programa.
Por ejemplo:
ls * | grep "name"
Tubos Los nombres de todos los archivos en el directorio actual a grep. La reorientación dirige o agrega 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"
Tubería le ahorra la molestia de tener que escribir en un archivo, a continuación, leer de 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 la forma en que trabajan internamente, sólo estoy aprendiendo que mi auto ahora. Pero encontré este enlace que ofrece alguna discusión al respecto.
How Does Piping Work in Linux?
Debe utilizar tuberías si desea pasar salidas entre los programas; use la redirección si quiere escribir en un archivo.
Básicamente, la redirección y las tuberías son algunas de las formas para lograr la comunicación entre procesos en Unix.
ls > FileName
ls | grep $myName
Funciona en la simple intercambio de datos, tales como el productor y el consumidor.
Comparación de propiedades: La tubería es siempre unidireccional, mientras que la redirección se puede utilizar para redirigir la entrada y la salida.
ls > grep myFileName
[redirigir la salida del primer comando a uno más adelante] sort < fileName.txt
[archivo de redireccionamiento filename.txt como entrada al comando sort]
Uno también puede escribir a continuación para utilizar redirección bidireccional en una sola declaración.
sort <fileName.txt> sortNewFile.txt
Mientras Piping
, siempre es la salida del primer comando suministrado a la posterior y que a simulanoeously.
ls | grep myName | awk '{ print $NF }'
[tuberías múltiples en una sola instrucción]
Nota 1:command > fileName
. Si hay un comando llamado fileName
, eso haría que usar la redirección sea mucho más difícil y más propenso a errores. Primero se debe verificar si hay un comando llamado como archivo de destino.
Otras maneras de lograr IPC en el sistema Unix son:
me he dado cuenta de que la canalización se aplica a la salida de la sustitución de proceso, pero no 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
Gracias! Explicado muy bien. – edge