Introducción
Las capacidades de redirección integradas en Linux ofrecen un conjunto robusto de herramientas para optimizar numerosos flujos de trabajo. La filosofía Unix del desarrollo de software consistía en crear herramientas que cada una hiciera bien una sola cosa, y esta filosofía se ha trasladado a las herramientas modernas de línea de comandos, que son potentes individualmente y mucho más cuando se combinan. Tanto si escribe software complejo como si simplemente trabaja en la línea de comandos, saber cómo manipular los diferentes flujos de E/S de su entorno aumentará considerablemente su productividad.
Prerrequisitos
Para seguir esta guía, necesitará tener acceso a un servidor Linux. Si necesita información sobre cómo conectarse a su servidor por primera vez, puede consultar nuestra guía sobre cómo conectarse a un servidor Linux mediante SSH .
Arroyos
La entrada y la salida en el entorno Linux se distribuyen en tres flujos . Estos flujos son:
- entrada estándar ( stdin )
- salida estándar ( stdout )
- error estándar ( stderr )
Los arroyos también están numerados:
- entrada estándar ( 0 )
- salida estándar ( 1 )
- error estándar ( 2 )
Durante las interacciones estándar entre el usuario y el terminal, la entrada estándar proviene del teclado del usuario. La salida estándar y el error estándar se muestran en el terminal del usuario como texto. En conjunto, los tres flujos se denominan flujos estándar.
Entrada estándar
El flujo de entrada estándar suele transportar datos del usuario al programa. Los programas que esperan una entrada estándar suelen recibirla de un dispositivo, como un teclado. Más adelante en este tutorial, verá ejemplos de cómo usar la salida de un programa como entrada estándar para otro.
Salida estándar
La salida estándar es la salida generada por un programa. Cuando el flujo de salida estándar no se redirige, enviará texto directamente a la terminal. Intente generar cualquier texto usando echo
:
echo Sent to the terminal
OutputSent to the terminal
Cuando se utiliza sin ninguna opción adicional, el echo
comando genera cualquier argumento que se le pase en la línea de comando.
Ejecute echo sin ningún argumento:
echo
Devolverá una línea vacía. Algunos programas no realizan ninguna acción sin los argumentos proporcionados.
Error estándar
El error estándar contiene errores generados por un programa que ha fallado de alguna manera. Al igual que la salida estándar, el destino predeterminado de este flujo es la pantalla del terminal.
Veamos un ejemplo básico de error estándar utilizando el comando ls. ls enumera el contenido de un directorio.
Cuando se ejecuta sin argumentos, ls lista el contenido del directorio actual. Si se ejecuta con un directorio como argumento, listará el contenido del directorio proporcionado.
ls %
Dado que % no es un directorio existente, esto enviará el siguiente texto al error estándar:
Outputls: cannot access %: No such file or directory
Un programa no tiene que fallar ni terminar su ejecución para generar el error estándar, y el envío de alguna salida a la salida estándar o al error estándar depende del comportamiento del programa. Técnicamente, no difieren en nada entre sí, solo que un flujo de salida se reserva para los mensajes de error, y algunas herramientas asumirán que si el error estándar está vacío, significa que el programa se ejecutó correctamente. Algunos programas incluso envían errores menores al error estándar sin fallar ni dejar de generar la salida prevista. Esto se usa solo como convención para separar la salida prevista de la no prevista.
Redirección de flujo
Linux incluye comandos de redirección para cada flujo. Estos se pueden usar para escribir la salida estándar o el error estándar en un archivo. Si escribe en un archivo inexistente, se creará uno nuevo con ese nombre antes de escribir.
Los comandos con un solo corchete sobrescriben el contenido existente del destino.
Exagerar
- > – salida estándar
- < – entrada estándar
- 2> – error estándar
Los comandos con doble corchete no sobrescriben el contenido existente del destino.
Añadir
- >> – salida estándar
- << – entrada estándar
- 2>> – error estándar
Tubería
Las tuberías se utilizan para redirigir un flujo de un programa a otro. Cuando la salida estándar de un programa se envía a otro mediante una tubería, la salida del primer programa se utilizará como entrada para el segundo, en lugar de imprimirse en la terminal. Solo se mostrarán los datos devueltos por el segundo programa.
La tubería de Linux está representada por una barra vertical:|
A continuación se muestra un ejemplo de un comando que utiliza una tubería:
ls | less
Esto toma la salida de ls
, que muestra el contenido de su directorio actual, y lo envía al less
programa. less
muestra los datos enviados una línea a la vez.
ls
Normalmente muestra el contenido del directorio en varias filas. Al ejecutarlo en less, cada entrada se coloca en una nueva línea.
Aunque la funcionalidad de la tubería puede parecer similar a la de >
y >>
, la distinción es que las tuberías redirigen datos de un comando a otro, mientras que > y >> se utilizan para redirigir exclusivamente a archivos.
Filtros
Los filtros son una clase de programas que se usan comúnmente con la salida canalizada desde otro programa. Muchos de ellos también son útiles por sí solos, pero ilustran especialmente bien el comportamiento de la canalización.
- find : devuelve archivos con nombres de archivo que coinciden con el argumento pasado a find.
- grep : devuelve texto que coincide con el patrón de cadena pasado a grep.
- tee : redirige la entrada estándar a la salida estándar y a uno o más archivos.
- tr : busca y reemplaza una cadena por otra.
- wc – cuenta caracteres, líneas y palabras.
Ejemplos
Ahora que ya conocemos la redirección, las tuberías y los filtros básicos, veamos algunos patrones y ejemplos de redirección comunes.
El command > file
patrón redirige la salida estándar de un comando a un archivo.
ls ~ > root_dir_contents.txt
El comando anterior pasa el contenido de su directorio personal ( ~
) como salida estándar y escribe la salida en un archivo llamado root_dir_contents.txt
. Eliminará cualquier contenido anterior del archivo, ya que es un comando de un solo corchete.
El command > /dev/null
patrón redirige la salida estándar a ninguna parte. /dev/null
es un archivo especial que se utiliza para eliminar cualquier dato que se redirija a él. Se utiliza para descartar la salida estándar innecesaria que podría interferir con la funcionalidad de un comando o script. Toda la salida enviada a /dev/null
se descarta.
ls > /dev/null
Este comando descarta el flujo de salida estándar devuelto por el comando ls pasándolo a /dev/null.
Este command 2> file
patrón redirige el flujo de error estándar de un comando a un archivo, sobrescribiendo el contenido existente.
mkdir '' 2> mkdir_log.txt
Esto redirige el error generado por el nombre de directorio no válido ''
y lo escribe en log.txt
. Tenga en cuenta que el error se envía a la terminal y se muestra como texto.
El command >> file
patrón redirige la salida estándar de un comando a un archivo sin sobrescribir el contenido existente del archivo.
echo Written to a new file > data.txt
echo Appended content to an existing file >> data.txt
Este par de comandos primero redirige el texto introducido por el usuario mediante echo a un nuevo archivo. Luego, añade el texto recibido por el segundo comando echo al archivo existente, sin sobrescribir su contenido.
El command 2>> file
patrón anterior redirige el flujo de error estándar de un comando a un archivo sin sobrescribir su contenido. Este patrón es útil para crear registros de errores de un programa o servicio, ya que el archivo de registro no borrará su contenido anterior cada vez que se escriba en él.
find '' 2> stderr_log.txt
wc '' 2>> stderr_log.txt
El comando anterior redirige el mensaje de error causado por un argumento find no válido a un archivo llamado stderr_log.txt. Posteriormente, añade el mensaje de error causado por un argumento wc no válido al mismo archivo.
El command | command
patrón redirige la salida estándar del primer comando a la entrada estándar del segundo comando.
find /var lib | grep deb
Este comando busca en /var y sus subcarpetas nombres de archivos y extensiones que coincidan con la cadena deb
y devuelve las rutas de los archivos, con la parte coincidente en cada ruta resaltada en rojo.
El command | tee file
patrón (que incluye el tee
comando) redirige la salida estándar del comando a un archivo y sobrescribe su contenido. A continuación, muestra la salida redirigida en la terminal. Crea un nuevo archivo si no existe.
En el contexto de este patrón, tee
normalmente se utiliza para ver la salida de un programa y al mismo tiempo guardarlo en un archivo.
wc /etc/magic | tee magic_count.txt
Esto envía el recuento de caracteres, líneas y palabras del /etc/magic
archivo (usado por el shell de Linux para determinar los tipos de archivo) al comando tee, que divide wc
la salida de en dos direcciones y la envía a la pantalla del terminal y al magic_count.txt file
. Para el comando tee, imagine la letra T. La parte inferior de la letra representa los datos iniciales y la parte superior, los datos que se dividen en dos direcciones diferentes (salida estándar y terminal).
Se pueden utilizar varias tuberías para redirigir la salida a través de múltiples comandos y/o filtros.
Conclusión
Aprender a usar las funciones de redirección integradas en la línea de comandos de Linux es crucial. Ahora que conoce los fundamentos del funcionamiento de las redirecciones y las tuberías, podrá iniciar su aventura en el mundo de los scripts de shell, que utilizan frecuentemente los programas y patrones destacados en esta guía.
Buscar comandos específicos o algo que desea hacer en la línea de comandos (por ejemplo, “eliminar todos los archivos de un directorio que comiencen con una letra mayúscula”) también puede resultar útil cuando necesita realizar una tarea específica utilizando la línea de comandos.
Gracias por aprender con la Comunidad de DigitalOcean. Descubra nuestras ofertas de computación, almacenamiento, redes y bases de datos administradas.
Conozca más sobre nuestros productos
Revise todos los tutoriales de esta serie de tutoriales: Primeros pasos con Linux ->
Serie de tutoriales: Introducción a Linux
Si eres nuevo en Linux y su interfaz de línea de comandos, puede que te parezca abrumador empezar a usarlo. Esta serie te pondrá al día con los fundamentos esenciales de Linux y te proporcionará una base sólida para trabajar con servidores Linux. Si tienes poco o ningún conocimiento sobre Linux, este es el punto de partida ideal.
Conceptos básicos de LinuxExplorar Series: 4 artículos
- 1/4 Introducción a la terminal de Linux
- 2/4 Navegación y gestión de archivos en Linux
- 3/4 Introducción a los permisos de Linux