2012-11-16 45 views
5

Trong Linux, có cách nào để tính toán sự khác biệt giữa hai tệp nhị phân (tức là hai tệp thi hành) không?cách tính toán sự khác nhau giữa hai tệp nhị phân (tức là hai tệp thực thi) trong linux

Hãy để tôi cụ thể hơn: Tôi muốn biết cách tính toán delta (sự khác biệt delta) giữa hai phiên bản của một tệp thực thi hoặc ứng dụng hoặc phần mềm trong Linux. Ví dụ nếu tôi phải tải xuống và cài đặt chỉ phần cập nhật (sự khác biệt delta giữa phiên bản mới nhất và phiên bản cũ) của một ứng dụng hiện có hoặc nhị phân thì làm cách nào để làm điều đó trong Linux.

+0

Cách đơn giản nhất có thể là so sánh mã nguồn, nếu nó có sẵn cho bạn. –

+0

Hi Basile, tôi không có cách nào so sánh mã nguồn, chỉ những thứ có sẵn là hai phiên bản nhị phân, một phiên bản mới nhất và phiên bản kia là phiên bản cũ. – indranil

+0

Nhưng bạn có thể làm gì với kết quả so sánh nhị phân thực thi? Vậy tại sao bạn thực sự hỏi ??? –

Trả lời

2

diff sẽ cho bạn biết nếu các tập tin nhị phân là khác nhau:

diff bin1 bin2 
Binary files bin1 and bin2 differ 

Nếu bạn muốn sự khác biệt, sử dụng cmp:

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

Tùy chọn -l in số byte và sự khác biệt:

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

Hãy thử cksum - cung cấp cho các dấu hiệu cho thấy họ đều giống nhau

9

Bạn có thể sử dụng công cụ bsdiff, và nó đồng hành bspatch, để làm diffs và các bản vá lỗi của tập tin nhị phân hiệu quả.

Nếu bạn muốn nhận các bản vá nhỏ hơn, bạn có thể xem Courgette, từ Google Chrome. Nó được xây dựng trên bsdiff, nhưng chúng cung cấp sự khác biệt hiệu quả hơn về thực thi bằng cách thực sự tháo chúng trước khi thực hiện sự khác biệt. Nó không được phân phối như một dự án riêng biệt, nhưng bạn có thể lấy nó từ Chromium source repository (cách check out the code).

Ngoài ra còn có công cụ xdelta, đã dài hơn bsdiff. Theo tác giả của bsdiff, nó kém hiệu quả hơn nhiều; các bản vá lỗi lớn hơn nhiều. Nó có lợi thế là nó hỗ trợ định dạng VCDIFF chuẩn (RFC 3284), được hỗ trợ bởi một số công cụ khác, vì vậy nếu bạn cần làm việc với các công cụ khác, nó sẽ hữu ích hơn.

+0

Một cảnh báo trước: các hệ thống nhúng trong hệ thống nhúng (trong các thẻ), và trang chủ bsdiff nói "bsdiff là một bộ nhớ khá đói" - tôi chưa bao giờ nghĩ về điều đó. – loreb

+0

@loreb Phần là bộ nhớ đói là phần "khác", trong đó bạn tạo ra đồng bằng (nói chung trên một máy phát triển hoặc xây dựng). Phần bản vá có nhiều yêu cầu bộ nhớ hợp lý hơn. –

+0

Nó không xảy ra với tôi, cảm ơn – loreb

-1

Bạn có thể sử dụng diff:

diff old_file new_file 

Bạn cũng có thể sử dụng md5 nhưng bạn phải so sánh kết quả hơn. Nó cũng có thể được sử dụng để kiểm tra tổng số tập tin tải về nếu tổng kiểm tra md5 có sẵn.

Các vấn đề liên quan