GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo comparo archivos binarios en Linux?

Esto imprimirá el desplazamiento y los bytes en hexadecimal:

cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'

O haz $1-1 para que el primer desplazamiento impreso comience en 0.

cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}'

Desafortunadamente, strtonum() es específico de GAWK, por lo que para otras versiones de awk, por ejemplo, mawk, deberá usar una función de conversión de octal a decimal. Por ejemplo,

cmp -l file1.bin file2.bin | mawk 'function oct2dec(oct,     dec) {for (i = 1; i <= length(oct); i++) {dec *= 8; dec += substr(oct, i, 1)}; return dec} {printf "%08X %02X %02X\n", $1, oct2dec($2), oct2dec($3)}'

Desglosado para facilitar la lectura:

cmp -l file1.bin file2.bin |
    mawk 'function oct2dec(oct,    dec) {
              for (i = 1; i <= length(oct); i++) {
                  dec *= 8;
                  dec += substr(oct, i, 1)
              };
              return dec
          }
          {
              printf "%08X %02X %02X\n", $1, oct2dec($2), oct2dec($3)
          }'

Como ~curandero señaló:

 % xxd b1 > b1.hex
 % xxd b2 > b2.hex

Y entonces

 % diff b1.hex b2.hex

o

 % vimdiff b1.hex b2.hex

diff + xxd

Prueba diff en la siguiente combinación de sustitución de proceso zsh/bash:

diff -y <(xxd foo1.bin) <(xxd foo2.bin)

donde:

  • -y muestra las diferencias una al lado de la otra (opcional).
  • xxd es una herramienta CLI para crear una salida de volcado hexadecimal del archivo binario.
  • Agregar -W200 a diff para una salida más amplia (de 200 caracteres por línea).
  • Para colores, use colordiff como se muestra a continuación.

colordiff + xxd

Si tienes colordiff , puede colorear diff salida, por ejemplo:

colordiff -y <(xxd foo1.bin) <(xxd foo2.bin)

Salida de muestra:

vimdiff + xxd

También puedes usar vimdiff , por ejemplo

vimdiff <(xxd foo1.bin) <(xxd foo2.bin)

Sugerencias:

  • si los archivos son demasiado grandes, agregue un límite (por ejemplo, -l1000 ) para cada xxd

Linux
  1. 10 formas de analizar archivos binarios en Linux

  2. Cómo cifrar archivos con gocryptfs en Linux

  3. Cómo comprimir varios archivos en Linux

  4. Cómo distinguir binarios de archivos de texto en Linux

  5. ¿Cómo hago una diferencia binaria en dos archivos del mismo tamaño en Linux?

Cómo ejecutar un paquete .run o .bin en Linux

Cómo cambiar el nombre de un archivo (s) en Linux

Ejecutar archivos binarios en Linux

Cómo comparar archivos en Linux usando la herramienta Meld (Diff/Merge)

Cómo comparar dos archivos en la terminal de Linux

Cómo comprimir un archivo en Linux