Android

Lệnh Diff trong linux

Linux команда diff - команда сравнения текстовых файлов.

Linux команда diff - команда сравнения текстовых файлов.

Mục lục:

Anonim

diff là một tiện ích dòng lệnh cho phép bạn so sánh hai tệp theo từng dòng. Nó cũng có thể so sánh nội dung của các thư mục.

Lệnh diff được sử dụng phổ biến nhất để tạo một bản vá chứa sự khác biệt giữa một hoặc nhiều tệp có thể được áp dụng bằng lệnh patch .

Cách sử dụng lệnh diff

Cú pháp của lệnh diff như sau:

diff… FILES

Lệnh diff có thể hiển thị đầu ra ở một số định dạng với định dạng thông thường, bối cảnh và thống nhất là những định dạng phổ biến nhất. Đầu ra bao gồm thông tin về những dòng trong tệp phải được thay đổi để chúng trở nên giống hệt nhau. Nếu các tập tin phù hợp, không có đầu ra được sản xuất.

Để lưu đầu ra lệnh vào một tệp, sử dụng toán tử chuyển hướng:

diff file1 file2 > patch

, chúng tôi sẽ sử dụng hai tệp sau để giải thích cách hoạt động của lệnh diff :

tập tin1

Ubuntu Arch Linux Debian CentOS Fedora tập tin2

Kubuntu Ubuntu Debian Arch Linux Centos Fedora

Định dạng bình thường

Ở dạng đơn giản nhất khi lệnh diff chạy trên hai tệp văn bản mà không có tùy chọn nào, nó tạo ra một đầu ra ở định dạng bình thường:

diff file1 file2

Đầu ra sẽ trông giống như thế này:

0a1 > Kubuntu 2d2 < Arch Linux 4c4, 5 < CentOS --- > Arch Linux > Centos

Định dạng đầu ra bình thường bao gồm một hoặc nhiều phần mô tả sự khác biệt. Mỗi phần trông như thế này:

change-command < from-file-line… --- > to-file-line…

0a1 , 2d2 4c4, 5 là các lệnh thay đổi. Mỗi lệnh thay đổi chứa các mục sau, từ trái sang phải:

  • Số dòng hoặc phạm vi của dòng trong tệp đầu tiên. Ký tự thay đổi đặc biệt. Số dòng hoặc phạm vi của dòng trong tệp thứ hai.

Ký tự thay đổi có thể là một trong những điều sau đây:

  • a - Thêm các dòng. c - Thay đổi các dòng. d - Xóa các dòng.

Lệnh thay đổi được theo sau bởi các dòng hoàn chỉnh được loại bỏ ( < ) và thêm vào tệp ( > ).

Hãy giải thích đầu ra:

  • 0a1 - Thêm dòng 1 của tệp thứ hai vào đầu tệp1 (sau dòng 0 ).
    • > Kubuntu - Dòng từ dòng thứ hai được thêm vào tệp đầu tiên như được mô tả ở trên.
    2d2 - Xóa dòng 2 trong tệp đầu tiên. 2 sau ký hiệu d có nghĩa là nếu dòng không bị xóa, nó sẽ xuất hiện trên dòng 2 trong tệp thứ hai.
    • < Arch Linux - dòng đã bị xóa.
    4c4, 5 - Thay thế (thay đổi) dòng 5 trong tệp đầu tiên bằng các dòng 4-5 từ tệp thứ hai.
    • < CentOS - Dòng trong tệp đầu tiên được thay thế. --- - Dấu phân cách. > Arch Linux > Centos - Các dòng từ tệp thứ hai thay thế dòng trong tệp đầu tiên.

Định dạng bối cảnh

Khi định dạng đầu ra bối cảnh được sử dụng, lệnh diff hiển thị một số dòng ngữ cảnh xung quanh các dòng khác nhau giữa các tệp.

Tùy chọn -c yêu cầu diff tạo ra đầu ra ở định dạng ngữ cảnh:

diff -c file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 6 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 7 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

Đầu ra bắt đầu bằng tên và dấu thời gian nếu các tệp được so sánh và một hoặc nhiều phần mô tả sự khác biệt. Mỗi phần trông như thế này:

