Linux / 명령어 / diff - 텍스트 파일과 디렉터리 차이 비교
diff는 두 텍스트 파일 또는 디렉터리를 비교해 서로 다른 부분을 보여 주는 명령입니다. 특히 -u의 unified diff 형식은 변경 전후 문맥을 함께 제공해 패치와 코드 리뷰에 널리 사용됩니다.
이 글에서는 diff의 기본 문법과 주요 옵션, 실제 사용 예제, 관련 명령과의 차이, 사용할 때 주의할 점을 설명합니다.
diff 명령어란?
첫 번째 입력을 두 번째 입력으로 바꾸기 위한 차이를 줄 단위로 계산합니다. 출력이 없으면 차이가 없다는 뜻이며, 종료 상태 0은 동일, 1은 차이 있음, 2 이상은 오류를 나타내는 것이 일반적입니다. 따라서 차이가 있다는 상태 1을 무조건 실행 실패로 취급하지 않아야 합니다.
기본 문법
diff [옵션] 파일1 파일2 diff [옵션] 디렉터리1 디렉터리2
옵션과 세부 동작은 구현과 버전에 따라 달라질 수 있습니다. 현재 시스템에서는 diff --help와 man diff으로 설치된 명령의 설명을 확인하세요.
diff 기본 사용법
두 파일 비교하기
기본 출력은 변경 명령 형태로 표시됩니다.
diff old.conf new.conf
unified 형식으로 비교하기
변경 줄 앞뒤의 문맥이 함께 표시되어 사람이 읽기 쉽습니다.
diff -u old.conf new.conf
디렉터리 재귀 비교하기
-r은 대응하는 하위 경로까지 비교합니다.
diff -ru project-old project-new
변경 표시와 종료 상태 읽기
diff -u는 두 파일의 다른 줄을 통합 형식으로 보여줍니다. 아래 예제에서는 첫 파일의 old가 둘째 파일의 new로 바뀌었습니다.
printf 'old\n' > before.txt printf 'new\n' > after.txt diff -u before.txt after.txt
출력의 핵심 부분(파일 헤더의 시각은 생략):
-old +new
-는 첫 파일에만 있는 줄, +는 둘째 파일에만 있는 줄입니다. 두 파일이 다르면 종료 상태 1이므로, 이를 실행 실패 상태 2와 구분하세요.
주요 옵션
| 옵션 | 설명 |
|---|---|
-u |
unified 형식으로 문맥과 차이를 출력합니다. |
-r, --recursive |
하위 디렉터리를 재귀적으로 비교합니다. |
-q, --brief |
상세 차이 대신 서로 다른지 여부만 보고합니다. |
-s, --report-identical-files |
동일한 파일도 명시적으로 보고합니다. |
-w, --ignore-all-space |
모든 공백 차이를 무시합니다. |
-b, --ignore-space-change |
연속 공백 양의 차이를 무시합니다. |
-i, --ignore-case |
대소문자 차이를 무시합니다. |
--color=auto |
지원되는 GNU 버전에서 터미널 출력에 색상을 적용합니다. |
실전 활용 예제
패치 파일 만들기
기준 디렉터리에서 재현 가능한 상대 경로를 사용해 unified diff를 저장합니다.
diff -u original.conf modified.conf > config.patch
디렉터리 변경 요약하기
파일 내용 전체가 필요 없으면 -qr로 다른 파일과 한쪽에만 있는 경로를 요약합니다.
diff -qr release-a release-b
공백 차이를 제외하고 검토하기
공백이 의미 없는 경우에만 사용합니다. Python처럼 들여쓰기가 의미 있는 언어에는 결과를 신중히 해석합니다.
diff -u -b before.txt after.txt
diff와 관련 명령 비교
| 명령 | 주요 역할 | 적합한 상황 |
|---|---|---|
diff |
줄 단위 텍스트 차이 | 설정·소스·디렉터리 비교 |
cmp |
바이트 단위 첫 차이 | 동일 여부와 오프셋 확인 |
git diff |
저장소 변경 비교 | Git 작업 트리와 커밋 |
comm |
정렬된 두 파일의 집합 비교 | 공통·고유 줄 분리 |
사용할 때 주의할 점
종료 상태 1은 차이가 있다는 뜻입니다
스크립트에서 단순 오류로 처리하면 정상적인 비교 결과를 실패로 오해할 수 있습니다.
바이너리 파일에는 상세 줄 비교가 적합하지 않습니다
바이너리 동일 여부는 cmp나 체크섬 도구가 더 명확합니다.
공백 무시는 실제 차이를 숨길 수 있습니다
형식이나 들여쓰기가 의미 있는 파일에는 무시 옵션을 함부로 적용하지 않습니다.
FAQ
diff 출력이 없으면 무엇을 뜻하나요?
두 입력에서 보고할 차이가 없다는 뜻입니다.
가장 읽기 쉬운 출력 형식은 무엇인가요?
일반적으로 diff -u의 unified 형식이 문맥을 함께 보여 줘 읽기 쉽습니다.
디렉터리 전체도 비교할 수 있나요?
-r로 하위 디렉터리를 재귀 비교할 수 있습니다.
diff가 종료 코드 1을 반환하면 오류인가요?
아닙니다. 보통 차이가 발견됐다는 정상 결과이며 실제 오류는 2 이상입니다.









