Lệnh sdiff trên Linux là một tiện ích dòng lệnh dùng để so sánh sự khác biệt giữa hai file và hiển thị kết quả theo dạng song song, giúp bạn dễ quan sát các thay đổi giữa hai phiên bản file. Trong bài viết này, mình sẽ cung cấp một cái nhìn toàn diện về lệnh sdiff, từ cú pháp cơ bản đến các tùy chọn nâng cao, giúp bạn khai thác tối đa công cụ này để so sánh và quản lý các thay đổi trong file trên hệ thống Linux một cách hiệu quả.
Những điểm chính
- Định nghĩa lệnh
sdiffLinux: Hiểu rõ khái niệm, cú pháp cơ bản và mục đích chính của lệnhsdifftrong việc so sánh và hợp nhất file. - Cách thức hiển thị sự khác biệt: Nắm được cách
sdifftrình bày kết quả so sánh song song và ý nghĩa của các ký hiệu (|,<,>), giúp bạn đọc hiểu kết quả một cách trực quan. - Các ví dụ sử dụng thông dụng: Thành thạo các tùy chọn quan trọng để tùy chỉnh việc so sánh, từ bỏ qua khoảng trắng, chữ hoa/thường đến hợp nhất file ở chế độ tương tác.
- So sánh với các công cụ khác: Nhận biết được ưu điểm và trường hợp sử dụng lý tưởng của
sdiffso với các công cụ khác như diff và Meld. - Ứng dụng thực tế: Khám phá các ứng dụng thực tế của
sdifftrong các công việc hàng ngày như quản lý cấu hình và kiểm tra mã nguồn. - Giải đáp thắc mắc (FAQ): Có được câu trả lời cho các vấn đề nâng cao như cách so sánh thư mục, xử lý file lớn và khả năng tùy chỉnh.
Lệnh sdiff Linux là gì?
sdiff là tiện ích dòng lệnh trong Linux dùng để so sánh hai file và hiển thị các điểm khác nhau theo dạng song song, giúp dễ theo dõi sự thay đổi. Ngoài ra, lệnh sdiff này còn hỗ trợ chế độ tương tác để chọn và gộp nội dung khác biệt, xuất ra file mới, rất hữu ích cho lập trình viên và quản trị hệ thống khi cần đối chiếu hoặc hợp nhất dữ liệu

sdiff đặc biệt hữu ích cho các tác vụ như:
- Kiểm tra sự thay đổi trong các file cấu hình.
- So sánh mã nguồn giữa các phiên bản.
- Hợp nhất các thay đổi nhỏ từ hai file khác nhau.
Cú pháp của lệnh sdiff là:
sdiff [TÙY_CHỌN]... FILE_1 FILE_2Trong đó:
- [TÙY_CHỌN]…: Các tùy chọn (flags) khác nhau để điều chỉnh cách
sdiffso sánh và hiển thị kết quả. - FILE_1: Đường dẫn đến file đầu tiên để so sánh.
- FILE_2: Đường dẫn đến file thứ hai để so sánh.
Cách thức sdiff hiển thị sự khác biệt giữa hai file
Điểm đặc trưng và ưu việt nhất của sdiff so với các công cụ so sánh khác chính là ở cách thức trình bày kết quả. Thay vì hiển thị các khối thay đổi một cách tuần tự, sdiff xuất kết quả ra đầu ra tiêu chuẩn (standard output) dưới dạng song song (side-by-side format), giúp người dùng đối chiếu sự khác biệt một cách trực quan và nhanh chóng.
Để thực thi, bạn chỉ cần cung cấp tên của hai file cần so sánh, sdiff sẽ tự động phân tích và hiển thị kết quả theo các quy tắc ký hiệu rõ ràng:
- Dòng giống hệt nhau: Các dòng có nội dung hoàn toàn giống nhau ở cả hai file sẽ được hiển thị song song, ngăn cách bởi một chuỗi khoảng trắng (
series of spaces) ở giữa. - Dòng khác nhau: Khi một dòng có sự khác biệt về nội dung,
sdiffsẽ sử dụng ký hiệu|(dấu sổ đứng) để phân tách nội dung của file thứ nhất (bên trái) và file thứ hai (bên phải). - Dòng chỉ có ở File 1: Một dòng chỉ tồn tại trong file đầu tiên sẽ được hiển thị ở cột bên trái, kèm theo ký hiệu
<(dấu nhỏ hơn) ở giữa. - Dòng chỉ có ở File 2: Ngược lại, một dòng chỉ tồn tại trong file thứ hai sẽ được hiển thị ở cột bên phải, với ký hiệu
>(dấu lớn hơn) ở giữa.

