Linux / 명령어 / cmp - 두 파일을 바이트 단위로 비교
cmp는 두 파일을 바이트 단위로 비교합니다. 기본적으로 첫 번째 차이를 발견하면 바이트 위치와 줄 번호를 알리고 종료하므로 파일이 완전히 같은지 빠르게 검사하거나 최초 불일치 지점을 찾는 데 적합합니다.
이 글에서는 cmp의 기본 문법과 주요 옵션, 실제 사용 예제, 관련 명령과의 차이, 사용할 때 주의할 점을 설명합니다.
cmp 명령어란?
두 입력을 앞에서부터 비교하며 같으면 출력 없이 종료 상태 0을 반환합니다. 다르면 보통 첫 차이를 보고하고 상태 1, 읽기 오류나 잘못된 인수 등 문제에는 2 이상을 반환합니다. 텍스트의 의미 있는 줄 차이는 diff가 더 읽기 쉽습니다.
기본 문법
cmp [옵션] 파일1 [파일2 [SKIP1 [SKIP2]]]
옵션과 세부 동작은 구현과 버전에 따라 달라질 수 있습니다. 현재 시스템에서는 cmp --help와 man cmp으로 설치된 명령의 설명을 확인하세요.
cmp 기본 사용법
두 파일 비교하기
같으면 아무것도 출력하지 않고, 다르면 첫 차이 위치를 표시합니다.
cmp image-a.bin image-b.bin
출력 없이 동일 여부 검사하기
-s는 메시지를 숨기고 종료 상태만 사용합니다.
cmp -s copy.iso original.iso
처음 몇 바이트만 비교하기
GNU cmp의 -n으로 비교할 최대 바이트 수를 제한합니다.
cmp -n 4096 file-a file-b
처음 다른 바이트 위치 읽기
cmp는 두 파일을 바이트 단위로 비교하고 처음 다른 위치를 알려줍니다. 동일한 파일이면 기본적으로 아무것도 출력하지 않습니다.
printf 'A' > first.bin printf 'B' > second.bin cmp first.bin second.bin
예시 출력(문구는 구현에 따라 달라질 수 있음):
first.bin second.bin differ: byte 1, line 1
종료 상태 1은 차이가 있음, 2는 읽기 오류 같은 문제를 뜻합니다. 스크립트에서 화면 출력을 원하지 않으면 cmp -s를 사용하고 종료 상태를 확인하세요.
주요 옵션
| 옵션 | 설명 |
|---|---|
-s, --silent |
일반 출력을 생략하고 종료 상태만 반환합니다. |
-l, --verbose |
서로 다른 모든 바이트의 위치와 값을 출력합니다. |
-b, --print-bytes |
서로 다른 바이트를 표시 가능한 형태로 함께 보여 줍니다. |
-i SKIP |
두 입력의 앞부분을 지정한 만큼 건너뜁니다. |
-i SKIP1:SKIP2 |
GNU 구현에서 각 입력의 건너뛸 양을 다르게 지정합니다. |
-n LIMIT |
최대 LIMIT바이트까지만 비교합니다. |
실전 활용 예제
스크립트에서 변경 여부 확인하기
메시지 대신 종료 상태로 분기합니다.
if cmp -s generated.conf current.conf; then printf '%s\n' '변경 없음' else printf '%s\n' '파일이 다름' fi
헤더 영역만 비교하기
파일 형식의 고정 헤더 크기를 알고 있을 때 비교 범위를 제한합니다.
cmp -n 512 disk-a.img disk-b.img
오프셋을 건너뛰고 비교하기
컨테이너 헤더처럼 비교에서 제외할 영역이 있다면 지원되는 skip 구문을 사용합니다.
cmp -i 4096 payload-a.bin payload-b.bin
cmp와 관련 명령 비교
| 명령 | 주요 역할 | 적합한 상황 |
|---|---|---|
cmp |
바이트 단위 첫 차이 | 동일 여부와 최초 오프셋 |
diff |
줄 단위 텍스트 차이 | 사람이 읽는 변경 내용 |
sha256sum |
각 파일의 해시 계산 | 원격·여러 파일 무결성 비교 |
comm |
정렬된 줄 집합 비교 | 공통·고유 항목 분리 |
사용할 때 주의할 점
-l 출력은 매우 커질 수 있습니다
큰 파일에서 차이가 많으면 모든 바이트 차이를 출력하므로 먼저 기본 모드나 -s로 확인합니다.
종료 상태를 구분합니다
1은 파일이 다름, 2 이상은 비교 자체의 오류일 수 있으므로 스크립트에서 따로 처리합니다.
바이트가 같아도 파일 의미까지 검증되는 것은 아닙니다
동일 바이트 여부는 확인하지만 서명, 출처, 파일 형식의 유효성을 검증하지는 않습니다.
FAQ
cmp 출력이 없으면 같은 파일인가요?
명령이 정상 종료했고 상태가 0이라면 비교한 범위의 바이트가 같습니다.
첫 차이 이후도 모두 보려면요?
cmp -l 파일1 파일2를 사용하지만 차이가 많으면 출력이 매우 커질 수 있습니다.
텍스트 파일도 cmp로 비교할 수 있나요?
가능하지만 변경된 줄을 읽기 쉽게 보려면 diff가 더 적합합니다.
체크섬 비교와 무엇이 다른가요?
cmp는 두 파일을 직접 동시에 읽어 비교하고, 체크섬은 각 파일의 요약값을 계산해 서로 다른 위치에서도 비교하기 쉽습니다.









