많은 개발자들은 자신들이 개발하는 프로그램 소스의 버전을 유지하기 위해, 원소스 외에 패치파일을 준비한다. 일반적으로 패치파일은 diff를 사용해서 작성하고, 해당 패치파일을 적용할 때는 patch 명령어를 사용해 패치적용을 완료한다.
필자는 처음에 커널 공부를 할 때, 패치파일 사용으로 어려움을 겪은적이 있다. 실제 버전업된 커널 소스 파일 전체를 받는게 나은지, 아님, 하나의 커널 소스 파일을 斌? 패치 파일만 받는게 낳은지 잠시나마 고민했던 적도 있다.
따라서, diff 와 patch 파일은 커널에만 관련있는 내용은 아니나, 커널 패치와 유용히 사용될 수 있는 명령어이므로, 아래에서 살펴보고자 합니다.
기본 개념 및 사용법은 아래의 설명을 따라하기 식으로 해보면, 이해할 수 있을겁니다.
Diff 사용법
1. 두개의 빈 파일을 생성합니다.
[css@css ~]$ touch aaa bbb
[css@css ~]$ ls
aaa bbb
2. aaa에 아래의 라인을 추가합니다. (vi 사용법은 애플리케이션 소개란을 참고하세요. ^^) [css@css ~]$ vi aaa
This is first line // 라인을 추가합니다.
3. aaa 를 bbb로 복사하고, 새로운 라인을 추가합니다. [css@css ~]$ cp aaa bbb
[css@css ~]$ vi bbb
This is a first line
This is a second line // 라인 추가
4. aaa와 bbb의 변경 부분을 패치파일로 만듭니다. 그리고, 변경되는 부분이 패치파일에 어떻게 저장되나 확인합니다.
[css@css ~]$ diff -urN aaa bbb > mydiff.patch
[css@css ~]# cat mydiff.patch
--- aaa 2005-03-07 20:23:22.566188880 +0900
+++ bbb 2005-03-07 20:23:32.986604736 +0900
@@ -1 +1,2 @@
this is a first line
+this is a second line
5. bbb를 지우고, 패치파일의 내용을 aaa에 적용시킵니다. [css@css ~]$ rm -f bbb
[css@css ~]$ patch -p 0 < mydiff.patch
patching file aaa
6. aaa에 패치파일의 내용이 적용되었나 확인합니다.
[css@css ~]$ cat aaa
this is a first line
this is a second line // 라인이 추가되었음
댓글 없음:
댓글 쓰기