Hướng dẫn sử dụng lệnh cmp Linux cho người mới bắt đầu (7 ví dụ)

theanh

Administrator
Nhân viên
Lệnh cmp được sử dụng trong hệ điều hành Linux để so sánh hai tệp theo từng byte. Lệnh này cung cấp đầu ra ngắn gọn về sự khác biệt giữa hai tệp, cho phép người dùng dễ dàng xác định sự khác biệt giữa chúng. Lệnh cmp hiển thị số byte không khớp xảy ra tại các offset và cung cấp số lượng tóm tắt các lần so sánh sai. Với công cụ hữu ích này, người dùng có thể kiểm tra xem hai tệp có giống hệt nhau hay không một cách nhanh chóng.

Trong hướng dẫn này, chúng ta sẽ thảo luận về 'cmp' thông qua các ví dụ dễ hiểu. Nhưng trước khi thực hiện, cần lưu ý rằng tất cả các ví dụ và hướng dẫn được đề cập trong hướng dẫn này đều đã được thử nghiệm trên Ubuntu 22.04.

lệnh cmp​

Lệnh 'cmp' cho phép bạn thực hiện so sánh từng byte của hai tệp. Tiện ích cung cấp một số tính năng dưới dạng tùy chọn dòng lệnh. Trong hướng dẫn này, chúng tôi sẽ thảo luận về một số tùy chọn chính sẽ cung cấp cho bạn (người mới bắt đầu) ý tưởng hay về cách công cụ này hoạt động.

1. Cách so sánh hai tệp bằng cmp​

Ở dạng đơn giản nhất, bạn có thể sử dụng 'cmp' theo cách sau:
Mã:
cmp [file1-name] [file2-name]
Như đã đề cập, công cụ này so sánh hai tệp theo từng byte. Khi tìm thấy sự khác biệt, công cụ dừng lại và tạo ra một đầu ra cho biết sự khác biệt nằm ở dòng và byte nào.

Ví dụ:
Mã:
cmp file1.txt file2.txt

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22150%22%3E%3C/svg%3E


Như bạn có thể thấy trong ảnh chụp màn hình ở trên, đầu ra cho biết rõ ràng các tệp khác nhau ở byte 20 ở dòng 1.

2. Cách làm cho cmp in ra các byte khác nhau​

Nếu muốn, bạn cũng có thể làm cho 'cmp' hiển thị các byte khác nhau trong đầu ra của nó. Bạn có thể thực hiện việc này bằng cách sử dụng tùy chọn dòng lệnh -b.
Mã:
cmp -b [file1] [file2]
Ví dụ:
Mã:
cmp -b file1.txt file2.txt

cmp-b.png



Trong trường hợp này, như bạn có thể thấy trong ảnh chụp màn hình ở trên, sự khác biệt nằm ở byte thứ 17, tức là 'l' trong file1.txt và 'i' trong file2.txt. Giá trị 154 và 151 lần lượt là giá trị của các byte này.

3. Cách làm cho cmp bỏ qua một số byte ban đầu từ cả hai tệp​

Nếu muốn, bạn cũng có thể làm cho 'cmp' bỏ qua một số byte ban đầu cụ thể từ cả hai tệp rồi so sánh chúng. Bạn có thể thực hiện việc này bằng cách chỉ định số byte làm đối số cho tùy chọn dòng lệnh -i.

cmp -i [bytes-to-be-skipped] [file1] [file2]

Ví dụ:

cmp -i 10 file1.txt file2.txt

Lưu ý rằng trong những trường hợp như thế này (khi bạn sử dụng -i để bỏ qua byte), byte mà phép so sánh bắt đầu được coi là byte số không.

Tiếp theo, công cụ này cũng cho phép bạn bỏ qua một số byte khác nhau từ cả hai tệp. Bạn có thể thực hiện theo cách sau:
Mã:
cmp -i [bytes-to-skip-from-first-file] : [bytes-to-skip-from-second-file] [file1] [file2]
Ví dụ:
Mã:
cmp -i 4:7 file1.txt file2.txt

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22180%22%3E%3C/svg%3E

