리눅스 명령어 cmp는 주로 두 개의 파일을 비교하여 차이점을 확인하는 데 사용됩니다. 파일이 텍스트 파일이든, 바이너리 파일이든 상관없이 사용할 수 있으며, 특히 큰 파일을 비교할 때 성능적으로 우수한 결과를 보여줍니다. 이번 포스팅에서는 cmp
명령어의 기본 사용법과 주요 옵션들을 설명하고, 몇 가지 유용한 활용 방법도 함께 알아보겠습니다.
목차
리눅스 명령어 cmp
란?
cmp
명령어는 리눅스에서 두 파일을 바이트 단위로 비교하여, 첫 번째로 차이가 발생하는 위치를 알려주는 도구입니다. 기본적으로 cmp
는 차이점이 발견될 때까지 두 파일을 비교하고, 차이점이 있는 경우 그 위치와 차이점을 출력합니다. 만약 두 파일이 동일하다면, 아무런 출력 없이 종료되며, 종료 코드로 0을 반환합니다.
리눅스 명령어 cmp
기본 사용법
cmp
명령어를 사용하는 가장 간단한 방법은 다음과 같습니다:
cmp 파일1 파일2
ShellScript예를 들어, 두 개의 텍스트 파일 file1.txt
와 file2.txt
를 비교하려면 다음과 같이 입력합니다.
cmp file1.txt file2.txt
ShellScript이 경우, 만약 두 파일이 동일하다면 아래 그림과 같이 아무런 메시지도 출력되지 않습니다.
이제 b.txt 파일을 수정하여, 대문자 C와 E를 소문자 c와 e로 변경했습니다.
이제 b.txt 파일이 달라졌으므로 아래 그림과 같이 첫 번째 차이점에 대한 정보가 출력됩니다.
cmp
명령어 옵션
cmp
명령어에는 여러 가지 유용한 옵션들이 있습니다. 이러한 옵션들을 활용하면 파일 비교 작업을 더욱 효과적으로 수행할 수 있습니다.
-l
옵션: 각 바이트의 차이점 출력
-l
옵션을 사용하면 두 파일의 차이점을 바이트 단위로 출력할 수 있습니다. 이 옵션은 두 파일이 여러 부분에서 다를 때 유용하게 사용할 수 있습니다.
cmp -l file1.txt file2.txt
ShellScript이 명령어를 실행하면 두 파일의 바이트 차이를 위치와 함께 8진수로 보여줍니다. 5바이트째의 8진수 103(C)과 143(c)이 다른 것을 알 수 있으며, 9바이트째의 105(E)와 145(e)가 다른 것을 알 수 있습니다.
하지만 위와 같이 보면 보통 사람들은 쉽게 알아보기 어렵습니다. 다음 옵션을 함께 사용하면 보다 쉽게 파악할 수 있습니다.
-b
옵션: 다른 문자 보여주기
-b 옵션을 이용하면, 몇 바이트에 있는, 몇 째 줄에 있는 문자인지 알려줄 뿐만 아니라, 다른 문자의 8진수와 문자가 무엇인지도 보여줍니다.
cmp -b file1.txt file2.txt
ShellScript하지만 아래 그림과 같이 처음 나타나는 다른 부분만 알려줍니다.
따라서 앞서 사용한 -l 옵션과 -b 옵션을 함께 사용하면, 어느 위치의 어느 문자가 다른 것인지 명확하게 확인할 수 있습니다.
-s
옵션: 차이점이 있는지 여부만 확인
-s
옵션을 사용하면 cmp
는 두 파일이 동일한지 여부만 확인하고, 결과를 출력하지 않습니다. 이 옵션은 단순히 파일의 동일성만을 확인하고자 할 때 유용합니다.
cmp -s file1.txt file2.txt
ShellScript이 명령어를 실행한 후, 종료 코드를 통해 파일이 동일한지 아닌지를 알 수 있습니다. 아래 그림과 같이 종료 코드가 0이면 파일이 동일한 것을 알 수 있습니다.
종료 코드가 1이 나오면 파일이 다르다는 것을 확인할 수 있습니다.
-n
옵션: 비교할 바이트 수 제한
-n
옵션을 사용하면 지정한 바이트 수만큼만 파일을 비교할 수 있습니다. 예를 들어, 첫 100바이트만 비교하고 싶다면 다음과 같이 입력할 수 있습니다.
cmp -n 100 file1.txt file2.txt
ShellScript이 명령어는 두 파일의 처음 100바이트만 비교하고, 그 결과를 출력합니다. 아래 그림을 보면 3바이트째 문자까지는 동일하며, 5바이트째 문자가 다르다는 것을 알 수 있습니다.
-i
옵션: 비교 시작 위치 지정
-i
옵션을 사용하면 파일을 비교할 때, 지정된 바이트 위치부터 비교를 시작할 수 있습니다. 이 옵션은 특정 위치 이후부터만 비교를 원하는 경우에 유용합니다.
cmp -i 100 file1.txt file2.txt
ShellScript이 명령어는 두 파일의 100번째 바이트부터 비교를 시작합니다. 특이한 점은 지정한 바이트로 기준점이 달라진다는 점입니다. 아래 그림에서는 8바이트부터 비교를 하게 했을 때에는 위치가 byte 1로 나오지만, 7바이트부터 비교하게 했을 때에는 위치가 byte 2로 나오는 것을 볼 수 있습니다. -i 값에 들어가는 최솟값은 0부터 시작되니, -i 8 이라고 옵션을 사용하면 실제적으로 9바이트째 문자부터 비교하게 되는 것입니다. 이 부분은 직접 값을 입력하면서 확인해 보시기 바랍니다.
cmp
명령어 활용 방법
큰 파일 비교
cmp
명령어는 큰 파일을 비교할 때 특히 유용합니다. 파일의 내용이 동일한지 빠르게 확인할 수 있으며, 차이점이 있을 경우 그 위치를 바로 알 수 있습니다. 큰 바이너리 파일이나 로그 파일을 비교할 때 성능적으로 우수합니다.
스크립트에서 활용
cmp
명령어는 종료 코드를 반환하므로, 스크립트 내에서 두 파일의 동일성 검사를 자동화하는 데 사용할 수 있습니다. 예를 들어, 파일이 동일하지 않을 경우에만 특정 작업을 수행하도록 스크립트를 작성할 수 있습니다.
#!/bin/bash
if cmp -s a.txt b.txt; then
echo "파일이 동일합니다."
else
echo "파일이 다릅니다."
cat b.txt
fi
ShellScript두 개의 파일이 다른 경우 아래와 같이 “파일이 다릅니다.”가 출력되고 cat 명령어의 실행 결과가 나오는 것을 확인할 수 있습니다.
바이너리 파일 비교
cmp
명령어는 텍스트 파일뿐만 아니라 바이너리 파일을 비교할 때도 사용됩니다. 바이너리 파일 비교 시에는 -l
옵션을 사용하여 차이점을 바이트 단위로 상세히 분석할 수 있습니다.
주의사항
cmp
명령어를 사용할 때 주의해야 할 점은, 파일의 크기가 매우 클 경우 비교 작업이 오래 걸릴 수 있다는 것입니다. 또한, cmp
는 기본적으로 두 파일의 전체를 비교하기 때문에, 만약 파일의 특정 부분만 비교하고 싶다면 -n
이나 -i
옵션을 적절히 활용하는 것이 좋습니다.
또한, cmp
명령어는 주로 파일의 바이트 수준에서 비교를 수행하므로, 텍스트 파일의 줄바꿈 차이(예: Windows와 Unix 간의 차이)도 차이점으로 인식될 수 있습니다. 이런 경우에는 diff
명령어와 같이 줄 단위 비교를 수행하는 명령어를 사용하는 것이 더 적합할 수 있습니다.
정리
리눅스 명령어 cmp
는 리눅스에서 파일 비교 작업을 수행할 때 매우 유용한 도구입니다. 파일의 바이트 단위 비교를 통해 빠르고 정확하게 차이점을 찾아낼 수 있으며, 다양한 옵션을 통해 비교 범위와 결과 출력을 조절할 수 있습니다. 특히 큰 파일이나 바이너리 파일을 비교할 때 강력한 성능을 발휘하며, 스크립트와 결합하여 자동화 작업에도 활용할 수 있습니다. 파일 비교 작업이 필요할 때 리눅스 명령어 cmp
를 적절히 활용해 보세요.