본문으로 바로가기

리눅스 cmp, diff, diff3, comm - 파일 비교

category 리눅스/Linux 일반 2013. 6. 15. 01:31

파일을 비교하는 가장 간단한 방법은 cmp, 그리고 보다 자세한 파일비교를 할 때에는 diff, 세개의 파일을 비교하려면 diff3을 이용합니다. 두파일에 대하여 각 행단위 비교를 할 때에는 comm을 이용합니다.

cmp

cmp는 compare 의 약어로서 두개의 파일이 어떤 부분이 다른가를 비교할 때에 사용하는 명령어이다. 두개의 파일을 단순히 같은가 다른가를 확인할 수 있으며 또한 몇행의 몇번째 문자가 다른가를 확인할 수도 있다. 두 파일이 동일한가를 확인하고자 할 때에 주로 사용한다.

사용법 : cmp 파일명 비교할파일명

file1 과 file2를 예를 들어 설명한다.

cat file1

  girls generation
cat file2

  girls Generation

두 파일을 비교해본다.

cmp file1 file2

   file1 file2 differ: byte 7, line 1

첫번째행에 7바이트째부터 다름이 발생하였다는 것을 의미한다(빈칸도 1바이트).

두개의 파일을 비교하여 틀린 문자의 개수와 틀린문자들에 대한 8진수 값을 출력(ASCII코드값)

cmp -l file1 file2

  7 147 107

7번째 바이트, 147은 file1의 g, 107은 file2의 G

처음부터 지정된 위치까지는 무시하고 비교

cmp -i 7 file1 file2 

7번째 바이트에 틀림이 있는데 7번째까지 무시하니 틀림이 없는 것으로 출력됨.

diff

diff는 differences 의 약어로서 두 파일 사이의 내용을 비교하는 명령어이다. cmp 보다 diff 가 보다 직관적이고 명확하게 찾아준다. 실행결과 차이점이 없다면 0, 차이점이 있다면 1, 실행시 에러가 발생하면 2 이상의 종료코드 값을 얻는다.

사용법 : diff 파일명 비교할파일명

diff file1 file2

  1c1

  < girls generation

  ---

  > girls Generation

두 파일이 단순히 같은가 다른가를 확인

diff --brief file1 file2

  Files file1 and file2 differ

diff 에 지정된 포맷으로 두파일의 차이점을 출력

diff -c file1 file2

  *** file1       2013-06-15 00:34:30.920849214 +0900
  --- file2       2013-06-15 00:34:49.511852997 +0900
  ***************
  *** 1 ****
  ! girls generation
  --- 1 ----
  ! girls Generation

다른 부분의 라인앞에 ! 를 출력한다.

자세한 비교

diff -d file1 file2

  1c1
  < girls generation
  ---
  > girls Generation

각각의 파일을 세밀하게 분석하여 두 파일을 비교하는 옵션이다. 즉, 가장 작은 변화된 부분까지도 찾기 위하여 알고리즘을 변경하기도 한다. 따라서 diff 수행시에 수행속도가 느려질 수도 있다.

두개의 디렉토리 차이점 비교

diff -r example example2

  Only in example: test

  Only in example2: test2

각각의 디렉토리에만 존재하는 파일등의 정보를 보다 정확하게 확인할 수 있다. 즉, 비교대상 디렉토리의 하위디렉토리들까지 모두 비교가 되었음을 알 수 있다.

큰 파일용량의 파일 비교시 속도 증가

diff -H bigfile largefile

diff3

diff3 는 3개의 파일차이점을 비교하여 출력하는 명령어이다. 

사용법 : diff3 파일명 비교할파일명 비교할파일명

 diff3 file1 file2 file3

  ====

  1:1c

    girls generation

  2:1c

    girls Generation

  3:1c

    girls geNeration

비교할 파일이 바이너리파일일 경우 비교(가능한 텍스트포맷을 찾아서 비교작업을 수행

diff3 --text file1 file2 file3

comm

comm은 지정한 두파일의 행과 행을 비교할 때에 사용하는 명령어이다.

사용법 : comm [옵션] 파일명 비교할파일명

우선 비교할 파일들 내용을 살펴보자.

cat file1

  girls generation
  uzuro.com
  uzzuzuu
cat file2

  girls Generation
  uzuro.com
comm file1 file2

        girls Generation
  girls generation
                uzuro.com
  uzzuzuu

첫번째 필드(단락)의 girls generation, uzzuzuu 는 file1 에만 존재하는 행의 내용을 의미하고 두번째 필드의 girls Generation 은 file2 에만 존재하는 행의 내용, 세번째 필드인 uzuro.com은 두파일 모두 공통되는 행의 내용을 의미한다.

[옵션]

  • -1 : 두파일을 비교하여 첫번째 파일과 다른 두번째 파일의 내용과 공통내용만을 출력
  • -2 : 두번째 파일과 다른 부분의 첫번째 파일내용과 공통내용을 출력
  • -3 : 두파일의 공통된 파일은 출력하지 않음