Lathack

Uso de Pipes en Linux

Uso de Pipes en Linux

Introducción

Cuando hablamos sobre el uso de Pipes en Linux, también llamados tuberías, nos referimos a aquella función que nos permite redireccionar la salida estándar de un comando hacia la entrada de otro, logrando de este modo, ejecutar dos o más comandos en una misma línea.

Ejemplos:

$ ls /home/usuario/Documentos | wc

En este ejemplo se pasa el resultado del comando ls al comando wc el cual muestra la cantidad de líneas, palabras y letras.

Otro ejemplo:

$ cat /etc/passwd | more

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

Otro ejemplo combinando varios comandos:

$ cat /etc/passwd | sort | more

arcade:x:109:122:Avahi mDNS daemon,,,:/var/run/arcade-daemon:/bin/false

backup:x:34:34:backup:/var/backups:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

costos-ventas:x:1001:1001:brasil,,,:/home/costos-ventas:/bin/bash

clamav:x:111:124::/var/lib/clamav:/bin/false

En este caso el contenido del archivo passwd es pasado al sort , el cual lo ordena alfabéticamente, por último pasa al comando more que pondrá pausa para poder paginar el resultado.

Comando tee

El comando tee lee desde el STDIN, escribe en el STDOUT y al mismo tiempo en uno o más archivos. Veamos un ejemplo:

# sort /etc/passwd | tee archivo_ordenado.txt | more

En este ejemplo pasa el resultado del cat al comando sort , luego lo toma el tee y lo guarda en un archivo. A su vez, la salida es mostrada en pantalla y paginada por el more.

Con la opción “ tee -a ” se agregará contenido al final del archivo sin sobreescribirlo.

Comando xargs

Sintaxis:

# xargs (opciones) (comando) (argumentos)

Este comando suele ser una herramienta muy eficaz con respecto al uso de Pipes en Linux. Esto se debe a que su función es tomar como entrada la salida de otro comando, y pasarlo como argumento, siendo echo el comando predeterminado que usa xargs .

Entonces esta herramienta es muy útil cuando un comando nos muestra un error de exceso de argumentos. Por ejemplo, intentar borrar un directorio con miles de archivos ejecutando “rm *” el asterisco expandirá como argumento la totalidad de archivos.

# ls | xargs

# ls | xargs -n 1

Uso de Pipes en Linux

El parámetro -n , seguido de un número, indica cuántos parámetros tomará como columna.

De esta manera es como ejecutar:

#echo archivo1

#echo archivo2

Si en cambio ejecutara ls | xargs -n 2 es igual que ejecutar:

# echo archivo1 archivo2

# echo archivo3 archivo4

En este ejemplo el comando ls pasará el resultado al xargs quien ejecutará el comando echo rm por cada archivo (ejecutará múltiples echo rm , uno por cada archivo).

# ls *.tmp | xargs -n 1 echo rm

rm archivo1.tmp

rm archivo2.tmp

¡De esta manera se puede ver el resultado de lo que se va a borrar, sin borrarlo!

Entradas complejas con xargs

Hay casos en los cuales xargs funcionará de manera incorrecta.

Por ejemplo:

# ls -l /tmp/test

total 0

drw-rwxr-x 2 user user 40 ene 31 17:43 ‘Exámenes de ejercicios’

drwxrw-r-x 2 user user 40 ene 31 17:43 ‘Fotos de Evidencias’

drw-rw-r– 2 user user 40 ene 31 17:43 ‘Mis Documentos

Si usamos find y xargs:

# find ./ -type d | xargs file

./: directory

./Exámenes: cannot open `./Exámenes (No such file or directory)

de: cannot open `de’ (No such file or directory)

ejercicios: cannot open `ejercicios’ (No such file or directory)

./Fotos: cannot open `./Fotos’ (No such file or directory)

de: cannot open `de’ (No such file or directory)

Evidencias: cannot open `Evidencias’ (No such file or directory)

./Mis: cannot open `./Mis’ (No such file or directory)

Documentos: cannot open `Documentos’ (No such file or directory)

Este problema se soluciona indicándole tanto a find como a xargs que cada item termina con un caracter nulo en lugar de un espacio:

# find /tmp -name «/sbin» -print0 2>/dev/null | xargs -0 file

# find ./ -type d -print0 | xargs -0 file

./: directory

./Exámenes: directory

./Fotos: directory

./Mis Documentos: directory

Comando cpio

Este comando se usa para crear y extraer archivos, o copiarlos de un lugar a otro. No utiliza compresión por sí solo, para comprimirlo hay que hacerlo con gzip/bzip2. Tener en cuenta que nos referimos a los archivos en el sentido de ‘paquetes de archivos’.

Este comando, a diferencia de tar, trabaja exclusivamente con redireccionamiento y tuberías.

Sintaxis:

cpio –o ([options]) < [filenames ..] > {file}

cpio –p (destination-directory) < [filenames..]

-o Copy-out mode. Este modo se usa para crear un archivo.

-p Copy-pass mode. Solo copia archivos de un lado a otro.

El siguiente ejemplo «Copy-in mode» se usa para copiar todo lo que creamos antes:

cpio –i < {archive}

Ejemplos

Para archivar:

# ls |cpio -ov > /media/extdisk/pruebas.cpio

Archivo1

text1

text2

text3

1 block

El significado del signo ‘>’ significa que volcamos la salida del comando ubicado a la izquierda en el archivo de la derecha.

Para extraer:

# cpio -iv < /media/extdisk/pruebas.cpio

Archivo1

text1

text2

text3

1 block

El significado del signo ‘<’ significa que el comando de la izquierda recibe como argumentos el archivo de la derecha.

# ls –l

total 10

rwxr-xr-x 2 root root 4096 Oct 5 10:13 Archivo1

-r-r–r– 1 root root 0 Oct 5 15:06 text1

-rw-r–r– 1 root root 0 Oct 5 15:06 text2

-r-r–r– 1 root root 0 Oct 5 15:06 text3

Otras opciones importantes del comando cpio son:

-u Sobrescribe archivos existentes al extraer.

-m Preserva los permisos.

-d Como cpio extrae de manera ‘plana’ los archivos, con esta opción respeta la estructura original de directorios del paquete.

La ventaja de este comando con respecto al tar es que se puede tener mayor control, cuando realizamos scripts, sobre los archivos o tipos de archivos que no se desean copiar. Suele combinarse con el comando find. Sin embargo, su uso es menos frecuente que el de tar, ya que este último es mucho más sencillo de usar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

4 × 5 =

Lathack
Scroll al inicio