Dos características poderosas del shell de línea de comandos de Linux son la redirección y las canalizaciones que permiten que la salida (o incluso la entrada) de un programa se envíe a un archivo u otro programa. Es posible que ya haya utilizado estas funciones sin darse cuenta. Siempre que haya utilizado el “>
” firmar en un comando o “|
” entonces ha utilizado la redirección o una tubería, respectivamente.
En todos los sistemas operativos similares a Unix, como Linux y FreeBSD, la salida de un programa de línea de comandos va automáticamente a un lugar conocido como salida estándar (stdout). De forma predeterminada, la salida estándar es la pantalla (la consola), pero eso se puede cambiar mediante canalizaciones y redirección. Asimismo, el teclado se considera la entrada estándar (stdin) y, al igual que con la salida estándar, se puede cambiar.
Tubería
Las tuberías le permiten canalizar la salida de un comando a otro donde se usará como entrada. En otras palabras, la salida estándar de un programa se convierte en la entrada estándar de otro.
Los «more
El comando ” toma la entrada estándar y la pagina en la salida estándar (la pantalla). Esto significa que si un comando muestra más información de la que se puede mostrar en una pantalla, el «more
El programa se detendrá después de que la primera pantalla se llene (página) y esperará a que el usuario presione ESPACIO para ver la siguiente página o RETORNO para ver la siguiente línea.
Aquí hay un ejemplo que enumerará todos los archivos, con detalles (-la
) en el /dev
directorio y canalice la salida a more
. los /dev
El directorio debe tener docenas de archivos y, por lo tanto, asegurarse de que more
necesita paginar.
Observe la --More--
mensaje en la parte inferior de la pantalla. Presione ESPACIO para ver la página siguiente y siga presionando ESPACIO hasta que finalice la salida.
Aquí hay otro ejemplo de tubería, esta vez usando el «wc
herramienta ” (recuento de palabras).
wc
cuenta el número de líneas, palabras y caracteres en la entrada estándar. Si usas el -l
parámetro mostrará solo el número de líneas, ¡lo cual es una buena manera de ver cuántos archivos hay en un directorio!
El tutorial de los comandos de compresión y archivado de Linux en profundidad tiene un ejemplo usando tar
y 7-Zip juntos:
tar cvf - * | 7zr a -si somefiles.tar.7z
En este caso, el guión después del f
opción dice tar
para enviar su salida a la salida estándar y no a un archivo. La salida de tar
se alimentará por la tubería a 7zr que está esperando la entrada del estándar debido a la opción -si.
Redirección
La redirección es similar a las tuberías excepto que usa archivos en lugar de otro programa. La salida estándar de un programa es la pantalla. Utilizando el >
(mayor que) símbolo la salida de un programa se puede enviar a un archivo. Aquí hay una lista de directorios de /dev
de nuevo pero esta vez redirigido a un archivo llamado listing.txt
No se mostrará nada en la terminal ya que todo se envió al archivo. Puede echar un vistazo al archivo usando el cat
comando (que se puede canalizar en more
) o, por comodidad, puede utilizar el more command
por sí mismo:
Si listing.txt
ya existía, se sobrescribirá. Pero puede agregar a un archivo existente usando >>
como esto:
ls -la /home > listing.txt ls -la /dev >> listing.txt
La primera redirección sobrescribirá el archivo. listing.txt
mientras que el segundo se le agregará.
los cat
El comando se puede usar para crear un archivo usando la redirección, por ejemplo:
Ahora cualquier texto que escriba se enviará al archivo. atextfile.txt
hasta que presiones Control-D, momento en el que el archivo se cerrará y volverás a la línea de comandos. Si desea agregar más texto al archivo, use el mismo comando pero con dos signos de mayor que (>>
).
Conclusión
Muchos de los programas de línea de comandos de Linux están diseñados para trabajar con redirección y conductos, intente experimentar con ellos y vea cómo interactúan. Por ejemplo, la salida del ps
El comando, que enumera los procesos actuales, se puede canalizar en grep
. Vea si puede averiguar cómo enumerar los procesos propiedad de root.