*************** *** from-file-line-numbers **** from-file-line… --- to-file-line-numbers ---- to-file-line…

  • from-file-line-numbers to-file-line-numbers - Số dòng hoặc phạm vi dòng được phân tách bằng dấu phẩy trong tệp thứ nhất và thứ hai, tương ứng. from-file-line to-file-line - Các dòng khác nhau và các dòng của bối cảnh:
    • Các dòng bắt đầu bằng hai khoảng trắng là các dòng ngữ cảnh, các dòng giống nhau trong cả hai tệp. Các dòng bắt đầu bằng ký hiệu dấu trừ ( - ) là các dòng tương ứng với không có gì trong tệp thứ hai. Các dòng bị thiếu trong tệp thứ hai. Các dòng bắt đầu bằng ký hiệu dấu cộng ( + ) là các dòng tương ứng với không có gì trong tệp đầu tiên. Các dòng bị thiếu trong tệp đầu tiên. Các dòng bắt đầu bằng dấu chấm than ( ! ) Là các dòng được thay đổi giữa hai tệp. Mỗi nhóm dòng bắt đầu với ! từ tệp đầu tiên có một kết quả khớp tương ứng trong tệp thứ hai.

Hãy giải thích các phần quan trọng nhất của đầu ra:

  • Trong ví dụ này, chúng tôi chỉ có một phần mô tả sự khác biệt. *** 1, 6 **** --- 1, 7 ---- cho chúng tôi biết phạm vi của các dòng từ các tệp đầu tiên và thứ hai được bao gồm trong phần này. Các Ubuntu , Debian , Fedora và dòng trống cuối cùng là giống nhau trong cả hai tập tin. Các dòng này đang bắt đầu với double space.Line - Arch Linux từ tệp đầu tiên tương ứng với không có gì trong tệp thứ hai. Mặc dù dòng này cũng tồn tại trong tệp thứ hai, nhưng các vị trí khác nhau.ine + Kubfox từ tệp thứ hai tương ứng với không có gì trong tệp đầu tiên. ! CentOS từ tập tin và dòng đầu tiên ! Arch Linux ! Arch Linux ! CentOS ! CentOS từ tệp thứ hai được thay đổi giữa các tệp.

Theo mặc định, số lượng dòng ngữ cảnh mặc định là ba. Để chỉ định một số khác, hãy sử dụng tùy chọn -C ( --contexts ):

diff -C 1 file1 file2

*** file1 2019-11-25 21:00:26.422426523 +0100 --- file2 2019-11-25 21:00:36.342231668 +0100 *************** *** 1, 5 **** Ubuntu - Arch Linux Debian ! CentOS Fedora --- 1, 6 ---- + Kubuntu Ubuntu Debian ! Arch Linux ! Centos Fedora

Định dạng hợp nhất

Định dạng đầu ra hợp nhất là một phiên bản cải tiến của định dạng ngữ cảnh và tạo ra đầu ra nhỏ hơn.

Sử dụng tùy chọn -u để báo cho diff để in đầu ra ở định dạng hợp nhất:

diff -u file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian -CentOS +Arch Linux +Centos Fedora

Đầu ra bắt đầu bằng tên và dấu thời gian của tệp và một hoặc nhiều phần mô tả sự khác biệt. Mỗi phần có dạng sau:

*************** @@ from-file-line-numbers to-file-line-numbers @@ line-from-files…

  • @@ from-file-line-numbers to-file-line-numbers @@ - Số dòng hoặc phạm vi của các dòng từ các tệp đầu tiên và thứ hai có trong phần này. line-from-files - Các dòng khác nhau và các dòng của bối cảnh:
    • Các dòng bắt đầu bằng hai khoảng trắng là các dòng ngữ cảnh, các dòng giống nhau trong cả hai tệp. Các dòng bắt đầu bằng ký hiệu dấu trừ ( - ) là các dòng được xóa khỏi tệp đầu tiên. Các dòng bắt đầu bằng ký hiệu cộng ( + ) là các dòng được thêm vào từ tập tin đầu tiên.

Bỏ qua trường hợp

Như bạn có thể nhận thấy trong các ví dụ trên, lệnh diff được phân biệt chữ hoa chữ thường.

Sử dụng tùy chọn -i để thông báo diff để bỏ qua trường hợp:

diff -ui file1 file2

--- file1 2019-11-25 21:00:26.422426523 +0100 +++ file2 2019-11-25 21:00:36.342231668 +0100 @@ -1, 6 +1, 7 @@ +Kubuntu Ubuntu -Arch Linux Debian +Arch Linux CentOS Fedora

Phần kết luận

So sánh các tệp văn bản cho sự khác biệt là một trong những nhiệm vụ phổ biến nhất đối với các quản trị viên hệ thống Linux.

Lệnh diff so sánh các tệp theo từng dòng. Để biết thêm thông tin, nhập man diff trong thiết bị đầu cuối của bạn.

thiết bị đầu cuối khác