Las tuberías de Unix


En los sistemas Unix encontramos el concepto de Tubos. Estos permiten que la salida (stdout) de un comando sea la entrada (stdin) de otro comando.

Dicho de otro modo; los tubos de Unix son comandos anidados.

Se emplean con el caracter | de acuerdo con la siguiente sintaxis:

orden1 | orden2 | orden3 | ... | ordenN

Ejemplo: Mostrar el contenido de un directorio página por página

Veamos un ejemple simple: Es necesario visualizar completamente la carpeta sbin, para esto debemos ejecutar el comando ls -l, pero este comando muestra la lista completa sin dejar visualizar los primeros directorios o archivos ya que su contenido es bastante para visualizarlo en una sola pantalla.

$ ls -l /sbin/
total 15824
-rwxr-x--- 1 root root     22324 2009-10-23 19:33 acpid
-rwxr-xr-x 1 root root      1754 2010-02-23 18:46 activate_dm_linear
-rwxr-xr-x 1 root root     39048 2009-10-21 15:04 adjtimex
-rwxr-xr-x 1 root root     18540 2009-10-21 15:04 agetty
-rwxr-xr-x 1 root root    754308 2009-10-24 08:05 apparmor_parser
-rwxr-xr-x 1 root root     48864 2009-10-19 10:36 arp
-rwxr-xr-x 1 root root     18100 2009-10-23 19:37 arping
-rwxr-x--- 1 root root     96152 2009-10-23 19:22 audispd
-rwxr-x--- 1 root root    116576 2009-10-23 19:22 auditctl
-rwxr-x--- 1 root root    174284 2009-10-23 19:22 auditd
.
.
.
$

Este problema se puede resolver con tuberías y el comando more de la siguiente manera:

$ ls -l /sbin/ | more
total 15824
-rwxr-x--- 1 root root     22324 2009-10-23 19:33 acpid
-rwxr-xr-x 1 root root      1754 2010-02-23 18:46 activate_dm_linear
-rwxr-xr-x 1 root root     39048 2009-10-21 15:04 adjtimex
-rwxr-xr-x 1 root root     18540 2009-10-21 15:04 agetty
-rwxr-xr-x 1 root root    754308 2009-10-24 08:05 apparmor_parser
-rwxr-xr-x 1 root root     48864 2009-10-19 10:36 arp
-rwxr-xr-x 1 root root     18100 2009-10-23 19:37 arping
-rwxr-x--- 1 root root     96152 2009-10-23 19:22 audispd
-rwxr-x--- 1 root root    116576 2009-10-23 19:22 auditctl
-rwxr-x--- 1 root root    174284 2009-10-23 19:22 auditd
.
.
.
--More--
.
.
.
-rwxr-xr-x 1 root root     82600 2009-10-19 10:47 debugfs
-rwxr-xr-x 1 root root    227384 2009-10-19 10:59 debugreiserfs
-rwxr-xr-x 1 root root     67976 2009-10-23 19:32 depmod
-rwxr-xr-x 1 root root     13912 2009-10-23 19:24 detectups
-rwxr-xr-x 1 root root    453124 2009-12-17 18:45 dhclient
-rwx------ 1 root root     12564 2009-12-17 18:45 dhclient-script
-rwxr-xr-x 1 root root     72248 2010-01-24 18:05 dhcpcd
-rwxr-xr-x 1 root root     14040 2009-10-21 15:01 dm_dso_reg_tool
-r-xr-xr-x 1 root root     26636 2009-10-23 19:25 dmeventd
-rwxr-xr-x 1 root root    235320 2009-10-21 15:01 dmraid
--More--
.
.
.
$

Su funcionamiento es simple: la salida del comando ls -l es enviada al comando more que se encarga de mostrar el contenido página por página.

Ejemplo: man 2 PDF

Con el comando man visualizamos la documentación de los comandos que especifiquemos, por ejemplo:

$ man tar
.
.
.
NAME
       tar - The GNU version of the tar archiving utility

SYNOPSIS
       tar [OPTION...] [FILE]...
.
.
.

Pero… tal vez no sea muy cómodo leerlo en el Shell, entonces lo enviamos a un archivo PDF:

man -t tar | ps2pdfwr -> tar.pdf

También lo podemos enviar a la impresora:

man -t tar | lpr

Simple, ¿No?…

Posted in

Leave a Reply