2012-11-16 8 views
5

In Linux esiste un modo per calcolare le differenze tra due file binari (ad esempio, due file eseguibili)?come calcolare le differenze tra due file binari (cioè due file eseguibili) in linux

Vorrei essere più specifico: voglio sapere come calcolare il delta (differenza delta) tra due versioni di un eseguibile o un'applicazione o un software in Linux. Ad esempio, se devo scaricare e installare solo la parte aggiornata (la differenza delta tra l'ultima versione e la vecchia versione) di un'applicazione o di un binario esistente, come faccio a farlo in Linux.

+0

Il modo più semplice potrebbe essere quello di confrontare il codice sorgente, se disponibile. –

+0

Ciao Basile, non ho modo di confrontare il codice sorgente, solo le cose disponibili sono le due versioni di un binario, una versione più recente e l'altra è la vecchia versione. – indranil

+0

Ma cosa potresti fare con il risultato del confronto eseguibile binario? Allora perché lo chiedi davvero ??? –

risposta

2

diff vi dirà se i file binari sono diversi:

diff bin1 bin2 
Binary files bin1 and bin2 differ 

Se si desidera che la differenza, utilizzare cmp:

cmp -l bin1 bin2 
    25 20 320 
    26 4 3 
    41 270 160 
209 4 264 
210 7 6 

L'opzione -l stampa il numero di byte e la differenza:

-l --verbose 
     Output byte numbers and values of all differing bytes. 
0

Prova cksum - dà l'indicazione che sono la stessa

9

È possibile utilizzare lo strumento bsdiff, ed è compagna bspatch, per fare diff e macchie di file binari efficienti.

Se si desidera ottenere patch ancora più piccoli, è possibile dare un'occhiata a Courgette da Google Chrome. È costruito su bsdiff, ma fornisce differenze ancora più efficienti degli eseguibili smontandoli effettivamente prima di fare il diff. Non è distribuito come progetto separato, ma è possibile ottenerlo dallo Chromium source repository (come check out the code).

C'è anche lo strumento xdelta, che è stato più lungo di bsdiff. Secondo l'autore di bsdiff, è considerevolmente meno efficiente; le patch escono molto più grandi. Ha il vantaggio di supportare il formato VCDIFF standard (RFC 3284), che è supportato anche da diversi altri strumenti, quindi se è necessario lavorare con altri strumenti, sarebbe più utile.

+0

Un avvertimento: i sistemi integrati delle mure OP (nei tag), e la homepage di bsdiff dice "bsdiff ha abbastanza fame di memoria" - non ci avevo mai pensato. – loreb

+0

@loreb La parte che ha fame di memoria è la parte "diff", in cui si genera il delta (generalmente su una macchina di sviluppo o di costruzione). La parte patch ha requisiti di memoria molto più ragionevoli. –

+0

Non mi è venuto in mente, grazie – loreb

-1

È possibile utilizzare diff:

diff old_file new_file 

È inoltre possibile utilizzare md5 ma è necessario confrontare i risultati rispetto. Potrebbe essere utilizzato anche per controllare la somma del file scaricato se è disponibile la checksum md5.

Problemi correlati