Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Linux khác biệt - Cách hiển thị sự khác biệt và tạo bản vá, với ví dụ

diff lệnh là một cách dễ dàng để so sánh các tệp hoặc thư mục từ Linux shell. Bài viết này sẽ hướng dẫn bạn cách sử dụng nó, với một số ví dụ về cách sử dụng phổ biến.

Khác biệt lệnh thực hiện so sánh từng dòng của hai tệp hoặc thư mục và đưa ra sự khác biệt giữa chúng.

Tại sao bạn muốn so sánh các tệp hoặc thư mục?

  • Bạn có thể có hai tệp trùng tên trông giống nhau và muốn xem sự khác biệt giữa chúng.
  • So sánh các thay đổi đối với mã lập trình trong dự án bạn đang xây dựng giữa phiên bản mới và phiên bản cũ.
  • Bạn đã sao chép nhiều tệp vào một ổ đĩa khác và muốn đảm bảo mọi thứ được sao chép thành công và không bị hỏng.
  • Bạn và một người bạn đều có cùng một bộ tệp trong một thư mục. Bạn đã thực hiện các thay đổi đối với của mình, nhưng không muốn gửi lại tất cả chúng cho bạn bè của mình. Bạn có thể sử dụng diff để tạo một bản vá chỉ chứa những thay đổi được thực hiện đối với các tệp đó, hãy gửi cho chúng, sau đó cập nhật bản sao của chúng mà không cần phải tải xuống lại mọi thứ.

Có thể bạn sẽ có lý do riêng để so sánh các tệp, cứ như vậy với diff và cách sử dụng nó.

diff Cú pháp

diff OPTIONS FILES

Lưu ý rằng:

  • OPTIONS là tùy chọn và có thể được cung cấp từ bảng dưới đây
  • FILES là đường dẫn đến hai tệp sẽ được so sánh, được phân tách bằng dấu cách

diff Tùy chọn

Dưới đây là TÙY CHỌN được sử dụng phổ biến nhất cho khác biệt lệnh, ngay từ hướng dẫn sử dụng:

-q, –brief Chỉ báo cáo khi các tệp khác nhau
-s, –report-same-files Báo cáo khi hai tệp giống nhau
-u, -U NUM, –unified [=NUM] xuất NUM (3 mặc định) dòng ngữ cảnh hợp nhất
-N –tệp mới Coi các tệp vắng mặt là trống
-l, –paginate Chuyển đầu ra qua 'pr' để phân trang nó
-r, –recursive So sánh đệ quy bất kỳ thư mục con nào được tìm thấy
–no-dereference Không theo các liên kết tượng trưng
-a, –text Coi tất cả các tệp là văn bản
-d, –tối thiểu Cố gắng tìm một nhóm thay đổi nhỏ hơn
–speed-large-files Giả sử các tệp lớn và nhiều thay đổi nhỏ rải rác

Bạn có thể xem toàn bộ hướng dẫn sử dụng tại đây hoặc chạy:

man diff

… Từ dòng lệnh để có đầy đủ các tùy chọn.

Ví dụ

So sánh tệp với diff trong Linux

Đây là cách sử dụng đơn giản nhất của diff và sẽ xuất ra sự khác biệt giữa hai tệp được cung cấp vào bảng điều khiển:

diff file1.txt file2.txt

Chuyển hướng đầu ra

Nếu bạn chỉ muốn xem sự khác biệt hơn là tạo một bản vá, chỉ cần chuyển hướng đầu ra đến một tệp là hữu ích - để thiết bị đầu cuối không cắt bất kỳ thay đổi nào nếu có nhiều thay đổi:

diff -q file1.txt file2.txt > differences.txt

Điều này sẽ tạo ( hoặc ghi đè! ) difference.txt, sẽ tóm tắt sự khác biệt giữa hai tệp.

-q các tùy chọn đã được thêm vào để chỉ những điểm khác biệt được liệt kê; các tệp giống nhau sẽ không được đề cập để giúp bạn dễ dàng xem điều gì đang xảy ra.

So sánh Thư mục với diff

Các thư mục cũng có thể được so sánh bằng cách sử dụng -r (đệ quy) để so sánh nội dung của chúng:

diff -r -q /path/to/dir1 /path/to/dir2

Một lần nữa, tôi đã sử dụng -q ở đây để chỉ những điểm khác biệt được liệt kê.

So sánh các tệp lớn hoặc thư mục chứa tệp lớn

diff là một quá trình chuyên sâu - mọi tệp được so sánh đều cần được đọc và so sánh. Có thể mất một lúc.

–speed-large-files tùy chọn thay đổi diff’s để làm cho nó hiệu quả hơn nếu bạn đang so sánh các tệp lớn - tăng tốc mọi thứ một chút.

Tạo bản vá cho tệp

Để tạo bản vá - danh sách các điểm khác biệt giữa hai tệp có thể được áp dụng cho một bản sao khác của tệp đầu tiên để làm cho nó giống hệt với tệp thứ hai, có thể sử dụng lệnh sau:

diff -u file1.txt file2.txt > update.patch

-u tùy chọn tạo ra sự khác biệt trong một thống nhất định dạng có thể được sử dụng bởi bản vá lệnh cập nhật tệp gốc với các thay đổi.

Điều này rất hữu ích nếu bạn có một người bạn hoặc đồng nghiệp đang sử dụng một số dữ liệu hoặc mã lập trình của bạn và bạn muốn gửi cho họ các bản cập nhật mà bạn đã thực hiện mà không cần gửi lại toàn bộ tập dữ liệu hoặc ứng dụng.

Cài đặt bản vá cho tệp

Khi bạn bè của bạn nhận được bản vá, họ có thể áp dụng nó bằng cách sử dụng bản vá sau lệnh:

patch original.txt < update.patch

Hoàn tác bản vá cho tệp

Nếu bạn mắc lỗi, bạn có thể hoàn tác một bản vá bằng cách chạy ngược lại với -R tùy chọn:

patch -R original.txt < update.patch

Tạo bản vá cho thư mục

Lệnh sau sẽ tạo bản vá cho toàn bộ thư mục bằng cách chạy -r (đệ quy), -u (định dạng thống nhất) và -N (coi các tệp vắng mặt là trống).

diff -ruN originalDir updatedDir > update.patch

Cài đặt bản vá cho thư mục

Bản vá có thể được áp dụng cho một thư mục bằng cách sử dụng -p0 tùy chọn này sẽ áp dụng bản vá cho cùng một cấu trúc thư mục như nó đã được tạo trong:

patch -p0 < update.patch

Hoàn tác bản vá cho một thư mục

Cuối cùng, hoàn tác / đảo ngược việc vá thư mục:

patch -R -p0 originalFile < patchFile