Redirecciones en Linux: >, >>, |, 2>, 2>&1 — Guía con Ejemplos
Un concepto importante en Linux es la redirección. Como todo en Linux es un archivo, se hizo necesario que los comandos y procesos tuvieran la habilidad de tratar las entradas y salidas de datos con gran facilidad.
Antes de detallar la habilidad de redirección de Linux necesitamos definir qué son la entrada estándar, la salida estándar y la salida de error.
Entrada estándar stdin -> 0
La Entrada Estándar (stdin) es la entrada de un flujo de texto. Como ejemplos tenemos el teclado, el mouse, un pendrive, etc. Todos ellos alimentan el computador con información. Puede ser representado por el número 0.
Salida estándar stdout -> 1
La Salida Estándar (stdout) es la salida de un flujo de texto en condiciones normales. Como ejemplos tenemos el monitor, la impresora, el disquete, un archivo, etc. Todos ellos reciben información del computador. Puede ser representado por el número 1.
Salida de errores stderr -> 2
La Salida de Error (stderr) es la salida de un flujo de texto en condiciones de error o fracaso en un determinado procesamiento. La salida de error podrá ser направляда hacia el monitor o hacia un archivo de LOG. Puede ser representado por el número 2.
Podemos redireccionar la entrada estándar o la salida estándar del flujo de datos de un determinado proceso hacia otro proceso o un archivo con mucha facilidad.
Redireccionar hacia archivos con > o >>
Para redireccionar un resultado de una salida hacia otra salida utilizamos el signo de mayor (>) o (>>).
El signo > simplemente reescribe el archivo de salida; Ya el signo >> agrega la salida al final del archivo, sin borrar el contenido.
Redireccionar desde archivos con el < o
y para direcionar una entrada hacia otra entrada usamos el signo de menor (<).
Conductores... conducen algo de un proceso a otro ( | o pipe)
También podemos redireccionar una salida hacia una entrada usando una barra vertical especial, el signo en inglés llamado "pipe" (|) o conducto.
$ ls > saida.txt
En este ejemplo listamos los archivos en un directorio grabando el resultado en el archivo salida.txt.
La redirección es utilizada principalmente por programas o cuando el resultado de un procesamiento no será observado directamente por el usuario, sino enviado a otro programa, a un archivo o a un dispositivo.
$ mail [email protected] < e-mail.txt
Aquí el programa mail está recibiendo como argumento la dirección de correo electrónico y en lugar de utilizar el teclado como entrada estándar, estamos redireccionando el archivo texto e-mail.txt.
$ ./folha_pagamento > arquivo1
O
$ ./folha_pagamento 1 > arquivo1
Estamos enviando toda la salida del programa folha_pagamento hacia el archivo1
$ ./folha_pagamento 2 > arquivo_erro.log
Estamos enviando toda la salida de errores hacia el archivo arquivo_ erro.log.
$ ./folha_pagamento > arquivo1 2>&1
Estamos enviando toda la salida estándar y de errores hacia el archivo arquivo1.
$ ./folha_pagamento > arquivo_sucesso.log 2> arquivo_erro.log
Estamos enviando el resultado con la salida normal hacia el archivo_ sucesso.log y la salida de error hacia el archivo_erro.log.
$ ./folha_pagamento | imprime_boletos 2> erros.log
Estamos enviando el resultado del proceso folha_pagamento hacia el proceso imprime_boletos y la salida de error del imprime_boletos hacia el archivo erro.log.
Símbolos Comodín
Vea que también puede usar símbolos comodín para agrupar archivos por nombre o pedazos de nombre.
Vea la tabla a continuación
TABLA – Símbolos Comodín (Wildcards)
| Símbolo | Descripción |
| * | Significa "vale cualquier cosa" y puede reemplazar uno o más caracteres de un nombre. Por ejemplo "Certifi*" puede significar "Certificado", "Certificación" o cualquier otra combinación de nombres de archivos que inicie con "Certifi". |
| ? | Significa que puede reemplazar un carácter solamente de un nombre. Por ejemplo: "?ertificado" puede reemplazar "Certificado", "certificado" o cualquier otra combinación de nombres de archivos que inicie con un carácter cualquiera y termine con "certificado". |
| {texto1, texto2...} | Reemplaza la parte dentro de las llaves por el texto1, luego por el texto2, así sucesivamente. Por ejemplo: "parte_{a,b,c}" va a resultar en "parte_a", "parte_b" y "parte_c". |
Cuando estamos trabajando con archivos y directorios en el shell es muy común que necesitemos trabajar con diversos archivos de una vez.
Para hacer este tipo de tarea más simple, Linux ofrece el recurso de comodín para los nombres de los archivos y directorios.
Al igual que en la baraja de cartas, los comodines son símbolos que pueden significar muchas cosas. En Linux permiten que los utilices como parte del nombre de los archivos y directorios. Vea la tabla 6, de comodines:
Ejemplos:
$ ls *.txt
Lista todos los archivos con el sufijo .txt
$ cat doc??? >> documentos
Concatena todos los archivos iniciados con "doc" que tengan 6 caracteres de tamaño en el archivo documentos.
Conozca ahora un comando especial que permite que la salida de un comando pueda al mismo tiempo ser grabada en archivo y enviada a otro comando.
Comando tee
Uso:
$ tee [opciones] archivos
El comando tee recibe datos de una entrada estándar, graba lo que recibió en un archivo y además envía a su salida estándar.
Se utiliza para grabar la salida estándar de un comando en un archivo y además enviar esta salida para otro comando.
La opción es:
- -a: Agrega al final del archivo lo que se recibió en lugar de grabar encima.
Ejemplo:
$ folha_pagamento | tee folha.txt | imprime_boleto | tee boleto.txt | lpr 2> erros.log
El resultado del programa folha_pagamento es grabado por tee en el archivo folha.txt y enviado al programa imprime_boleto.
A su vez el programa imprime_boleto redirecciona su salida hacia el segundo tee que graba el resultado en el archivo boleto.txt que también es enviado al programa lpr que imprime los boletos.
Si hay error en la impresión, este error es grabado en el archivo erros.log.
Hay otro comando especial que pasa lo que recibió como entrada como argumentos para un determinado comando.
Comando xargs
Uso:
$ xargs comando [opciones] arqumentoinicial
El xargs ejecuta el comando y pasa como argumento para ese comando lo que se recibió como entrada estándar.
El xargs va a ejecutar innumerables veces comando de acuerdo con el número de líneas recibidas como entrada estándar.
Las opciones más frecuentes son:
- -p: Pregunte al usuario si el comando debe ser ejecutado antes de hacerlo
- -r: No ejecute el comando cuando reciba líneas vacías
- -t: Muestre el comando en pantalla antes de ejecutarlo
Ejemplos:
$ cat LEIAME.TXT | xargs echo
En este ejemplo cada línea del archivo LEIAME.TXT es pasada como argumento para el comando echo.
El comando echo imprime en la salida estándar los argumentos recibidos.
$ cat lista-de-usuários.txt | xargs mkdir
En este ejemplo el comando xargs creará un directorio ejecutando el mkdir con el nombre de cada usuario contenido en el archivo lista-de-usuários.txt.
$ ls -1 *.gz > lista-de-arquivo-zipado.txt
$ cat lista-de-arquivo-zipado.txt | guzip
En este ejemplo la primera línea lista todos los archivos con sufijo .gz y los envía al archivo lista-de-arquivo-zipado.txt.
En la segunda línea el xargs ejecutará el "gunzip" con cada archivo de la lista.
Vea el video a continuación que no va a quedar ninguna duda:
Aprenda mucho más sobre Linux en nuestro curso en línea. Puede realizar la inscripción aquí. Si ya tiene una cuenta, o quiere crear una, simplemente inicie sesión o cree su usuario aquí.
¿Te gustó? Comparte
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.