리눅스 diff 출력 결과 해석 2가지 방법

이번 포스팅에서는 리눅스 명령어 diff 출력 결과를 해석하는 방법에 대해 자세히 알아보겠습니다. 리눅스의 diff 명령어는 두 파일이나 디렉터리의 차이점을 비교하여 그 결과를 출력해주는 유용한 도구입니다. 그러나 diff 명령어의 기본 출력 형식은 처음 접하는 사람들에게 다소 복잡하게 보일 수 있습니다.

기본 출력 형식

diff 명령어의 기본 출력은 두 파일 간의 차이점을 나타내는 매우 간결한 형식입니다. 출력은 다음과 같은 형식으로 표시됩니다:

<행번호><작업 유형><행번호>
< 이전 줄
---
> 이후 줄
Plaintext

이제 각 부분을 자세히 살펴보겠습니다.

<행번호><작업 유형><행번호>: 변경 위치와 작업 유형

diff 명령어는 비교 결과에서 변경된 줄의 위치와 작업 유형을 먼저 표시합니다. 다음 세 가지 작업 유형이 있습니다:

  • a: 추가 (add)
  • d: 삭제 (delete)
  • c: 변경 (change)

각 작업 유형은 특정한 형식으로 표시됩니다:

  • <n1>a<n2>: 파일1의 n1번 줄 다음에 파일2의 n2번 줄이 추가되었음을 의미합니다. 2a3이라면 파일1의 2번째 줄 다음에 파일2의 3번째 줄이 추가되었다는 의미입니다.
  • <n1>d<n2>: 파일1의 n1번 줄이 파일2의 n2번 다음 줄에서 삭제되었음을 의미합니다. 3d2라면 파일1의 3째 줄이 파일2의 2번 다음 줄에서 삭제되었다는 의미입니다.
  • <n1>c<n2>: 파일1의 n1번 줄이 파일2의 n2번 줄로 변경되었음을 의미합니다. 3c3이라면 파일1의 3째 줄이 파일2의 3째줄로 변경되었다는 의미입니다.

<>: 줄의 비교 결과

diff의 출력에서 <> 기호는 각각 파일1과 파일2의 내용을 나타냅니다.

  • <: 파일1에만 있는 줄을 표시합니다.
  • >: 파일2에만 있는 줄을 표시합니다.

예시로 보는 diff 출력 해석

다음은 두 파일을 비교한 diff 명령어 출력 결과를 해석하는 예시입니다.

예시 파일

file1.txt:

Hello World
This is a file.
Let's compare.
Plaintext

file2.txt:

Hello World
This is another file.
Let's compare this.
Plaintext

기본 diff 명령어 출력

diff file1.txt file2.txt
ShellScript

출력:

그림 1. diff 출력 결과

출력 해석

첫 줄에 나타나는 2,3c2,3 그리고 그 이후의 출력 결과들은 다음과 같습니다.

  • 2,3c2,3는 파일1의 2번, 3번 줄이 파일2의 2번, 3번 줄로 변경되었음을 의미합니다.
  • < This is a file.은 파일1의 2번 줄입니다.
  • < Let's compare.은 파일1의 3번 줄입니다.
  • > This is another file.은 파일2의 2번 줄이 변경된 내용입니다.
  • > Let's compare this.은 파일2의 3번 줄이 변경된 내용입니다.

이 예시를 통해서 diff는 파일1과 파일2의 각 줄이 어떻게 다른지를 명확하게 보여줍니다.

확장된 출력 형식

diff 명령어는 다양한 옵션을 통해 출력 형식을 확장할 수 있습니다. -c(context)와 -u(unified) 옵션을 사용하면 더 많은 정보를 포함하는 비교 결과를 얻을 수 있습니다.

-c 옵션: Context 출력

-c 옵션을 이용하면 전후 맥락을 알 수 있습니다. 정확하게 파일의 어느 위치에 변화가 생긴건인지 쉽게 확인할 수 있습니다.

diff -c file1.txt file2.txt
ShellScript

아래 그림을 보면 1,3으로 나오는 부분은 1~3 라인이라는 의미입니다.

그림 2. diff 출력 결과: 전후 맥락과 함께 출력

-u 옵션: Unified 출력

-u 옵션을 사용하면 전체적으로 변화가 생긴 것에 대해서 한 눈에 파악할 수 있도록 해 줍니다.

diff -u file1.txt file2.txt
ShellScript

아래 그림을 보면 1~3라인에서 -로 표시된 file1.txt의 내용과 +로 표신된 file2.txt의 내용을 통해서 다른 부분을 한 눈에 확인할 수 있습니다. 버전 관리 도구에서 사용하는 스타일로 확인 가능합니다.

그림 3. diff 출력 결과: 통합하여 비교 출력

Unified 출력 해석

  • --- file1.txt+++ file2.txt는 각 파일의 이름과 비교 시점의 타임스탬프를 표시합니다.
  • @@ -1,3 +1,3 @@는 비교할 블록의 위치를 나타냅니다.
    • -1,3은 파일1에서 1번 줄부터 3줄을 비교했음을 의미합니다.
    • +1,3은 파일2에서 1번 줄부터 3줄을 비교했음을 의미합니다.
  • -로 시작하는 줄은 파일1에 존재하지만 파일2에서는 제거된 줄을 나타냅니다.
  • +로 시작하는 줄은 파일2에 새롭게 추가된 줄을 나타냅니다.

추가적인 예시: 삭제와 추가

다음은 추가와 삭제의 예시로 file3.txt와 file4.txt의 내용은 아래와 같습니다.

file3.txt:

Line 1
Line 2
Line 4
Plaintext

file4.txt:

Line 1
Line 3
Line 4
Line 5
Plaintext

다음과 같이 diff 명령어로 비교합니다.

diff file3.txt file4.txt
ShellScript

출력:

그림 4. diff 출력 결과: 삭제와 추가 비교

기본 비교 출력 해석

  • 2c2은 파일3의 2번 줄 “Line 2″이 파일4의 2번 줄 “Line 3″로 변경되었음을 의미합니다.
  • 3a4는 파일3의 3번 줄 이후에 파일4의 4째 줄 “Line 5″가 추가되었음을 의믜합니다.

-u 옵션을 이용한 출력 해석

-u 옵션을 사용하면 간결하게 상황을 파악할 수 있습니다.

diff -u file3.txt file4.txt
ShellScript

아래 그림과 같이 file3.txt의 “Line 2″가 삭제되고, file4.txt의 “Line 3″이 추가된 것을 알 수 있습니다. 그리고 마지막에 file4.txt의 “Line 5″가 추가된 것을 확인할 수 있습니다.

그림 5. diff 출력 결과: -u 옵션을 사용해서 삭제와 추가 확인

정리

diff 명령어는 리눅스에서 파일과 디렉터리의 차이점을 비교할 때 매우 유용한 도구입니다. 기본적인 diff 출력 형식을 이해하는 것은 중요한데, 이를 통해 두 파일 간의 변경 사항을 명확히 파악할 수 있습니다. 추가로, -c, -u 옵션을 사용하면 더욱 직관적이고 읽기 쉬운 출력을 얻을 수 있습니다.

파일 간의 변경 사항을 추적하고 관리하는 것은 코드 리뷰, 설정 파일 관리, 문서 변경 관리 등 다양한 상황에서 중요합니다. diff 출력 형식을 잘 이해하고 활용하면, 이러한 작업을 더 효율적이고 체계적으로 수행할 수 있을 것입니다.

참고자료

관련 포스트

Leave a Comment