GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué (y cómo) el uso de Cat en archivos binarios arruinó la terminal?

Si entiendo el cat manual correctamente:

concatenar archivos e imprimir en la salida estándar

cat tomará los archivos como argumento y los imprimirá en la salida estándar.
Lo que no obtengo es si uso el comando:

cat img.png > copy.png

Obtendré 2 archivos png idénticos mientras que si solo

cat img.png  

Tengo todas las posibilidades de que mi terminal se estropee y malinterprete lo que escribo.

  • ¿Cómo es eso posible?
  • Los valores binarios siguen siendo datos binarios. ¿Por qué no muestra simplemente una serie de 0 y 1 o la interpretación de esos datos binarios en ASCII o cualquiera que sea la codificación en la terminal?
  • ¿Este comportamiento también es posible por parte de cat? ing un archivo de texto que contiene caracteres extraños?
  • ¿Debería implementarse un mecanismo para evitar este comportamiento, como la instrucción try{}catch{}?

Respuesta aceptada:

cat concatena los archivos proporcionados como argumentos en la línea de comandos a la salida estándar, lee los bytes a la vez y, de forma predeterminada, no realiza ninguna interpretación de los bytes que lee.

En su primer ejemplo, está redirigiendo stdout a un archivo, por eso obtiene un nuevo archivo.

En su segundo ejemplo, los bytes se escriben en la terminal, y es la terminal la que interpreta secuencias de caracteres como secuencias de control para la terminal, por eso obtiene un comportamiento inusual en su terminal. No tiene nada que ver con cat como tal, cat no sabe qué vas a hacer con su salida. Podría estar enviándolo a través de una tubería a otro programa para interpretar/procesar/imprimir o reproducir "Cantando bajo la lluvia".

Entonces, siguiendo la filosofía de Unix,

haz una cosa, haz una sola cosa, pero hazla bien

cat no debe intentar adivinar lo que está tratando de hacer.

edite 1 respuesta al primer comentario de @kiwy a continuación.

Sí y No, déjame explicarte,

No, si cat a una terminal, porque (el software de la terminal) está enviando la salida a su pantalla o interpretando secuencias de control (está emulando una pieza antigua de hardware, es decir, un dispositivo de teletipo ).

pero,

Sí, si conecta una tubería y el programa que recibe puede interpretar los caracteres como comandos.

Relacionado:¿Obtener una lista de todos los archivos por máscara en la terminal?

mire cat esto para ver un ejemplo, cat anyOldShellScript | bash bash interpretará lo que obtiene como comandos.


Linux
  1. Eliminar archivos y carpetas en la terminal de Linux

  2. Cómo cifrar y descifrar archivos y directorios utilizando Tar y OpenSSL

  3. ¿Cómo comprimir y extraer archivos usando el comando tar en Linux?

  4. wget vs curl:Cómo descargar archivos usando wget y curl

  5. Cómo verificar el sistema operativo y la versión usando un comando de Linux

Cómo sincronizar archivos y directorios usando Zaloha.sh

Cómo organizar y modificar archivos PDF usando PDF Arranger

Cómo hacer una copia de seguridad de archivos y directorios usando Rsync en Linux

Cómo eliminar archivos y directorios usando la terminal en Debian 10

Cómo copiar archivos y directorios en la terminal de Linux

Cómo eliminar archivos y directorios usando la línea de comandos de Linux