Để tối ưu hóa trải nghiệm xem, đặc biệt trên các màn hình có độ rộng khác nhau, sdiff cung cấp tùy chọn để tùy chỉnh chiều rộng hiển thị. Bạn có thể sử dụng tùy chọn -w hoặc --width=SỐ để đặt số cột tối đa được in ra. Theo mặc định, chiều rộng này được thiết lập là 130 cột. Giá trị chiều rộng có thể được điều chỉnh trong khoảng từ tối thiểu là 20 đến tối đa là 2048 ký tự, giúp tránh tình trạng xuống dòng không mong muốn và giữ cho định dạng so sánh luôn rõ ràng.
Các ví dụ sử dụng sdiff thông dụng và thực tế
- So sánh cơ bản hai file song song
- Coi tất cả file là văn bản (-a)
- Bỏ qua khoảng trắng (-W, -z, -E)
- Không phân biệt chữ hoa/thường (-i)
- Bỏ qua dòng trống (-B)
- Tùy chỉnh số cột hiển thị (-w)
- Mở rộng tab thành khoảng trắng (-t)
- Chạy sdiff ở chế độ tương tác và ghi kết quả (-o)
- Sử dụng chương trình so sánh khác (–diff-program)
Để minh họa cách hoạt động của sdiff, mình tạo hai file mẫu:
- cal.txt: chứa lịch tháng (lấy từ lệnh cal)
- du.txt: chứa thông tin dung lượng đĩa (lấy từ lệnh df -h)
cal > cal.txt # Ghi lịch hiện tại vào cal.txt
df -h > du.txt # Ghi thông tin sử dụng đĩa vào du.txt1. So sánh cơ bản hai file song song
Bạn chạy lệnh sdiff với hai file cần so sánh để xem khác biệt theo hai cột song song:
sdiff du.txt cal.txt

