Cómo guardar la salida del terminal en un archivo en Linux

El terminal es el corazón de un sistema Linux. Cada programa que se ejecuta en Linux se está ejecutando debajo de una línea de comandos del terminal. Esto incluye programas masivos, como navegadores web e incluso programas simples como editores de texto. Como tal, poder usar correctamente el terminal es un paso importante si deseas entender cómo funciona el sistema operativo.
Con eso, mientras trabajas en el terminal de Linux, es posible que desees guardar la salida del terminal de un comando en un archivo. Este archivo puede ser utilizado como información para otra operación o simplemente para registrar la actividad del terminal. Este artículo enseña cinco maneras de guardar la salida del terminal en un archivo.
Tabla de Contenidos
- Usar terminales específicos
- Redirección de salida
- Tee
- Script
- Captura de framebuffer del terminal
- Preguntas frecuentes
También lee: Cómo usar el comando dd en Linux
1. Usar terminales específicos
La primera forma de lidiar con esto es utilizando un terminal que soporte guardar la salida en un archivo. Por ejemplo, el terminal Konsole que viene con una instalación estándar de KDE incluye una opción para escribir la salida en un archivo.
Para hacer eso, presiona el botón “Archivo” en la barra de menú y haz clic en “Guardar salida como … “

Esto abrirá un cuadro de diálogo donde puedes guardar la salida del terminal. Desde allí, puedes elegir dónde deseas guardar el archivo.
También puedes guardar la salida de un comando en el terminal GNOME. Simplemente haz clic derecho en el terminal y presiona “Copiar salida como HTML.” Esto cargará el texto del terminal en tu portapapeles. Desde allí, puedes pegarlo en cualquier editor de texto.

También lee: Cómo usar el comando rm en Linux
2. Redirección de salida
Otra forma de lidiar con esto es usar los operadores incorporados del shell de UNIX. Estas son funciones predeterminadas en Linux y pueden redirigir la salida de texto de un programa a un archivo. Hay tres operadores que pueden hacerlo:
- El operador
>creará o reemplazará el contenido de un archivo con la salida de tu programa. Esto es útil si deseas volcar y ver el resultado actual de tu programa en el mismo archivo. - El operador
>>también creará un archivo con la salida de tu programa. Sin embargo, este operador solo añadirá la salida en lugar de reemplazarla. Esto es útil si deseas volcar el resultado de tu programa continuamente en un solo archivo. - Por último, el operador
2>es un tipo especial de operador que imprimirá errores que serán reportados. Esto es muy útil durante la depuración, ya que muestra el problema que encontró el programa antes de que se bloqueara.

Sabiendo eso, la forma en que usas estos operadores es añadiéndolo al final de tu programa. Considera el siguiente ejemplo:
echo "maketecheasier" > hello.txtInstruí al programa echo para que produjera la palabra “maketecheasier,” luego añadí el operador > así como un nombre de archivo. Esto le dijo al shell de UNIX que escribiera la salida en el archivo “hello.txt” en lugar de imprimirla en la pantalla.

