GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie vergleiche ich Binärdateien in Linux?

Dies gibt den Offset und die Bytes in Hex aus:

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

Oder machen Sie $1-1 um den ersten gedruckten Offset bei 0 beginnen zu lassen.

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

Leider strtonum() ist spezifisch für GAWK, daher müssen Sie für andere Versionen von awk – z. B. mawk – eine Oktal-zu-Dezimal-Konvertierungsfunktion verwenden. Zum Beispiel

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

Zur besseren Lesbarkeit aufgeschlüsselt:

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

Als ~Quack darauf hingewiesen:

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

Und dann

 % diff b1.hex b2.hex

oder

 % vimdiff b1.hex b2.hex

diff + xxd

Versuchen Sie diff in der folgenden Kombination aus zsh/bash-Prozesssubstitution:

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

Wo:

  • -y zeigt Ihnen die Unterschiede nebeneinander (optional).
  • xxd ist ein CLI-Tool zum Erstellen einer Hexdump-Ausgabe der Binärdatei.
  • Fügen Sie -W200 hinzu bis diff für eine breitere Ausgabe (von 200 Zeichen pro Zeile).
  • Verwenden Sie für Farben colordiff wie unten gezeigt.

colordiff + xxd

Wenn Sie colordiff haben , es kann diff einfärben Ausgabe, z. B.:

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

Beispielausgabe:

vimdiff + xxd

Sie können auch vimdiff verwenden , z. B.

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

Hinweise:

  • wenn Dateien zu groß sind, Limit hinzufügen (z.B. -l1000 ) für jeden xxd

Linux
  1. So verschlüsseln Sie Dateien mit gocryptfs unter Linux

  2. So benennen Sie Dateien unter Linux um

  3. So vergleichen Sie drei Dateien in Linux mit dem diff3-Tool

  4. So komprimieren Sie mehrere Dateien unter Linux

  5. Wie mache ich unter Linux einen binären Vergleich mit zwei Dateien gleicher Größe?

So führen Sie ein .run- oder .bin-Paket unter Linux aus

So benennen Sie eine Datei (en) in Linux um

Binärdateien unter Linux ausführen

So vergleichen Sie Dateien unter Linux mit dem Tool Meld (Diff/Merge).

So vergleichen Sie zwei Dateien im Linux-Terminal

So komprimieren Sie eine Datei unter Linux