GNU/Linux >> Tutoriales Linux >  >> Linux

Lea y escriba datos desde cualquier lugar con redirección en la terminal de Linux

La redirección de entrada y salida es una función natural de cualquier lenguaje de programación o secuencias de comandos. Técnicamente, sucede inherentemente cada vez que interactúas con una computadora. La entrada se lee desde stdin (entrada estándar, generalmente su teclado o mouse), la salida va a stdout (salida estándar, un flujo de texto o datos) y los errores se envían a stderr . Comprender que estos flujos de datos existen le permite controlar a dónde va la información cuando usa un shell, como Bash o Zsh.

La entrada estándar, la salida estándar y el error estándar existen como ubicaciones del sistema de archivos en Linux. Puedes verlos en /dev :

$ ls /dev/std*
/dev/stderr@  /dev/stdin@  /dev/stdout@

No puede hacer mucho con ellos directamente, pero a veces es útil pensar en ellos como metaubicaciones donde puede enviar datos.

Los conceptos básicos de la redirección son simples:use una cierta cantidad de > caracteres para redirigir la salida y una cierta cantidad de < caracteres para redirigir la entrada.

Redireccionamiento de salida

Para escribir la salida del comando ls en un archivo:

$ ls > list.txt

No ves la salida de ls como lo haría normalmente, porque la salida se escribe en el list.txt archivo en lugar de su pantalla. Esto es tan versátil, de hecho, que incluso puedes usarlo para copiar el contenido de un archivo a otro. Tampoco tiene que ser un archivo de texto. Puede usar la redirección para datos binarios:

$ cat image.png > picture.png

(En caso de que se esté preguntando por qué querría hacer eso, es por una repercusión a veces útil en los permisos de archivos).

Entrada de redirección

También puede redirigir la entrada "a" un comando. Podría decirse que esto es menos útil que redirigir la salida porque muchos comandos ya están codificados para tomar la entrada de un argumento que proporcione. Sin embargo, puede ser útil cuando un comando espera una lista de argumentos, y usted tiene esos argumentos en un archivo y desea "copiarlos y pegarlos" rápidamente desde el archivo a su terminal (excepto que en realidad no desea copiarlos). y pegar):

$ sudo dnf install $(<package.list)

Los usos comunes de la redirección de entrada son el aquí-documento (o simplemente aquí-doc para abreviar) y here-string tecnicas Este método de entrada redirige un bloque de texto al flujo de entrada estándar, hasta un marcador especial de fin de archivo (la mayoría de la gente usa EOF , pero puede ser cualquier cadena que espere que sea única). Intente escribir esto (hasta la segunda instancia de EOF ) en una terminal:

$ echo << EOF
> foo
> bar
> baz
> EOF

El resultado esperado:

foo
bar
baz

Un aquí-doc es un truco común utilizado por los scripters de Bash para volcar varias líneas de texto en un archivo o en la pantalla. Siempre que no olvide terminar la cláusula con su marcador de fin de archivo, es una forma efectiva de evitar listas difíciles de manejar de echo o printf declaraciones.

Una cadena aquí es similar a un here-doc , pero consiste en una sola cadena (o varias cadenas disfrazadas como una sola cadena entre comillas):

$ cat <<< "foo bar baz"
foo bar baz

Mensajes de error de redirección

Los mensajes de error van a un flujo llamado stderr , designado como 2> con fines de redirección. Este comando dirige los mensajes de error a un archivo llamado output.log :

$ ls /nope 2> output.log

Enviando datos a /dev/null

Más sobre Bash

  • Hoja de trucos de Bash
  • Una introducción a la programación con Bash
  • Guía para administradores de sistemas sobre secuencias de comandos de Bash
  • Últimos artículos de Bash

Así como hay ubicaciones para entrada estándar, salida estándar y error, también hay una ubicación para ninguna parte en el sistema de archivos de Linux. Se llama null , y está ubicado en /dev , por lo que a menudo las personas que lo usan con demasiada frecuencia lo pronuncian "devnull" para decir "slash dev slash null".

Puede enviar datos a /dev/null utilizando la redirección. Por ejemplo, find El comando tiende a ser detallado y, a menudo, informa conflictos de permisos mientras busca en sus archivos:

$ find ~ -type f 
/home/seth/actual.file
find: `/home/seth/foggy': Permission denied
find: `/home/seth/groggy': Permission denied
find: `/home/seth/soggy': Permission denied
/home/seth/zzz.file

El find el comando procesa eso como un error, por lo que puede redirigir solo los mensajes de error a /dev/null :

$ find ~ -type f 2> /dev/null
/home/seth/actual.file
/home/seth/zzz.file

Uso de redirección

La redirección es una forma eficiente de llevar datos de un lugar a otro en Bash. Es posible que no use la redirección todo el tiempo, pero aprender a usarla cuando la necesite puede ahorrarle una gran cantidad de archivos innecesarios para abrir y copiar y pegar datos, todo lo cual generalmente requiere el movimiento del mouse y muchas pulsaciones de teclas. No recurras a tales extremos. Vive la buena vida y utiliza la redirección.


Linux
  1. Encuentra archivos y directorios en Linux con el comando de búsqueda

  2. Trabajar con entrada, salida y redirección de errores en Linux

  3. Redirección de entrada/salida en Linux/Unix

  4. ¿Leer y escribir en el mismo archivo en Linux sin sobrescribirlo?

  5. ¿Cómo puedo hacer que tcpdump escriba en el archivo y genere de forma estándar los datos apropiados?

Administre su calendario desde la terminal de Linux con el comando konsolekalendar

Consejos de Vim:lea y escriba archivos remotos con Vim en Linux

Gestión de archivos de Linux desde la terminal

Asegure Linux con el archivo Sudoers

Guardar la salida de un comando desde la terminal de Debian a un archivo

¿Cómo escribir un archivo con C en Linux?