3. Tee
Además de la redirección de salida, también puedes guardar la salida de un comando del terminal utilizando un programa llamado tee. Este es un programa GNU que te permite leer desde y escribir en la entrada estándar. Usa este programa con tuberías de UNIX para escribir la salida de un comando en un archivo.
Considera el siguiente ejemplo:
echo "maketecheasier" | tee hello.txt
Aquí, en lugar de usar la redirección de salida, canalicé ( |) la salida a tee.
Nota: Una tubería toma la salida de un programa y la alimenta en la entrada de otro. Esto te permite unir múltiples programas, siempre que todos estén utilizando entradas y salidas estándar.
También lee: Cómo solucionar el problema de no poder escribir en el terminal en Linux
4. Script
Otra forma de obtener la salida del terminal es a través de script, un programa incorporado en Linux que graba todo lo que escribes en el terminal así como su salida.
Puedes usar script para grabar el registro de tu sesión de terminal en un formato de texto que se puede analizar. Esto es muy útil si deseas enviar un registro de errores en línea para obtener soporte de otras personas.
Para usarlo, ejecuta el siguiente comando:
script filename.txt
Esto iniciará un entorno de script donde puedes comenzar a ejecutar comandos. Sin embargo, una cosa importante a tener en cuenta es que script captura todo lo que haces en esa sesión. Considera el siguiente ejemplo:
Script started on 2022-03-27 18:02:29 +08:00 [TERM="rxvt-unicode-256color" TTY="/dev/pts/2" COLUMNS="77" LINES="22"]
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ ls
[?2004l
[0m[01;34mDesktop[0m [01;34mDownloads[0m [01;34mmail[0m [01;34mNews[0m [01;34mpods[0m [01;34mdocuments[0m [00;32mhello.txt[0m [01;34mMail[0m [01;34mpics[0m [01;34mtmp[0m [01;34mvids[0m
[?2004h[[1;31m balaraw:[1;35m~ [0m]$ exit
[?2004l
exit
Script done on 2022-03-27 18:03:19 +08:00 [COMMAND_EXIT_CODE="0"]Script incluye todas las pulsaciones de teclas y caracteres de control que presionas. En mi caso, incluyó todas las teclas “invisibles” que presioné, incluyendo las pulsaciones de las teclas Tab y Retroceso.
Una vez que hayas terminado con la sesión, escribe exit. Esto finalizará el programa Script y escribirá todo el registro en el archivo que especificaste.

También lee: Cómo usar el comando lp en Linux para imprimir archivos desde el terminal
5. Captura de framebuffer del terminal
Por último, también puedes obtener la salida del terminal extrayéndola del framebuffer de Linux. Esto es útil si estás trabajando directamente en un teletipo y deseas capturar la salida de un programa.
Para capturar el dispositivo framebuffer, ejecuta el siguiente comando mientras estés en el teletipo:
cat /dev/fb0 > capture.raw
Una cosa importante a tener en cuenta es que capturar el dispositivo framebuffer de esta manera significa que estás volcando los bytes crudos del framebuffer en un archivo. Para ver ese archivo, necesitas cargarlo en un editor de imágenes y ajustar manualmente el color y la profundidad de bits. No solo este proceso consume tiempo, sino que también es fácil hacerlo mal.
Como tal, una forma de lidiar con esto es utilizando un programa de terceros, como fbgrab. Esto capturará la pantalla actual del teletipo desde el dispositivo framebuffer y la volcará en un archivo PPM o PNG.
Instalar fbgrab también es relativamente sencillo. En distribuciones basadas en Debian y Ubuntu, puedes usar apt:
sudo apt install fbgrabPara Arch Linux, ejecuta pacman:
sudo pacman -S fbgrab
Usando fbgrab para capturar la salida del terminal
Una vez instalado, baja al teletipo presionando Control + Shift + Alt + F3, luego ejecuta fbcat o fbgrab.
Fbcat es un programa más simple que captura la pantalla actual del framebuffer y la guarda en una imagen PPM. Este es un formato de imagen cruda de bajo nivel que puedes cargar en un editor de imágenes para convertir a PNG. Fbcat es principalmente útil si estás tratando de capturar una pantalla de menor profundidad de bits que requiere un formato de imagen cruda para capturarse correctamente.
Para capturar usando el programa fbcat, ejecuta el siguiente comando:
fbcat > capture.ppm
Esto capturará la pantalla mostrada actualmente y volcará el contenido en un archivo capture.ppm.
Fbgrab, por otro lado, es un programa más complejo diseñado para capturar pantallas de mayor profundidad de bits. En su mayor parte, lo usarás para capturar la pantalla de tu teletipo. Soporta guardar en PNG por defecto y tiene la opción de seleccionar un teletipo diferente para capturar.
Para capturar usando el programa fbgrab, ejecuta el siguiente comando:
sudo fbgrab -c3 capture.png
Esto capturará la tercera pantalla del teletipo y la guardará en un archivo capture.png.
Si estás buscando más guías para el terminal de Linux, consulta esa que habla sobre cómo enviar un correo electrónico desde la línea de comandos.
Preguntas frecuentes
1. ¡Ayuda! Fbgrab no funciona; la imagen está en negro o en blanco.
Esto probablemente se deba a que fbgrab está utilizando un dispositivo framebuffer diferente para capturar la salida del terminal. Verifica el dispositivo framebuffer actual que el sistema está utilizando listando la carpeta “/dev”.
ls /devDesde allí, busca un dispositivo “/dev/fbX”. Normalmente, Linux utiliza “/dev/fb0” para su framebuffer. Sin embargo, si tu sistema está utilizando un framebuffer diferente, como “/dev/fb1”, puedes pasar el siguiente comando para indicarle a fbgrab que extraiga de ese framebuffer en su lugar:
fbgrab -d1 capture.png2. ¿Es posible capturar el contenido de un archivo que escribí como entrada a un programa?
¡Sí! Aparte de los tres operadores discutidos anteriormente, también puedes usar el operador < para extraer datos de un archivo. El shell tratará esto como una entrada para un programa.
Hacerlo de esta manera también elimina la necesidad de depender de otros programas para imprimir el texto por ti. Considera los siguientes ejemplos:
[1] cat test.txt | program
[2] program < test.txt- El primer ejemplo llama al programa cat para cargar el texto, luego carga un operador de tubería con la salida de cat y la canaliza a tu programa.
- Por otro lado, el segundo ejemplo llama inmediatamente a tu programa, luego elige el operador
<, que trata el siguiente argumento como su entrada.
3. ¿Hay alguna forma de forzar a script a capturar solo la salida de un comando?
Sí, es posible que script solo capture un solo comando. Esto es muy útil durante la solución de problemas cuando solo deseas capturar la salida de un solo programa. Haz esto ejecutando el siguiente comando:
script -c "tu-comando" test.txtLa -c bandera le dice al programa script que solo ejecute el programa: tu-comando. Desde allí, escribirá su salida en un archivo de texto llamado test.txt.
Crédito de la imagen: Unsplash