리눅스 cmp 명령어 완벽 정리: 파일 바이트 비교와 옵션별 실무 활용법

개요

두 파일의 바이트 단위 차이점을 신속하게 확인하는 리눅스 cmp 명령어의 기본 사용법과 핵심 옵션을 실습합니다. 텍스트 파일은 물론 바이너리 파일 비교와 셸 스크립트 조건문 활용 팁까지 한눈에 살펴봅니다.

기본 비교: 첫 번째 차이점 위치(바이트·라인) 확인

cmp 명령어 실습을 위한 전용 디렉터리를 생성하고 해당 위치로 이동하기 위해 mkdir -p ~/cmp_test && cd ~/cmp_test 명령어를 실행합니다.

mkdir -p ~/cmp_test && cd ~/cmp_test

파일 비교 실습에 사용할 동일한 내용의 file1.txt, file2.txt와 내용이 일부 다른 file3.txt를 생성하기 위해 echo 명령어를 실행합니다.

echo ‘Hello Linux World’ > file1.txt && echo ‘Hello Linux World’ > file2.txt && echo ‘Hello Linux Earth’ > file3.txt

cmp 명령어는 두 파일을 바이트 단위로 비교하며, 내용이 완전히 동일할 경우 화면에 아무것도 출력하지 않고 정상 종료합니다.
⚙️ [주요 옵션]

-b : 차이가 발생하는 바이트의 문자와 값을 함께 출력합니다.
-l : 파일에서 차이가 나는 모든 바이트의 위치와 값을 목록 형태로 출력합니다.
-n : 지정한 바이트 수까지만 두 파일을 비교합니다.
-i : 파일 시작 부분에서 지정한 바이트 수만큼 건너뛰고 비교를 시작합니다.
-s : 화면에 아무런 메시지도 출력하지 않고 종료 상태 코드(0 또는 1)만 반환합니다.

cmp file1.txt file2.txt

cmp file1.txt file3.txt 명령어를 실행하여 서로 다른 내용을 가진 두 파일을 비교합니다.
내용이 일치하지 않을 경우 처음으로 차이가 발생한 바이트 번호와 행(line) 번호가 출력됩니다.

cmp file1.txt file3.txt

상세 차이 확인: 모든 바이트 차이점과 문자 출력 (-l, -b)

바이트 단위 차이점을 세부적으로 확인하기 위해 서로 다른 알파벳이 포함된 f1.txt와 f2.txt 파일을 생성합니다.

echo ‘ABCDE’ > f1.txt && echo ‘ABXDE’ > f2.txt

cmp -l f1.txt f2.txt 명령어를 실행하여 두 파일에서 차이가 나는 모든 바이트의 위치와 각 파일의 8진수 바이트 값을 출력합니다.
3번째 바이트에서 첫 번째 파일은 8진수 103(C), 두 번째 파일은 8진수 130(X)으로 서로 다름을 보여줍니다.

cmp -l f1.txt f2.txt

cmp -b f1.txt f2.txt 명령어를 실행하면 처음으로 차이가 발생한 위치의 8진수 값과 함께 실제 바이트 문자를 출력합니다.
3번째 바이트에서 103(C)과 130(X)의 차이가 발생했음을 직관적으로 파악할 수 있습니다.

cmp -b f1.txt f2.txt

cmp -lb f1.txt f2.txt 명령어를 실행하여 차이가 발생하는 모든 바이트 목록과 해당 위치의 문자를 함께 출력합니다.
바이트 번호, 8진수 코드, 실제 ASCII 문자가 한 줄로 정리되어 파일 내용의 차이를 정확하게 식별할 수 있습니다.

cmp -lb f1.txt f2.txt

자동화 스크립트 연동: 무음 모드와 종료 코드 검사 (-s)

내용이 동일한 두 파일을 -s 옵션으로 비교하여 화면 출력을 숨기고 종료 상태 코드를 확인합니다.
두 파일의 내용이 완전히 일치하므로 정상 종료를 의미하는 코드인 0이 반환됩니다.

cmp -s file1.txt file2.txt; echo “종료 코드: $?”

서로 다른 내용을 가진 두 파일을 -s 옵션으로 비교하여 화면 출력을 억제하고 종료 코드를 확인합니다.
파일 간에 차이점이 존재하므로 불일치를 나타내는 종료 코드 1이 반환됩니다.

cmp -s file1.txt file3.txt; echo “종료 코드: $?”

셸 스크립트의 if 조건문에 cmp -s 명령어를 적용하여 두 파일의 일치 여부에 따라 분기 처리를 수행합니다.
두 파일의 내용이 완전히 같으므로 조건이 참(종료 코드 0)으로 판정되어 일치 메시지가 출력됩니다.

if cmp -s file1.txt file2.txt; then echo ‘두 파일이 일치합니다.’; else echo ‘두 파일이 다릅니다.’; fi

비교 범위 제어: 바이트 건너뛰기(-i) 및 최대 바이트 제한(-n)

비교 범위 제어 실습을 위해 접두사 부분은 다르고 뒷부분 내용은 동일한 data1.txt와 data2.txt 파일을 생성하기 위해 echo 명령어를 실행합니다.

echo ‘Prefix_Alpha_Data’ > data1.txt && echo ‘DiffId_Alpha_Data’ > data2.txt

cmp data1.txt data2.txt 명령어를 실행하여 두 파일을 기본 방식으로 비교합니다.
첫 번째 글자부터 서로 다르기 때문에 1번째 바이트, 1번째 행에서 차이가 발생했다는 메시지가 출력됩니다.

cmp data1.txt data2.txt

-i 7 옵션을 사용하여 두 파일의 앞쪽 7바이트를 건너뛰고 비교를 시작합니다.
건너뛴 이후의 내용(Alpha_Data)은 두 파일이 완전히 일치하므로 화면에 아무런 메시지도 출력하지 않고 정상 종료합니다.

cmp -i 7 data1.txt data2.txt

-n 6 옵션을 사용하여 파일의 시작 위치부터 최대 6바이트까지만 제한하여 비교를 진행합니다.
지정된 6바이트 구간 내에서 첫 글자부터 서로 다르므로 1번째 바이트에서 차이가 발생했다는 메시지가 출력됩니다.

cmp -n 6 data1.txt data2.txt

지금까지 리눅스 cmp 명령어를 활용한 파일 바이트 단위 비교 방법과 주요 옵션별 실무 활용 팁을 간단하게 정리해보았습니다.
대용량 파일이나 바이너리 파일의 일치 여부를 빠르게 검증해야 할 때 유용하게 활용해보세요.