Embedded : : Linux/: : Linux

Linux - diff 명령어 사용법 (파일비교)

Jay.P Morgan 2024. 4. 20. 00:03

 

  diff 명령어

 

: 리눅스에서 파일을 비교하는 명령어. file1과 file2를 비교하여 차이점을 찾아냄

$diff [옵션] file1 file2

 

  옵션

 

-b  : 연속된 공백 무시

-i   : 대소문자를 구분하지 않음

-t   : 출력 라인에 TAB 문자를 넣음

-w  : 두 행의 비교 시 공백을 무시

--brief : 파일 비교 후 결과 표시(같은지, 다른지)

-d  : 세세한 차이까지 검색

-H  : 큰 파일을 빠르게 처리할 때 사용

-q  : 두 파일의 차이점만 출력

-s   : 두 파일이 같은 지 확인

-r   : 두 디렉토리의 차이점 출력

-u  : undirectional new file 옵션으로 비교하는 파일/디렉토리가 빠져있을 경우 dummy로 처리해서 출력을 통일시킴

-r   : recursive 하위 디렉토리 모두 검색

-N  : 검색 중 new file도 적용 가능

 

 

  예시 1

 

a의 파일 내용 : aaaa

b의 파일 내용 : bbbb

c의 파일 내용 : aaaa

 

  5.5.1  OCRAM protection

 

파일 내용이 같기 떄문에 아무것도 출력되지 않음

 

 

  2. 내용이 다른 a와 b를 비교

 

< 는 file1에만 있는 내용, >는 file2에만 있는 내용을 나타냄

 

 

  3. 2번 명령에 -u 옵션을 추가하는 경우 

 

- 는 file1에만 있는 내용, +는 file2에만 있는 내용

 

a 파일이 b가 되기 위해서는 aaaa가 빠지고 bbbb가 추가되어야 한다는 내용

출처: https://eehoeskrap.tistory.com/248 [Enough is not enough:티스토리]

 

 

  예시 2


  예제를 통해 간단한 사용 방법을 살펴보자
  다음과 같은 4개의 파일들이 있다.

// a
aaaa
// b
aaaa
bbbb
// c
aaaa
bbbb
cccc
// cc
aaaa
bbbb
cccd

 

 

  a와 b가 다른지 확인

 

  다음과 같이 실행하면,

diff a b

 

  결과가 다음과 같다.

1a2
> bbbb

  결과를 읽어보면 다음과 같다.
  대략 a 파일의 1번째 line 위치에서 bbbb 를 추가해야 하고 추가하면 2 line 이 된다는 내용이다.

1a2

  • 1 : 원본 파일 (a 파일) 의 line 수 (~1번째 line)
  • a : added (추가)
  • 2 : 수정한 결과 line 수 (1 line 에서 한 줄 추가해서 2 line 이 됨)

> bbbb
b 파일에 bbbb 라는 내용이 있다는 내용이다.

 

 

 

  c와 b가 다른지 확인

 

  다음과 같이 실행하면,

diff c b

 

  결과가 다음과 같다.

3d2
< cccc

 

  결과를 읽어보면 다음과 같다.
  대략 c 파일의 3번째 line 에서 cccc 를 삭제해야하고 삭제하면 2 line 이 된다는 내용이다.

3d2

  • 3 : 원본 파일(c 파일) 의 line 수 (~3번째 line)
  • d : deleted (삭제)
  • 2 : 수정한 결과 line 수 (3 line 에서 한줄 삭제해서 2 line 이 됨)

< cccc
c 파일에 cccc 라는 내용이 있다는 내용이다.

 

  c와 cc가 다른지 확인

 

  다음과 같이 실행하면,

diff c cc

 

  결과가 다음과 같다.

3c3
< cccc
---
> cccd

 

  결과를 읽어보면 다음과 같다.
  대략 c 파일의 3번째 line 에서 cccc 를 삭제해야하고 삭제하면 2 line 이 된다는 내용이다.

  3c3

  • 3 : 원본 파일(c 파일) 의 line 수 (~3번째 line)
  • c : changed (변경)
  • 3 : 수정한 결과 line 수 (line 을 변경했기 때문에 그대로 3 line 이 됨)

  < cccc
    c 파일에 cccc 라는 내용이 있다는 내용이다.

  > cccd
    cc 파일에 cccd 라는 내용이 있다는 내용이다.

 

 

  -u 옵션을 사용해서 결과 보기

 

  -u 옵션을 사용해서 결과를 조회해보자.

diff -u a b

  결과가 다음과 같다.

--- a	2020-12-28 16:32:17.000000000 +0900
+++ b	2020-12-28 16:32:16.000000000 +0900
@@ -1 +1,2 @@
 aaaa
+bbbb

  두번째 line 까지는 파일 정보가 나오는데 a 파일은 - 로 표시하고 b 파일은 + 로 표시한다는 내용이다.

  @@ -1 +1,2 @@- (a파일)는 ~1 line 이고, + (b파일) 는 1~2 line 의 내용이라는 내용이다.

  그 다음 줄 부터는 결과를 보여줘서 전체적인 변화를 눈으로 볼 수 있다. aaaa 는 동일하고 2번째 line 에서 bbbb+ 파일에 있다는 내용이다.

 aaaa
+bbbb

 

patch 할 때, diff 로 비교하기

리눅스 patch 할 때는 -urN 옵션을 사용해서 버전을 변경하기 위해서 파일을 어떻게 수정해야 하는지 쉽게 알 수 있다.

명령 예시)

diff -urN kernel-1.0 kernel-1.1 > patch.patch

위는 kernel-1.0에서 kernel-1.1로 업데이트 하기 위해서 파일의 내용을 어떻게 수정해야 하는지 알 수 있다.

 

diff 옵션 설명

-b : 연속된 공백 무시
-i : 대소문자를 구분하지 않음
-t : 출력 라인에 TAB 문자를 넣음
-w : 두 행의 비교 시 공백을 무시
--brief : 파일 비교 후 결과 표시(같은지, 다른지)
-d : 세세한 차이까지 검색
-H : 큰 파일을 빠르게 처리할 때 사용
-q : 두 파일의 차이점만 출력
-s : 두 파일이 같은 지 확인
-r : 두 디렉토리의 차이점 출력
-u : undirectional new file 옵션으로 비교하는 파일/디렉토리가 빠져있을 경우 dummy로 처리해서 출력을 통일시킴
-r : recursive 하위 디렉토리 모두 검색
-N : 검색 중 new file도 적용 가능

 

ref

출처: https://muyu.tistory.com/entry/diff-사용법 [날마다 새롭게 또 날마다 새롭게:티스토리]