4. Cách làm cho cmp hiển thị vị trí byte (và giá trị) cho tất cả các byte khác nhau​

Bạn cũng có thể làm cho lệnh 'cmp' in vị trí byte và giá trị byte cho tất cả các byte khác nhau. Có thể truy cập tính năng này bằng tùy chọn dòng lệnh -l.
Mã:
cmp -l [file1] [file2]
Ví dụ:
Mã:
cmp -l file1.txt file2.txt

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22308%22%3E%3C/svg%3E


Cột đầu tiên trong đầu ra (ví dụ hiển thị ở trên) biểu thị vị trí (số byte) của các byte khác nhau. Cột thứ hai biểu thị giá trị byte của byte khác nhau trong tệp đầu tiên, trong khi cột thứ ba biểu thị giá trị byte của byte khác nhau trong tệp thứ hai.

5. Cách giới hạn số byte được so sánh​

Công cụ này cũng cho phép bạn giới hạn số byte bạn muốn so sánh - chẳng hạn, bạn có thể muốn so sánh nhiều nhất là 25 hoặc 50 byte. Bạn có thể thực hiện việc này bằng cách sử dụng tùy chọn dòng lệnh -n.

$ cmp -n [number-of-bytes-to-be-compared] [file1] [file2]

Ví dụ:

$ cmp -n 25 file1.txt file2.txt

6. Cách hiển thị đồng hồ đo tiến trình khi sử dụng lệnh cmp​

Khi so sánh các tệp lớn (hoặc thậm chí là các phân vùng) bằng 'cmp', bạn có thể muốn xem tiến trình của quá trình so sánh đang diễn ra. Bạn có thể thực hiện lệnh này bằng lệnh 'pv' cùng với lệnh 'cmp'. Sau đây là mẫu lệnh mà bạn có thể sử dụng:
Mã:
$ pv [file1] | cmp -l [file2] > [output-file]
Ví dụ:
Mã:
$ pv file1.txt | cmp -l file3.txt > output.txt

data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22500%22%20height=%22114%22%3E%3C/svg%3E


Lưu ý rằng tệp 'output.txt' sẽ chứa tất cả đầu ra mà lệnh 'cmp' tạo ra. Đồng hồ đo tiến trình (mà bạn có thể thấy trong ảnh chụp màn hình ở trên) được tạo ra bởi lệnh 'pv'.

Lệnh 'pv' thường không được cài đặt sẵn trong Linux (ít nhất là trên Ubuntu). Nhưng bạn có thể dễ dàng cài đặt nó bằng lệnh sau:

sudo apt-get install pv

7. Cách khiến 'cmp' ẩn đầu ra​

Công cụ này cũng cho phép bạn ẩn đầu ra mà nó tạo ra một cách bình thường. Bạn có thể thực hiện việc này bằng cách sử dụng tùy chọn dòng lệnh -s.
Mã:
$ cmp -s [file1] [file2]
Ví dụ:
Mã:
$ cmp -s file1.txt file2.txt
Tùy chọn này có thể hữu ích khi sử dụng tiện ích 'cmp' trong các tập lệnh. Ví dụ, tùy thuộc vào việc các tệp có giống hệt nhau hay không (điều này có thể biết được bằng cách truy cập mã thoát của lệnh), bạn có thể muốn hiển thị thông báo tùy chỉnh thay vì đầu ra mà công cụ thường tạo ra.

Kết luận​

Chúng tôi đã thảo luận về hầu hết các tùy chọn lệnh 'cmp' trong bài viết này, vì vậy bạn cần thực hành các tùy chọn này để bắt đầu sử dụng công cụ trong công việc hàng ngày của mình. Trong trường hợp có bất kỳ nghi ngờ hoặc thắc mắc nào, hãy tham khảo trang hướng dẫn 'cmp'.
 
Back
Bên trên