Ahora les traigo un tema bastante importante para los que usamos bastante la consola en el mundo GNU/Linux, el cual tiene que ver con la redirección y tuberías. Es bastante básico pero creo que a más de alguno le puede servir ésta información.
Redirección
Los comandos en GNU/Linux tienen Entradas y Salidas estándares:
- Entrada estándar – STDIN (valor 0)
- Lugar desde donde un comando obtiene la información necesaria de entrada. Habitualmente, por omisión, ésta será el teclado.
- Salida estándar Normal – STDOUT (valor 1)
- Lugar a donde un comando envía el resultado de su ejecución, por omisión, este lugar será la terminal.
- Y Salida estándar de Error – STDERR (valor 2)
- Lugar donde el sistema envía cualquier mensaje de error que se produzca.
Por defecto tanto la entrada como las salidas estándar de los comandos son la propia terminal.
Este comportamiento es susceptible de ser modificado, según sean nuestras necesidades, gracias a cuatro tipos de redireccionadores que emplea la consola:
- < (signo menor que):
- Acepta la entrada de un archivo.
- > (signo mayor que):
- Envía la salida estándar a un archivo.
- >> (signo mayor que dos veces):
- Añade la salida estándar a un archivo.
- | (barra vertical):
- Conecta la salida estándar de un comando con la entrada estándar de otro. Este redireccionamiento es también conocido como tubería o pipe y es uno de los más usados en linux.
Veamos un ejemplo:
ls -lh > miListado.txt
Enviará la lista del directorio al archivo miListado.txt
Si se vuelve a ejecutar la línea anterior, se eliminaría el contenido de miListado.txt y se escribiría nuevamente con la información actualizada. Para mantener la información existente, se debe de usar >> (la salida será añadida al final del fichero nombrado, en lugar de ser sobrescrito)
El típico ejemplo en redirección a la entrada podría ser el siguiente:
mysql -u root -p mi_base_datos < respaldo.sql
Esta línea de comando nos permite restaurar una BD en MySQL con base a un respaldo (script sql) que tenemos. También se puede usar para enviar correos ( mail oscard@localhost < carta.txt ) pero siento que el ejemplo en MySQL es más claro.
Los mensajes de error se dirigen a la salida número 2 (normalmente es también la terminal). La redirección de ésta salida es utilizada también para evitar que los mensajes de error aparezcan en la pantalla o guardarla en un archivo txt (log) para revisar después; éste escenario sucede cuando ejecutamos una línea de comando en background y no queremos ser estorbado por los mensajes de error que genere el proceso anterior en la terminal.
Para ejecutar un comando en background, colocar el signo & al final de la línea. Ejemplo:
sudo du -sh / &
En éste caso, el proceso se estará ejecutando en segundo plano (background) y nosotros podremos continuar trabajando con la terminal. Si desea saber más sobre la gestión de procesos, los remito a ésta entrada de blog.
Ejemplo de redirección de salida de error:
ln carpeta carpeta_dos 2> error.txt
En éste caso, no se mostrará nada en pantalla y se creará un archivo error.txt con el siguiente contenido:
ln: «carpeta»: no se permiten enlaces fuertes para directorios
El cual es la salida de error. ¿Para qué puede ser útil? si digamos queremos copiar una gran cantidad de archivos en una carpeta pero queremos al final revisar todos los errores de copia que hubieron. Podría ser así: cp -R /home /media/respaldo/ 2> errores.txt
Tuberías
El uso de tuberías (pipes) es la característica de la consola que nos permite conectar una cadena de comando en una tubería, donde la salida estándar de la primera es enviada directamente a la entrada estándar de la segunda y así sucesivamente.
Para el ejemplo, usaremos el comando sort, el cual nos permite ordenar los registros o líneas de uno o más archivos.
Si quisiéramos conectar la salida del comando ls con la entrada del comando sort. por ejemplo, debemos de utilizar el símbolo | que representa la tubería.
ls /usr | sort -r
Si fuera muy extensa la información del comando anterior, podríamos querer añadir a la tubería el comando more para poder examinar los resultados con comodidad del siguiente modo:
ls /usr | sort -r | more
Otro tipo de tubería es la bifurcación o T.
Con el comando tee, podemos realizar las bifurcaciones. Básicamente es cuando la salida de un comando, además de redirigirse a un determinado archivo, se bifurque también hacia la terminal (para ver el resultado).
Comando tee
- Lee la entrada estándar y escribe en la salida estándar y en el archivo.
Ejemplo de uso:
ls | tee resultado.txt
La salida de ls se bifurca hacia la terminal (nos muestra el resultado en pantalla) y hacia un archivo llamado resultado.txt.
Bien, y eso sería todo lo básico que hay que saber. Obviamente se puede aprovechar al máximo y hacer cosas complejas con las redirecciones, pero dependerá de cada caso en particular (la necesidad).
¡Saludos!
Comentarios por Facebook
comentarios