GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso confrontare i file binari in Linux?

Questo stamperà l'offset e i byte in esadecimale:

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

Oppure fai $1-1 per fare in modo che il primo offset stampato inizi da 0.

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

Sfortunatamente, strtonum() è specifico di GAWK, quindi per altre versioni di awk, ad esempio mawk, dovrai usare una funzione di conversione da ottale a decimale. Ad esempio,

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)}'

Scomposto per leggibilità:

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)
          }'

Come ~quack sottolineato:

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

E poi

 % diff b1.hex b2.hex

o

 % vimdiff b1.hex b2.hex

diff + xxd

Prova diff nella seguente combinazione di sostituzione del processo zsh/bash:

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

Dove:

  • -y mostra le differenze fianco a fianco (facoltativo).
  • xxd è uno strumento CLI per creare un output hexdump del file binario.
  • Aggiungi -W200 a diff per un output più ampio (di 200 caratteri per riga).
  • Per i colori, usa colordiff come mostrato di seguito.

colordiff + xxd

Se hai colordiff , può colorare diff output, ad esempio:

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

Esempio di output:

vimdiff + xxd

Puoi anche usare vimdiff , ad esempio

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

Suggerimenti:

  • se i file sono troppo grandi, aggiungi limite (ad es. -l1000 ) per ogni xxd

Linux
  1. 10 modi per analizzare i file binari su Linux

  2. Come crittografare i file con gocryptfs su Linux

  3. Come rinominare i file in Linux

  4. Come confrontare tre file in Linux usando lo strumento diff3

  5. Come faccio a fare un diff binario su due file di dimensioni identiche sotto Linux?

Come eseguire un pacchetto .run o .bin in Linux

Come rinominare uno o più file in Linux

Esegui file binari in Linux

Come confrontare i file in Linux usando lo strumento Meld (Diff/Merge).

Come confrontare due file nel terminale Linux

Come comprimere un file in Linux