Nếu bạn là người dùng Linux và làm việc với nhiều bản phân phối Linux khác nhau trong công việc, bạn có thể thấy mình đang gõ lệnh trên hệ thống Linux không có GUI. Điều này có nghĩa là bạn sẽ không còn quyền truy cập vào các ứng dụng GUI yêu thích của mình nữa - ví dụ, Gedit để chỉnh sửa tệp mà bạn thường sử dụng cho công việc của mình.
Bất kể bạn là quản trị viên hệ thống hay nhà phát triển, so sánh tệp là một nhiệm vụ mà hầu như mọi người đều phải thực hiện trong công việc của mình. Nhưng nếu bạn cần so sánh hai tệp trong khi làm việc trên hệ thống Linux CLI thuần túy thì sao? Tất nhiên, công cụ so sánh dựa trên GUI yêu thích của bạn sẽ không khả dụng với bạn. Tất nhiên, bạn sẽ phải sử dụng tiện ích dòng lệnh để hoàn thành công việc.
Trên Linux, bạn có thể sử dụng lệnh diff để so sánh hai tệp, nhưng tiện ích này hơi khó học. Nếu bạn không biết diff hoạt động như thế nào và đang tìm kiếm hướng dẫn nhanh để bắt đầu, bạn đã đến đúng nơi rồi. Trong bài viết này, chúng tôi sẽ trình bày những điều cơ bản về lệnh này cùng với một số ví dụ dễ hiểu.
Trong khi [OPTION] biểu thị các tùy chọn dòng lệnh khác nhau mà công cụ cung cấp, FILES thường là một vài tên tệp. Mặc dù trang hướng dẫn diff chứa thông tin hữu ích về lệnh, nhưng tài liệu đầy đủ về diff được duy trì dưới dạng hướng dẫn Texinfo. Nếu các chương trình info và diff được cài đặt đúng cách tại trang web của bạn, lệnh
sẽ cung cấp cho bạn quyền truy cập vào hướng dẫn đầy đủ.
file1:
file2:
Sau đây là cách bạn có thể sử dụng lệnh diff để so sánh hai tệp này files:
Và đây là kết quả đầu ra mà lệnh trên tạo ra:
Kết quả đầu ra có vẻ khó hiểu, đúng không? Chúng ta sẽ tìm hiểu sau. Trước tiên, hãy cùng tìm hiểu cấu trúc cơ bản của đầu ra mà diff tạo ra nói chung.
Điều đầu tiên cần ghi nhớ là đầu ra biểu thị những thay đổi cần thiết để chuyển đổi file1 (thường là tệp gốc) thành file2 (tệp mới hoặc đã thay đổi). Đầu ra thường bao gồm các dòng bắt đầu bằng một số (hoặc một phạm vi) theo sau là một chữ cái (a, d hoặc c) và một số khác (hoặc phạm vi). Ví dụ 2c2 (từ đầu ra ở trên).
Số đầu tiên biểu thị dòng (hoặc phạm vi các dòng) từ file1 (tệp gốc), trong khi số cuối cùng biểu thị dòng (hoặc phạm vi các dòng) từ file2 (tệp mới). Đối với bảng chữ cái ở giữa, a[/b]đại diện chođã thêm, dđại diện cho đã xóa và cđại diện chođã thay đổi.
Vì vậy, 2c2 có nghĩa là dòng thứ hai trong tệp gốc đã thay đổi và cần được thay thế bằng dòng thứ hai từ tệp mới để làm cho các tệp giống nhau. Nếu bạn so sánh thủ công hai tệp (file1 và file2) thì bạn sẽ thấy chính xác như vậy.
Đối với ba dòng theo sau 2c2 trong ví dụ đã đề cập ở trên, dòng bắt đầu bằng '<' không gì khác ngoài dòng thứ hai từ file1 và dòng bắt đầu bằng '>' không gì khác ngoài dòng đang nói đến từ tệp 2. Ba dấu gạch nối ở giữa chúng (---) chỉ nhằm mục đích phân tách.
Bây giờ có cần phải xem lại đầu ra của ví dụ đầu tiên không? Rất có thể là không vì lời giải thích ở trên đã tự giải thích rồi. Bây giờ, hãy lấy một ví dụ khác.
Đây là file1:
Đây là file2:
Đây là lệnh (vẫn là giống nhau):
Và đây là kết quả đầu ra:
Vì vậy, bạn có thể thấy rằng trong trường hợp này, đầu ra chính - 2,4c2,4 - bao gồm nhiều số trước và sau bảng chữ cái. Về cơ bản, đây là các phạm vi - 2,4 biểu thị số dòng 2,3 và 4. Vì vậy, đầu ra có nghĩa là số dòng từ 2 đến 4 trong tệp gốc (file1) đã thay đổi và cần được thay thế bằng số dòng từ 2 đến 4 từ file2 để làm cho các tệp giống nhau.
Tiếp theo, chúng ta hãy thay đổi nội dung của các tệp một chút. Trong khi file1 vẫn giữ nguyên, file2 giờ trở thành:
Bây giờ, nếu bạn chạy lệnh diff, đầu ra sau sẽ được tạo ra:
Vì vậy, bạn có thể thấy rằng công cụ ngay lập tức nhận ra rằng đoạn văn thứ hai trong file2 không gì khác ngoài những gì chứa trong file1. Vì vậy, đầu ra cho biết các dòng từ 1 đến 5 từ file2 phải được thêm vào đầu file1 để làm cho hai tệp giống nhau.
Và nếu bạn xóa dòng cuối cùng ("Thanks.") khỏi file2, đây là đầu ra:
Bạn có thể thấy rằng đầu ra bây giờ cũng chứa 4d8,điều đó có nghĩa là dòng thứ tư trong file1 phải bị xóa để làm cho cả hai tệp đồng bộ hóa bắt đầu từ dòng số 8. Tất nhiên, điều này xảy ra sau khi bạn giải quyết thay đổi 0a1,5 được đề cập đầu tiên.
Bạn cũng có thể muốn xem lệnh sdiff có khả năng hiển thị cho bạn sự khác biệt trong các tệp side by side.
Bất kể bạn là quản trị viên hệ thống hay nhà phát triển, so sánh tệp là một nhiệm vụ mà hầu như mọi người đều phải thực hiện trong công việc của mình. Nhưng nếu bạn cần so sánh hai tệp trong khi làm việc trên hệ thống Linux CLI thuần túy thì sao? Tất nhiên, công cụ so sánh dựa trên GUI yêu thích của bạn sẽ không khả dụng với bạn. Tất nhiên, bạn sẽ phải sử dụng tiện ích dòng lệnh để hoàn thành công việc.
Trên Linux, bạn có thể sử dụng lệnh diff để so sánh hai tệp, nhưng tiện ích này hơi khó học. Nếu bạn không biết diff hoạt động như thế nào và đang tìm kiếm hướng dẫn nhanh để bắt đầu, bạn đã đến đúng nơi rồi. Trong bài viết này, chúng tôi sẽ trình bày những điều cơ bản về lệnh này cùng với một số ví dụ dễ hiểu.
Lệnh Linux Diff
Thay vì trực tiếp chuyển sang các ví dụ, tốt hơn hết là bạn nên biết một chút về lệnh này trước. trang hướng dẫncủa lệnh diff cho thấy công cụ này so sánh các tệp theo từng dòng. Cú pháp của nó là:
Mã:
diff [OPTION]... FILES
Mã:
info diff
Cách sử dụng/Ví dụ về diff
Bây giờ chúng ta hãy thảo luận về cách sử dụng diff. Đối với điều này, chúng ta hãy bắt đầu với một ví dụ cơ bản. Giả sử sau đây là hai tệp mà chúng ta muốn so sánh:file1:
Mã:
test[B]test2
test3
Mã:
test
test23
test3
Mã:
diff file1 file2
Mã:
2c2
< test2
---
> test23
Điều đầu tiên cần ghi nhớ là đầu ra biểu thị những thay đổi cần thiết để chuyển đổi file1 (thường là tệp gốc) thành file2 (tệp mới hoặc đã thay đổi). Đầu ra thường bao gồm các dòng bắt đầu bằng một số (hoặc một phạm vi) theo sau là một chữ cái (a, d hoặc c) và một số khác (hoặc phạm vi). Ví dụ 2c2 (từ đầu ra ở trên).
Số đầu tiên biểu thị dòng (hoặc phạm vi các dòng) từ file1 (tệp gốc), trong khi số cuối cùng biểu thị dòng (hoặc phạm vi các dòng) từ file2 (tệp mới). Đối với bảng chữ cái ở giữa, a[/b]đại diện chođã thêm, dđại diện cho đã xóa và cđại diện chođã thay đổi.
Vì vậy, 2c2 có nghĩa là dòng thứ hai trong tệp gốc đã thay đổi và cần được thay thế bằng dòng thứ hai từ tệp mới để làm cho các tệp giống nhau. Nếu bạn so sánh thủ công hai tệp (file1 và file2) thì bạn sẽ thấy chính xác như vậy.
Đối với ba dòng theo sau 2c2 trong ví dụ đã đề cập ở trên, dòng bắt đầu bằng '<' không gì khác ngoài dòng thứ hai từ file1 và dòng bắt đầu bằng '>' không gì khác ngoài dòng đang nói đến từ tệp 2. Ba dấu gạch nối ở giữa chúng (---) chỉ nhằm mục đích phân tách.
Bây giờ có cần phải xem lại đầu ra của ví dụ đầu tiên không? Rất có thể là không vì lời giải thích ở trên đã tự giải thích rồi. Bây giờ, hãy lấy một ví dụ khác.
Đây là file1:
Mã:
Hi all,
This is a diff command tutorial
from HowtoForge.
Hope you'll benefit from it.
Thanks.
Mã:
Hi all,
Welcome to HowtoForge.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.
Mã:
diff file1 file2
Mã:
2,4c2,4
< This is a diff command tutorial
< from HowtoForge.
< Hope you'll benefit from it.
---
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
Tiếp theo, chúng ta hãy thay đổi nội dung của các tệp một chút. Trong khi file1 vẫn giữ nguyên, file2 giờ trở thành:
Mã:
Welcome to HowtoForge.
In this tutorial, we'll discuss the diff tool.
Hope you'll find it beneficial.
Thanks.
This is a diff command tutorial
from HowtoForge.
Hope you'll benefit from it.
Thanks.
Mã:
0a1,5
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
>
Và nếu bạn xóa dòng cuối cùng ("Thanks.") khỏi file2, đây là đầu ra:
Mã:
0a1,5
> Welcome to HowtoForge.
> In this tutorial, we'll discuss the diff tool.
> Hope you'll find it beneficial.
> Thanks.
>
4d8
< Thanks.
Bạn cũng có thể muốn xem lệnh sdiff có khả năng hiển thị cho bạn sự khác biệt trong các tệp side by side.