bash - tuberias - redirigir salida comando linux a fichero
Tubería y redirección (5)
¿Cuál es la diferencia exacta entre Tubería y Redirección?
¿Dónde deberíamos usar la tubería y dónde debemos usar la redirección?
¿Cómo trabajan internamente?
Básicamente, la redirección y las tuberías son algunas de las formas para lograr la comunicación entre procesos en Unix.
- Redirección : los datos se escriben y se leen desde un archivo UNIX típico. Cualquier cantidad de procesos puede interoperar. esto se debe usar cuando se comparten grandes conjuntos de datos.
ls > FileName
- Tubería : La tubería es un proceso donde la salida de un proceso se convierte en la entrada de otro. Se desarrollaron en las formas más primitivas del sistema operativo Unix. Proporcionan un flujo de comunicación unidireccional entre procesos dentro del mismo sistema. Se crea una tubería invocando la llamada al sistema de tuberías, que crea un par de descriptores de archivos. [Para descripciones de archivos, lea 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 siempre es unidireccional, mientras que la redirección se puede usar para redirigir la entrada y la salida.
ls > grep myFileName
[Redirigir la salida del primer comando para más adelante uno] sort < fileName.txt
[Redirigir el archivo FileName.txt como una entrada para ordenar el comando]
También se puede escribir a continuación para usar la redirección bidireccional en una sola declaración.
sort < fileName.txt > sortNewFile.txt
Mientras que Piping
, siempre se emite el primer comando suministrado al último y simulaneamente.
ls | grep myName | awk ''{ print $NF }''
ls | grep myName | awk ''{ print $NF }''
[tuberías múltiples en una sola declaración]
Nota 1: command > fileName
. Si hay un comando llamado fileName
, eso haría que utilizar 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 formas de lograr IPC en el sistema Unix son:
- Canalización con nombre
- Señal
- Memoria compartida
- Enchufe
He notado que la canalización se aplica a la salida de la sustitución del proceso, 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
Piping dirige la salida de un programa a otro programa.
Por ejemplo:
ls * | grep "name"
Transmite 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"
Piping le ahorra la molestia de tener que escribir en un archivo, luego lee 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 cómo funcionan internamente, ahora solo estoy aprendiéndome eso. Pero encontré este enlace que ofrece alguna discusión al respecto.
¿Cómo funciona la tubería en Linux?
Debe usar tuberías si desea pasar salidas entre programas; use la redirección si quiere escribir en un archivo.
Redirección: envíe la salida ( stdout
y / o stderr
) de un comando a un archivo Ejemplo: ls > your_file
escribe el resultado de la lista de directorios en un archivo llamado your_file
Tubería: envíe la salida a otro comando. Ejemplo ls | wc
ls | wc
envía el mismo resultado (listado de directorio) al comando wc
que cuenta los caracteres.
La redirección es (principalmente) para archivos (redirige las secuencias a / desde archivos).
La tubería es para procesos: canaliza (redirecciona) flujos de un proceso a otro.
Esencialmente, lo que realmente se hace es "conectar" un flujo estándar (normalmente stdout
) de un proceso a flujo estándar de otro proceso (generalmente stdin
) a través de un conducto.
Las tuberías también tienen el "efecto secundario" de sincronización : bloquean un proceso (al leer) cuando el otro no tiene nada que escribir (aún) o cuando el proceso de lectura no puede leer lo suficientemente rápido (cuando el buffer de la tubería está lleno).