만약 두 version의 file이 있는 경우, 그 두개의 파일간의 차이(difference)를 찾아내는 것이 필요할 때가
있습니다. 예를 들어, software package를 업그레이드 할 때나, config.old나 config.bak과 같이
새로운 file 이름으로 설정을 저장하는 경우가 해당됩니다.
그런 경우, diff 명령으로 어떤 줄이 차이가 나는지 알아 낼 수
있어 그 두개의 file을 통합(merge)할 수 있습니다.
$ cat config [sec1] val1=1 val2=2 [sec2] val1=3 val2=4 $ cat config.old [sec1] val1=a val2=b val3=c [sec2] val1=10 val2=11 $ diff config config.old 2,3c2,4 < val1=1 < val2=2 --- > val1=a > val2=b > val3=c 5,6c6,7 < val1=3 < val2=4 --- > val1=10 > val2=11 |
위와 같은 output을 사람이 쉽게 읽을 수 있는 unified format으로 변경할 수 있습니다. +와 - 기호를 이용하여 file간에 차이를 보여주는데, 관련 줄의 앞, 뒤에 보고하는 줄을 추가하여 보여주도록 합니다.
$ diff -u config config.old --- config 2010-11-16 20:21:03.469053831 -0800 +++ config.old 2010-11-16 20:22:25.878054480 -0800 @@ -1,6 +1,7 @@ [sec1] -val1=1 -val2=2 +val1=a +val2=b +val3=c [sec2] -val1=3 -val2=4 +val1=10 +val2=11 |
diff -u는 수정된 날짜를 각각 개별 출력해 줍니다. 그리고 sdiff는 다른 화면을 보여줍니다. sdiff 명령은 각 파일을 통합하여 출력할 수 있도록 지원합니다.
$ sdiff config config.old [sec1] [sec1] val1=1 | val1=a val2=2 | val2=b > val3=c [sec2] [sec2] val1=3 | val1=10 val2=4 | val2=11 |
또, 다른 버전의 diff는 vimdiff입니다. 그것은 vim/vim-gnome/vim-tiny/vim-gtk/vim-nox package가 설치되어야 하며, 두 file의 차이점을 color로 표현해 줍니다.
diff -u 명령의 output은 patch 명령에 사용되기도 합니다. patch 명령은 old file과 diff file을 input으로 받아 patch file을 생성합니다. 다음은 두개의 file을 diff하고 patch file을 생성한뒤 첫 file에 patch를 적용하는 과정을 보여줍니다. (patch 명령은 해당 software package를 설치(sudo apt-get install patch)해야 동작합니다.)
$ cat config [sec1] val1=1 val2=2 [sec2] val3=3 val4=4 $ cat config.new [sec1] val1=a val2=2 val2_1=c [sec2] val3=3 $ diff -u config config.new --- config 2010-11-16 20:56:01.351580253 -0800 +++ config.new 2010-11-16 20:56:32.539937203 -0800 @@ -1,6 +1,6 @@ [sec1] -val1=1 +val1=a val2=2 +val2_1=c [sec2] val3=3 -val4=4 $ diff -u config config.new > patchfile.txt $ patch config < patchfile.txt patching file config $ cat config [sec1] val1=a val2=2 val2_1=c [sec2] val3=3 |
위와 같이 config file이 config.new file로 부터 통합(merge)되었음을 확인할 수 있습니다.
즉, val1=1, val2=2, val3=3, val4=4에서 val1=a, val2=2, val2_1=c, val3=3으로 변경된것을 확인할 수 있습니다.
[출처 : http://greenfishblog.tistory.com/67]
'Academy I > Tech Academy' 카테고리의 다른 글
[Linux]매체 백업 (mkisofs, cdrecord). 굽기(cd burn) (0) | 2015.01.02 |
---|---|
[Linux]network, internet, tcp/ip로 백업하기 (ssh, tar, rsync) (0) | 2015.01.02 |
[Linux]tar, gzip, bzip2 사용하기 (0) | 2015.01.02 |
[Linux]awk, cut, od, unix2dos (0) | 2015.01.02 |
[Linux]sed와 tr을 이용하여 text 바꾸기(replace) (0) | 2015.01.02 |
[Linux]sort로 output 정렬, binary file에 문자열 찾기 (0) | 2015.01.02 |
[Linux]wc로 단어수 구하기 (0) | 2015.01.02 |
[Linux]grep으로 text 검색하기 (0) | 2015.01.02 |