Linux의 Diff 명령

Linux의 Diff 명령

2022-05-17 last update

8 minutes reading terminal diff
diff은 두 파일을 한 줄씩 비교할 수 있는 명령행 유틸리티입니다.디렉터리의 내용도 비교할 수 있다.diff 명령은 하나 이상의 파일 간의 차이를 포함하는 패치를 만드는 데 가장 많이 사용되며 patch 명령을 사용하여 이러한 차이를 적용할 수 있습니다.

diff 명령 사용 방법

diff 명령의 문법은 다음과 같다.
diff [OPTION]... FILES
diff 명령은 몇 가지 형식으로 출력을 나타낼 수 있는데 가장 흔히 볼 수 있는 형식은 일반 형식, 상하문 형식과 통일 형식이다.출력에는 파일의 행을 완전히 동일하게 변경하기 위해 변경해야 하는 내용이 포함됩니다.파일이 일치하면 출력이 생성되지 않습니다.명령 출력을 파일에 저장하려면 리디렉션 조작부호를 사용하십시오:
diff file1 file2 > patch
본문에서 우리는 diff 명령의 작업 원리를 다음과 같은 두 가지 파일로 설명할 것입니다: file 1
Ubuntu
Arch Linux
Debian
CentOS
Fedora
file 2
Kubuntu
Ubuntu
Debian
Arch Linux
Centos
Fedora

일반 형식

