Trả lời Canonical
Về rdiff bài viết, librsync 2.0.1
là một đọc tốt cho việc làm rõ chức năng lệnh vì vậy tôi đã tham chiếu mà dưới đây để bảo vệ nội dung cho câu trả lời này nếu không có gì khác.
Điều quan trọng là bạn phải cố gắng để có được một sự hiểu biết tốt về rdiff ba bước để cập nhật một tập tin: chữ ký , đồng bằng , và vá như nói về trên rdiff trang người đàn ông. Tôi cũng đã tìm thấy một tập rdiff
lệnh ví dụ lệnh trên GitHub rất hữu ích mà tôi sẽ tham khảo và trích dẫn.
Bản chất...
- Với "bắt đầu" hoặc tệp cơ sở [
file1
] và bạn tạo một tệp chữ ký từ nó
- Cái này thường nhỏ hơn nhiều so với tệp gốc / tệp gốc
- Với tệp chữ ký, bạn so sánh nó với tệp khác [
file2
] tương tự tệp cơ sở của bạn nhưng khác ( ví dụ: được cập nhật gần đây ) và tạo tệp delta chỉ chứa sự khác biệt giữa hai tệp
- Sử dụng "chỉ khác biệt" hoặc tệp delta và so sánh nó với tệp cơ sở của bạn [
file1
] để tạo tệp mới chứa các thay đổi từ tệp khác [ file2
] khớp với hai tệp .
rdiff signature file1 signature-file ## signature base file1
rdiff delta signature-file file2 delta-file ## delta differences file2
rdiff patch file1 delta-file gen-file ## compare delta to file1 to create matching file2
ndiff-example.sh
# $ rdiff --help
# Usage: rdiff [OPTIONS] signature [BASIS [SIGNATURE]]
# [OPTIONS] delta SIGNATURE [NEWFILE [DELTA]]
# [OPTIONS] patch BASIS [DELTA [NEWFILE]]
# Options:
# -v, --verbose Trace internal processing
# -V, --version Show program version
# -?, --help Show this help message
# -s, --statistics Show performance statistics
# Delta-encoding options:
# -b, --block-size=BYTES Signature block size
# -S, --sum-size=BYTES Set signature strength
# --paranoia Verify all rolling checksums
# IO options:
# -I, --input-size=BYTES Input buffer size
# -O, --output-size=BYTES Output buffer size
# create signature for old file
rdiff signature old-file signature-file
# create delta using signature file and new file
rdiff delta signature-file new-file delta-file
# generate new file using old file and delta
rdiff patch old-file delta-file gen-file
# test
diff -s gen-file new-file
# Files gen-file and new-file are identical
ndiff là một chương trình để tính toán và áp dụng deltas mạng. Một delta delta là một delta giữa các tệp nhị phân, mô tả cách có thể tự động chỉnh sửa tệp cơ sở (hoặc cũ) để tạo tệp kết quả (hoặc mới).
Không giống như hầu hết các chương trình khác, librsync không yêu cầu quyền truy cập vào cả hai tệp khi độ lệch được tính toán. Việc tính toán một delta yêu cầu chỉ cần một "chữ ký" ngắn của tệp cũ và nội dung đầy đủ của tệp mới. Chữ ký chứa tổng kiểm tra cho các khối của tập tin cũ. Sử dụng các tổng kiểm tra này, ndiff tìm thấy các khối phù hợp trong tệp mới và sau đó tính toán delta.
Deliff deltas thường ít gọn hơn và cũng chậm sản xuất hơn xdeltas hoặc khác biệt văn bản thông thường. Nếu có thể có cả tệp cũ và tệp mới khi tính toán delta, xdelta thường sẽ tạo ra một tệp nhỏ hơn nhiều. Nếu các tệp được so sánh là văn bản thuần túy, thì GNU diff thường là lựa chọn tốt hơn, vì các khác biệt có thể được xem bởi con người và được áp dụng dưới dạng khớp không chính xác.
Thông báo xuất hiện khi không thuận tiện để có cả hai tệp cùng một lúc. Một ví dụ về điều này là hai tệp nằm trên các máy riêng biệt và bạn chỉ muốn chuyển các khác biệt. Một ví dụ khác là khi một trong các tệp đã được chuyển sang lưu trữ hoặc sao lưu phương tiện, chỉ để lại chữ ký của nó.
Tượng trưng
signature(basis-file) -> sig-file
delta(sig-file, new-file) -> delta-file
patch(basis-file, delta-file) -> recreated-file
Sử dụng các mẫu
Một ứng dụng điển hình của thuật toán rsync là chuyển tệp A2 từ máy A sang máy B có tệp A1 tương tự. Điều này có thể được thực hiện như sau:
- B tạo chữ ký thứ 1 của A1. Gọi S1 này. B gửi chữ ký đến A. (Chữ ký thường nhỏ hơn nhiều so với tệp mà nó mô tả.)
- A tính toán đồng bằng bậc 1 giữa S1 và A2. Gọi delta này D. A gửi delta đến B.
- B áp dụng delta để tạo lại A2. Trong trường hợp A1 và A2 chứa các byte giống hệt nhau, thì thông báo sẽ tiết kiệm không gian đáng kể.
nguồn