본문 바로가기

Linux

[linux dev util] diff, patch

[펌] diff, patch 명령어 ▒ LINUX

2007/01/10 11:26

복사 http://blog.naver.com/rinatear/120033311783

전용뷰어 보기

[linux dev util] diff, patch

diff

difference의 줄임말로 디렉토리간 혹은 파일간의 차이를 만들어 주는 프로그램이다

diff -urN SOMETHING_SRC_ROOT.orig SOMETHING_SRC_ROOT > SOMETHING_SRC.diff 


수정전의 원본소스의 루트디렉토리인 SOMETHING_SRC_ROOT.orig 에서
수정한 소스의 루트디렉토인 SOMETHING_SRC_ROOT의 차이값을
SOMETHING_SRC.diff 파일로 만든다

옵션 -u : 최종 결과물의 포맷을 지정하는 옵션이다. -u는
unified format,
-c context format 이 있다. -u, -c, 아무것도 주지 않았을때 모두 포맷이
다르다. 오픈소스쪽에서는 보통 unified format를 사용한다.

# diff와 patch를 함께 사용할 경우 patch는 diff의 세가지 포맷을 모두
지원한다

옵션 -r : 디렉토리의 경우 지정한 곳의 서브디렉토리까지(recursive) 파일을 전부
비교하란 뜻이다.

옵션 -N : 원본에서 없었는데, 새로 생긴 파일도 포함한다는 뜻이다

-----------------------------------------------------------------------------------------------

patch

diff에 의해 생성된 차이값을 적용하는 util이다.

patch -p0 < /path/to/SOMETHING_SRC.diff

위와 같은 명령을 실행하면 수정된 소스들이 적용된다. 이때, .ref(rejected) 파일이
생성되지만 않는다면 성공이다

patch는 항상 표준입력('<')으로 입력을 받는다.

옵션 -p0 : diff의 최상단에 지정되어 있는 상대경로를 조정(?)하는 역활을 한다.
다시 말하면 -p뒤에 오는 수만큼 명시되어 있는 디렉토리를 벗겨 낸다는
말이다

linux kernel patch중의 일부

fs/exec.c

--- a/fs/exec.c
   +++ b/fs/exec.c

이 파일을 패치할때 커널소스의 최상위 디렉토리 안에 있을 경우에 -p1 옵션을 주면
상대경로의 첫 디렉토리인 a, b 디렉토리를 벗겨낸다.

# 커널소스를 패치하는 경우에 커널소스의 최상위 디렉토리에서 다음의 명령어를
실행함으로써 패치를 할 수 있다. 이때 패치소스는 커널소스의 최상위 디렉토리 보다
한단계 위에 있어야 한다.

gzip -cd ../patch-2.6.xx.gz | patch -p1

or

bzip2 -dc ../patch-2.6.xx.bz2 | patch -p1