두 텍스트 파일에서 diff 명령을 실행할 때 어떠한 옵션도 없습니다.이것은 정상 형식으로 출력을 생성합니다:
diff file1 file2
출력은 다음과 같습니다:
0a1
> Kubuntu
2d2
< Arch Linux
4c4,5
< CentOS
---
> Arch Linux
> Centos
정상 출력 형식은 한 개 이상의 설명 차이의 부분으로 구성됩니다.각 섹션은 다음과 같습니다.
change-command
< from-file-line...
---
> to-file-line...
0a1, 2d24c4,5은 변경 명령입니다.각 변경 명령은 왼쪽에서 오른쪽으로
  • 첫 번째 파일의 행 번호 또는 행 범위입니다.
  • 특수 변경 문자
  • 두 번째 파일의 줄 번호나 줄 범위.
  • 변경 문자는 다음 문자 중 하나일 수 있습니다.
  • a - 행 추가.
  • c - 행 변경
  • d - 행 삭제.
  • change 명령 뒤에는 삭제(<)하고 파일(>)에 추가된 전체 줄이 있습니다.출력:
  • 0a1 - 두 번째 파일의 1 줄을 파일 1의 시작(0 줄 다음)에 추가합니다.
  • > Kubuntu - 위에서 설명한 대로 첫 번째 파일의 두 번째 행에 추가된 행입니다.
  • 2d2 - 첫 번째 파일의 2 행을 삭제합니다.2 기호 뒤의 d은 이 줄을 삭제하지 않으면 두 번째 파일의 2 줄에 나타난다고 밝혔다.
  • < Arch Linux - 삭제된 행입니다.
  • 4c4,5 - 첫 번째 파일의 5 줄을 두 번째 파일의 4-5 줄로 바꿉니다.
  • < CentOS - 바꿀 첫 번째 파일의 행입니다.1411041710-104790 분리기.
  • ---> Arch Linux - 첫 번째 파일의 행을 두 번째 파일의 행으로 바꿉니다.
  • 컨텍스트 형식

    상하문 출력 형식을 사용할 때 > Centos 명령은 파일 사이의 서로 다른 줄 주위에 여러 줄의 상하문을 표시합니다.diff 옵션은 -c 이상의 다음 형식으로 출력을 생성합니다.
    diff -c file1 file2
    
    *** file1	2019-11-25 21:00:26.422426523 +0100
    --- file2	2019-11-25 21:00:36.342231668 +0100
    ***************
    *** 1,6 ****
      Ubuntu
    - Arch Linux
      Debian
    ! CentOS
      Fedora
      
    --- 1,7 ----
    + Kubuntu
      Ubuntu
      Debian
    ! Arch Linux
    ! Centos
      Fedora
    
    파일을 비교하려면 출력은 이름과 시간 스탬프로 시작하고 차이의 한 부분 또는 여러 부분을 설명합니다.각 섹션은 다음과 같습니다.
    ***************
    *** from-file-line-numbers ****
      from-file-line...
    --- to-file-line-numbers ----
      to-file-line...
    
  • difffrom-file-line-numbers 은 각각 첫 번째 파일과 두 번째 파일의 행 번호 또는 쉼표로 구분된 행 범위입니다.
  • to-file-line-numbersfrom-file-line - 서로 다른 줄과 상하문 줄:
  • 두 개의 빈칸으로 시작하는 줄은 상하문 줄로 두 파일의 줄은 같다.
  • 마이너스(to-file-line)로 시작하는 줄은 두 번째 파일에서 어떤 내용에도 대응하지 않는 줄이다.두 번째 파일에 줄이 없습니다.
  • 플러스(-)로 시작하는 줄은 첫 번째 파일에서 어떤 내용도 대응하지 않는 줄이다.첫 번째 파일에 줄이 없습니다.
  • 느낌표(+)로 시작하는 줄은 두 파일 사이에서 변경된 줄입니다.첫 번째 파일에서 !으로 시작하는 각 그룹의 줄은 두 번째 파일에서 상응하는 일치 항목을 가지고 있다.
  • 은 출력에서 가장 중요한 부분을 설명합니다.
  • 은 이 예에서 우리는 단지 한 절만 이러한 차이를 묘사했습니다.
  • !*** 1,6 ****은 이 섹션에 포함된 첫 번째 및 두 번째 파일의 행 범위를 알려줍니다.
  • --- 1,7 ----, Ubuntu, Debian과 마지막 빈 줄은 두 문서에서 같다.이러한 선은 이중 공백으로 시작합니다.141561040은 두 번째 줄 17790의 141561040과 대응하지 않습니다.이 줄도 두 번째 파일에 존재하지만 위치가 다르다.두 번째 파일의
  • Fedora은 첫 번째 파일의 어떤 내용과도 대응하지 않습니다.첫 번째 파일의
  • - Arch Linux과 두 번째 파일의 + Kubuntu! CentOS 행이 두 파일 사이에 변경되었습니다.
  • 기본적으로 상하문 줄의 수량은 세 줄입니다.다른 숫자를 지정하려면 ! Arch Linux(! CentOS) 옵션을 사용하십시오.
    diff -C 1 file1 file2
    
    *** file1	2019-11-25 21:00:26.422426523 +0100
    --- file2	2019-11-25 21:00:36.342231668 +0100
    ***************
    *** 1,5 ****
      Ubuntu
    - Arch Linux
      Debian
    ! CentOS
      Fedora
    --- 1,6 ----
    + Kubuntu
      Ubuntu
      Debian
    ! Arch Linux
    ! Centos
      Fedora
    

    격식을 통일하다

    통합 출력 형식은 컨텍스트 형식의 개선 버전으로 출력이 더 작습니다.(adsbygoogle=window.adsbygoogle | |[]).추진({});-C 옵션을 사용하여 --contexts에 출력을 통일된 형식으로 출력:
    diff -u file1 file2
    
    --- file1	2019-11-25 21:00:26.422426523 +0100
    +++ file2	2019-11-25 21:00:36.342231668 +0100
    @@ -1,6 +1,7 @@
    +Kubuntu
     Ubuntu
    -Arch Linux
     Debian
    -CentOS
    +Arch Linux
    +Centos
     Fedora
    
    출력은 파일의 이름과 시간 스탬프, 그리고 차이점을 설명하는 한 부분 또는 여러 부분으로 시작합니다.각 섹션은
    ***************
    @@ from-file-line-numbers to-file-line-numbers @@
     line-from-files...
    
  • -u - 이 섹션에 포함된 첫 번째 및 두 번째 파일의 행 번호 또는 행 간격입니다.
  • diff - 서로 다른 줄과 상하문 줄:
  • 두 개의 빈칸으로 시작하는 줄은 상하문 줄로 두 파일의 줄이 같다.
  • 마이너스(@@ from-file-line-numbers to-file-line-numbers @@)로 시작하는 줄은 첫 번째 파일에서 삭제된 줄입니다.
  • 플러스(line-from-files)로 시작하는 줄은 첫 번째 파일에서 추가된 줄입니다.
  • 케이스 무시

    위 예에서 알 수 있듯이 - 명령은 기본적으로 대소문자를 구분합니다.+ 옵션을 사용하여 diff에 대소문자 무시:
    diff -ui file1 file2
    
    --- file1	2019-11-25 21:00:26.422426523 +0100
    +++ file2	2019-11-25 21:00:36.342231668 +0100
    @@ -1,6 +1,7 @@
    +Kubuntu
     Ubuntu
    -Arch Linux
     Debian
    +Arch Linux
     CentOS
     Fedora
    

    결론

    텍스트 파일의 차이를 비교하는 것은 Linux 시스템 관리자에게 가장 흔히 볼 수 있는 작업 중 하나이다.-i 명령은 한 줄씩 파일을 비교합니다.자세한 내용은 터미널에서 diff을 입력합니다.만약 무슨 문제가 있으면 아래에 메시지를 남겨 주십시오.