> 텍스트 처리 및 검색 > diff

diff: 파일/디렉토리 차이 비교 가이드

두 대상의 차이를 줄 단위로 비교하고 사람이 읽기 쉬운 포맷(통합/컨텍스트/나란히 보기)으로 출력합니다. 패치 작성과 코드 리뷰, 설정 변경 비교에 널리 사용됩니다.

개요

diff는 두 파일 또는 디렉토리의 변경점을 비교하여 어떤 줄이 추가/삭제/수정되었는지 보여줍니다. 출력 형식은 통합(unified), 컨텍스트(context), 나란히(side-by-side) 등으로 선택할 수 있으며, 공백이나 대소문자와 같은 비교 민감도를 조절할 수 있습니다.

주요 특징

  • 줄 단위 비교 및 사람이 읽기 쉬운 포맷 제공
  • 디렉토리 간 재귀 비교 가능 (-r)
  • 공백/대소문자/빈 줄 등 무시 규칙 다양
  • 패치(.patch) 생성에 적합한 통합 형식(-u) 지원
  • 대용량 파일 비교 성능 최적화 옵션 제공

활용 시나리오 예시

  • 코드 리뷰: 변경된 파일만 패치로 추출
  • 설정 파일 변경 추적: 배포 전후 설정 비교
  • 백업/스냅샷 비교: 특정 시점 간 차이 확인
  • 문서/데이터 전처리 단계에서 의도치 않은 변경 탐지
  • 보안 점검: 외부에서 배포된 바이너리/스크립트의 의심스러운 변경 확인

diff 출력 형식

diff의 출력 형식은 첫 번째 파일을 두 번째 파일로 변경하기 위한 지침을 나타냅니다.

  • `a` (add): 첫 번째 파일에 없는 라인이 두 번째 파일에 **추가**되었습니다. (예: `1a2`)
  • `c` (change): 두 파일 모두 해당 라인이 **변경**되었습니다. (예: `1c2`)
  • `d` (delete): 첫 번째 파일에 있는 라인이 두 번째 파일에서 **삭제**되었습니다. (예: `1d2`)

주요 옵션

자주 사용하는 옵션을 목적에 따라 그룹화했습니다.

1) 기본 동작 & 출력 형식

2) 비교 범위/대상 지정

3) 출력 제어/무시 규칙

4) 도움말/버전

생성된 명령어:

명령어를 조합해 보세요.

설명:

`diff` 명령어를 실행합니다.

위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.

사용 예시

자주 쓰는 비교 시나리오를 예제로 정리했습니다.

통합 포맷으로 패치 생성

diff -u old.conf new.conf > change.patch

디렉토리 재귀 비교

diff -ruN ./v1 ./v2

공백 차이 무시하고 비교

diff -uw src_old.c src_new.c

나란히 보기 + 공통 줄 숨김

diff -y --suppress-common-lines a.txt b.txt

종료 코드

스크립트에서 분기 처리할 때 참고하세요.

diff 종료 상태값
코드 의미
0 두 대상이 동일
1 차이가 있음
2 오류 발생(사용법 오류/파일 접근 불가 등)

설치

대부분의 배포판에 기본 포함되어 있으나 없을 경우 diffutils 패키지를 설치하세요.

Debian/Ubuntu

sudo apt update && sudo apt install -y diffutils

RHEL/CentOS/Fedora

sudo dnf install -y diffutils

Arch Linux

sudo pacman -S --needed diffutils

openSUSE

sudo zypper install -y diffutils

팁 & 주의사항

현장에서 자주 놓치는 포인트입니다.

  • 패치 포맷은 보통 -u를 표준으로 사용합니다. git도 내부적으로 유사한 통합 포맷을 씁니다.
  • 공백 처리 옵션(-w, -b, -B)을 남용하면 실제 의미 있는 변경이 가려질 수 있습니다.
  • 윈도우/리눅스 줄바꿈 차이는 --strip-trailing-cr로 정규화하면 비교가 수월합니다.
  • 디렉토리 비교 시 -r과 -x/-X(제외 규칙)를 함께 사용하여 불필요한 파일을 거르세요.
  • 정말 빠른 존재 여부만 확인하려면 -q 옵션을 사용하세요. 상세 내용은 출력하지 않습니다.

관련 명령어

기능적으로 유사하거나 함께 자주쓰이는 명령어들입니다.


동일 카테고리 명령어