Toto vytiskne offset a bajty v hexadecimálním formátu:
cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'
Nebo proveďte $1-1
aby první vytištěný ofset začínal na 0.
cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}'
Bohužel strtonum()
je specifický pro GAWK, takže pro jiné verze awk – např. mawk – budete muset použít funkci převodu z osmičkového na desítkové. Například,
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)}'
Přerušeno kvůli čitelnosti:
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)
}'
Jako ~kvak upozornil:
% xxd b1 > b1.hex
% xxd b2 > b2.hex
A pak
% diff b1.hex b2.hex
nebo
% vimdiff b1.hex b2.hex
diff
+ xxd
Zkuste diff
v následující kombinaci substituce procesu zsh/bash:
diff -y <(xxd foo1.bin) <(xxd foo2.bin)
Kde:
-y
zobrazuje rozdíly vedle sebe (volitelné).xxd
je nástroj CLI pro vytvoření hexdump výstupu binárního souboru.- Přidejte
-W200
nadiff
pro širší výstup (200 znaků na řádek). - Pro barvy použijte
colordiff
jak je uvedeno níže.
colordiff
+ xxd
Pokud máte colordiff
, může zbarvit diff
výstup, např.:
colordiff -y <(xxd foo1.bin) <(xxd foo2.bin)
Ukázkový výstup:
vimdiff
+ xxd
Můžete také použít vimdiff
, např.
vimdiff <(xxd foo1.bin) <(xxd foo2.bin)
Rady:
- jsou-li soubory příliš velké, přidejte limit (např.
-l1000
) pro každýxxd
příkaz bash watch se zachovanými barvami
Jak se mohu vyhnout ověření hostitele SSH pro známé hostitele?