Giải thích kết quả:
- Dấu | (Vertical bar): Cho biết dòng đó khác nhau ở cả hai file.
- Dấu < (Less than sign): Cho biết dòng đó chỉ có trong FILE_1 (bên trái) và không có trong FILE_2 (bên phải).
- Dấu > (Greater than sign): Cho biết dòng đó chỉ có trong FILE_2 (bên phải) và không có trong FILE_1 (bên trái).
- Những dòng giống nhau sẽ được hiển thị ở cả hai cột mà không có ký hiệu.
2. Coi tất cả file là văn bản (-a)
Tùy chọn -a yêu cầu sdiff xử lý mọi file như file văn bản và thực hiện so sánh theo từng dòng, không phụ thuộc vào định dạng gốc. Tùy chọn này đặc biệt hữu ích khi cần kiểm tra phần nội dung văn bản bên trong các file có thể chứa dữ liệu nhị phân.
sdiff -a du.txt cal.txt3. Bỏ qua khoảng trắng (-W, -z, -E)
Khi 2 file chỉ khác nhau ở cách dùng khoảng trắng nhưng nội dung không thay đổi, các tùy chọn sau giúp việc so sánh chính xác và dễ đọc hơn:
- Bỏ qua tất cả khoảng trắng (-W):
sdiffsẽ bỏ qua mọi thay đổi về số lượng hoặc loại khoảng trắng (ví dụ: nhiều dấu cách thay vì một dấu cách, tab thay vì dấu cách).
sdiff -W du.txt cal.txt- Bỏ qua khoảng trắng ở cuối dòng (
-z): Chỉ bỏ qua các dấu cách hoặc tab ở cuối mỗi dòng.
sdiff -z du.txt cal.txt- Bỏ qua thay đổi do mở rộng tab (
-E): Không tính các thay đổi phát sinh khi ký tự tab được chuyển thành khoảng trắng.
sdiff -E du.txt cal.txt4. Không phân biệt chữ hoa/thường (-i)
Bạn sử dụng tùy chọn -i để sdiff để coi chữ hoa và chữ thường là như nhau khi so sánh.
sdiff -i du.txt cal.txtVí dụ, “Hello” và “hello” sẽ được coi là giống nhau.
5. Bỏ qua dòng trống (-B)
Nếu hai file chỉ khác nhau ở các dòng trống, tùy chọn -B sẽ giúp bạn bỏ qua chúng:
sdiff -B du.txt cal.txt6. Tùy chỉnh số cột hiển thị (-w)
Mặc định, sdiff hiển thị kết quả trong 130 cột. Bạn có thể thay đổi độ rộng này bằng tùy chọn -w để phù hợp với màn hình terminal hoặc nhu cầu xem của mình.
sdiff -w 150 du.txt cal.txt7. Mở rộng tab thành khoảng trắng (-t)
Tùy chọn -t giúp căn chỉnh nội dung dễ đọc hơn bằng cách chuyển tab thành khoảng trắng, đặc biệt khi các file sử dụng tab với các kích thước khác nhau.
sdiff -t du.txt cal.txt8. Chạy sdiff ở chế độ tương tác và ghi kết quả (-o)
Tùy chọn -o cho phép chạy sdiff ở chế độ tương tác, giúp bạn trực tiếp lựa chọn cách xử lý từng điểm khác biệt giữa hai file và lưu nội dung đã hợp nhất vào một file mới.
sdiff du.txt cal.txt -o sdiff_merged.txt
Sau khi chạy lệnh này, sdiff sẽ hiển thị từng khối khác biệt và dừng lại với dấu % ở cuối dòng. Tại đây, bạn có thể nhập một trong các lệnh sau để thao tác:
ed: Chỉnh sửa và giữ cả hai phiên bản, mỗi phiên bản có tiêu đề riêng.eb: Chỉnh sửa rồi sử dụng cả hai phiên bản.elhoặce1: Chỉnh sửa rồi sử dụng phiên bản bên trái (file 1).erhoặce2: Chỉnh sửa rồi sử dụng phiên bản bên phải (file 2).e: Hủy bỏ cả hai phiên bản rồi chỉnh sửa một phiên bản mới.lhoặc1: Sử dụng phiên bản bên trái (file 1).rhoặc2: Sử dụng phiên bản bên phải (file 2).s: Tự động sao chép tất cả các dòng giống nhau vào file kết quả (không hiển thị chi tiết).v: Chèn các dòng giống nhau kèm hiển thị chi tiếtq: Thoát khỏi chế độ tương tác.
Lưu ý
9. Sử dụng chương trình so sánh khác (--diff-program)
Tùy chọn --diff-program cho phép bạn chỉ định một chương trình khác để sdiff sử dụng thay cho cơ chế mặc định. Cách này hữu ích khi bạn muốn áp dụng thuật toán so sánh quen thuộc nhưng vẫn giữ cách hiển thị song song của sdiff.
sdiff --diff-program=diff du.txt cal.txtTrong ví dụ này, sdiff sẽ sử dụng logic so sánh của lệnh diff để tìm ra sự khác biệt, sau đó hiển thị chúng theo định dạng song song.
So sánh sdiff với các công cụ khác
| Tiêu chí | diff | sdiff | Meld |
|---|---|---|---|
| Loại giao diện | Dòng lệnh (CLI). | Dòng lệnh (CLI). | Đồ họa (GUI). |
| Định dạng hiển thị | Dạng patch (theo khối, với các ký hiệu +, -, >). | Song song (side-by-side). | Đồ họa trực quan, tô màu các vùng khác biệt |
| Tính năng nổi bật | – Phân tích thay đổi chi tiết. – Tạo file patch. | – Hiển thị song song dễ nhìn. – Hợp nhất tương tác từng dòng. | – So sánh 2-3 file/thư mục. – Hợp nhất ba chiều (3-way merge). – Tích hợp hệ thống quản lý phiên bản (Git, SVN). |
| Trường hợp sử dụng lý tưởng | Phân tích chi tiết sự khác biệt để tạo file patch, sử dụng trong các script tự động hóa. | Xem nhanh các khác biệt một cách trực quan và hợp nhất thủ công từng phần ngay trên terminal. | Các tác vụ so sánh và hợp nhất phức tạp, so sánh toàn bộ thư mục, khi cần một giao diện thân thiện. |
Ứng dụng thực tế của sdiff
sdiff là công cụ so sánh linh hoạt, phù hợp với nhiều mục đích sử dụng khác nhau, cụ thể như:
- Quản lý cấu hình: So sánh các file cấu hình trước và sau khi thay đổi để nhanh chóng xác định sự khác biệt.
- Kiểm tra mã nguồn: Giúp các nhà phát triển so sánh hai phiên bản của một file mã nguồn để xem các dòng đã thay đổi.
- Hợp nhất nhanh: Trong trường hợp có các xung đột nhỏ hoặc cần hợp nhất thủ công giữa hai file, chế độ tương tác của
sdiffrất tiện lợi. - Giáo dục và học tập: Hữu ích trong việc minh họa sự thay đổi giữa các file, giúp người học hiểu rõ cách hoạt động của các công cụ so sánh trong Linux.

