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
,
2d2
및
4c4,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...
diff
과 from-file-line-numbers
은 각각 첫 번째 파일과 두 번째 파일의 행 번호 또는 쉼표로 구분된 행 범위입니다. to-file-line-numbers
과 from-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
을 입력합니다.만약 무슨 문제가 있으면 아래에 메시지를 남겨 주십시오.