SW/리눅스

Linux : Diff 명령어, 사용 방법, 예제

얇은생각 2022. 5. 1. 07:30
반응형

diff는 두 파일을 한 줄씩 비교할 수 있는 명령줄 유틸리티입니다. 또한 디렉토리의 내용을 비교할 수도 있습니다.

diff 명령은 패치 명령을 사용하여 적용할 수 있는 하나 이상의 파일 간의 차이를 포함하는 패치를 만드는 데 가장 일반적으로 사용됩니다.

 

 

Linux : Diff 명령어, 사용 방법, 예제

 

 

diff 명령을 사용하는 방법

diff 명령의 구문은 다음과 같습니다.

diff [OPTION]... FILES

 

 

diff 명령은 출력을 여러 형식으로 표시할 수 있으며 가장 일반적인 형식은 일반, 컨텍스트 및 통합 형식입니다. 출력에는 파일의 줄이 동일해지도록 변경해야 하는 줄에 대한 정보가 포함됩니다. 파일이 일치하면 출력이 생성되지 않습니다.

명령 출력을 파일에 저장하려면 리디렉션 연산자를 사용합니다.

diff file1 file2 > patch

 

 

이 문서에서는 다음 두 파일을 사용하여 diff 명령의 작동 방식을 설명합니다.

# file1

Ubuntu
Arch Linux
Debian
CentOS
Fedora

 

# file2

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, 2d2, 4c4,5는 변경 명령입니다. 각 변경 명령에는 왼쪽에서 오른쪽으로 다음 항목이 포함됩니다.

첫 번째 파일의 줄 번호 또는 줄 범위입니다.

특수 변경 문자입니다.

두 번째 파일의 줄 번호 또는 줄 범위입니다.

 

변경 문자는 다음 중 하나일 수 있습니다.

a - 줄을 추가합니다.

c - 라인을 변경합니다.

d - 줄을 삭제합니다.

 

변경 명령 뒤에 제거(<)되고 파일(>)에 추가되는 전체 행이 나옵니다.

 

 

출력에 대해 설명하겠습니다.

0a1 - 파일1의 시작 부분에 (0줄 뒤에) 두 번째 파일의 1줄을 추가합니다.

> Kubuntu - 위에서 설명한 대로 첫 번째 파일에 추가된 두 번째 줄의 행입니다.

 

2d2 - 첫 번째 파일에서 줄 2를 삭제합니다. d 기호 뒤의 2는 선이 삭제되지 않으면 두 번째 파일의 라인 2에 나타납니다.

< Arch Linux - 삭제된 줄입니다.

 

4c4,5 - 첫 번째 파일의 5줄을 두 번째 파일의 4-5줄로 교체(변경)합니다.

< CentOS - 첫 번째 파일의 행입니다.

--- - 구분자입니다.

> Arch Linux 및 > Centos - 두 번째 파일의 라인이 첫 번째 파일의 라인을 대체합니다.

 

 

 

컨텍스트 형식

컨텍스트 출력 형식을 사용할 때 diff 명령은 파일 간에 서로 다른 줄 주위에 여러 줄의 컨텍스트를 표시합니다.

-c 옵션은 diff에게 컨텍스트 형식으로 출력을 생성하라고 지시합니다.

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...

 

 

from-file-line-numbers 와 to-file-line-numbers - 첫 번째 파일과 두 번째 파일에서 각각 줄 번호 또는 쉼표로 구분된 줄 범위입니다.

from-file line 및 to-file line - 서로 다른 행과 컨텍스트 행은 다음과 같습니다.

두 개의 공백으로 시작하는 줄은 두 파일에서 동일한 행인 컨텍스트의 선입니다.

빼기 기호(-)로 시작하는 행은 두 번째 파일에서 아무 것도 대응하지 않는 행입니다. 두 번째 파일에 줄이 없습니다.

더하기 기호(+)로 시작하는 행은 첫 번째 파일의 아무 것도 대응하지 않는 행입니다. 첫 번째 파일에 줄이 없습니다.

느낌표(!)로 시작하는 행은 두 파일 간에 변경되는 행입니다. 첫 번째 파일에서 !로 시작하는 각 줄 그룹은 두 번째 파일에서 해당 일치 항목을 가집니다.

 

 

출력에서 가장 중요한 부분을 설명하겠습니다.

이 예에서는 차이점을 설명하는 단 하나의 섹션만 있습니다.

*** 1,6 *** 및 --- 1,7 --은 이 섹션에 포함된 첫 번째 및 두 번째 파일의 행 범위를 알려줍니다.

Ubuntu, Debian, Fedora 및 마지막 빈 줄은 두 파일에서 동일합니다. 이 선들은 두 개의 공백으로 시작합니다.

줄 - 첫 번째 파일의 Arch Linux는 두 번째 파일의 nothing에 해당합니다. 이 줄은 두 번째 파일에도 있지만 위치가 다릅니다.

두 번째 파일의 Line + Kubuntu는 첫 번째 파일의 nothing에 해당합니다.

! CentOS 와 ! Arch Linux는 두 번째 파일들 사이에서 바뀝니다.

기본적으로 컨텍스트 줄 수는 3개로 설정됩니다.

다른 숫자를 지정하려면 -C(--컨텍스트) 옵션을 사용합니다.

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

 

 

 

통일된 형식

통합 출력 형식은 컨텍스트 형식의 개선된 버전이며 더 작은 출력을 생성합니다.

-u 옵션을 사용하여 출력을 통일된 형식으로 출력하도록 diff에 알립니다.

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...

 

 

@@ 파일 줄 번호에서 파일 줄 번호까지 @@ - 이 섹션에 포함된 첫 번째 및 두 번째 파일의 줄 번호 또는 범위입니다.

파일에서 줄 - 다른 줄과 컨텍스트의 줄은 다음과 같습니다.

두 개의 공백으로 시작하는 줄은 두 파일에서 동일한 행인 컨텍스트의 선입니다.

빼기 기호(-)로 시작하는 행은 첫 번째 파일에서 제거된 행입니다.

더하기 기호(+)로 시작하는 행은 첫 번째 파일에서 추가된 행입니다.

 

 

 

대소문자를 무시

위의 예에서 알 수 있듯이 diff 명령은 기본적으로 대소문자를 구분합니다.

-i 옵션을 사용하여 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 시스템 관리자의 가장 일반적인 작업 중 하나입니다.

diff 명령은 파일을 한 줄씩 비교합니다. 자세한 내용을 보려면 단말기에 man diff를 입력하십시오.

반응형