Câu hỏi thường gặp
sdiff có thể so sánh thư mục và toàn bộ cấu trúc file không?
sdiff chỉ hoạt động với hai file tại một thời điểm, không hỗ trợ trực tiếp so sánh toàn bộ thư mục hay cấu trúc nhiều file. Tuy nhiên, bạn có thể kết hợp với lệnh diff hoặc các script bash để liệt kê và so sánh các cặp file tương ứng trong hai thư mục, sau đó chạy sdiff trên từng cặp file cần thiết, giúp kiểm tra chi tiết sự khác biệt ở mức từng file.
Có thể tùy chỉnh phím tắt hoặc lệnh tương tác khi sử dụng chế độ merge của sdiff không?
Chế độ tương tác của sdiff sử dụng bộ lệnh cố định như l, r, el, er, q,… Tuy nhiên, nếu bạn muốn mở rộng khả năng hoặc thay đổi thao tác, bạn có thể viết wrapper/bash script bên ngoài để quản lý quá trình merge hoặc gọi editor khác phù hợp với workflow cá nhân, chẳng hạn như tích hợp với vimdiff hoặc các tiện ích quản lý phiên bản.
sdiff có thể so sánh hiệu quả khi file đầu vào có dung lượng lớn, chứa hàng nghìn dòng không?
sdiff hoàn toàn xử lý tốt các file lớn cho đến giới hạn tài nguyên hệ thống, nhưng quá trình hiển thị có thể bị chậm hoặc khó thao tác trên terminal tiêu chuẩn. Trong trường hợp này, bạn nên điều chỉnh độ rộng hiển thị (-w), đồng thời sử dụng các tùy chọn lọc như -B, -i, -W để bỏ qua phần không cần thiết, hoặc xuất kết quả ra file để phân tích chi tiết bằng ứng dụng hỗ trợ tốt hơn.
Lệnh sdiff là một tiện ích mạnh mẽ và tiện dụng trong bộ công cụ dòng lệnh của Linux, đặc biệt nổi bật với khả năng hiển thị sự khác biệt song song và chế độ hợp nhất tương tác. Nắm vững sdiff sẽ bổ sung thêm một công cụ giá trị vào kỹ năng quản trị và phát triển của bạn, giúp việc quản lý file và theo dõi thay đổi trở nên dễ dàng hơn.




