우분투 실전 명령어 | diff와 patch로 설정 변경 안전 적용

언제 쓰는가

운영 서버 설정을 바꿔야 하는데, 기존 파일을 통째로 덮어쓰기는 부담될 때 쓴다.
특히 팀에서 변경 내역을 리뷰하고, 동일한 수정을 여러 서버에 반복 적용할 때 diff/patch 조합이 가장 깔끔하다.

바로 쓰는 명령어

# 1) 원본 백업
cp /etc/nginx/nginx.conf /tmp/nginx.conf.orig

# 2) 작업본 생성 후 수정
cp /etc/nginx/nginx.conf /tmp/nginx.conf.new
vim /tmp/nginx.conf.new

# 3) 패치 파일 생성 (unified format)
diff -u /tmp/nginx.conf.orig /tmp/nginx.conf.new > /tmp/nginx-tuning.patch

# 4) 실제 파일에 적용 전 시뮬레이션
patch --dry-run /etc/nginx/nginx.conf < /tmp/nginx-tuning.patch

# 5) 문제 없으면 적용
patch /etc/nginx/nginx.conf < /tmp/nginx-tuning.patch
# 디렉터리 단위 변경점 생성/적용
# (예: 앱 설정 디렉터리 전체)
diff -ruN /opt/app/config.orig /opt/app/config.new > /tmp/app-config.patch
patch -p0 --dry-run < /tmp/app-config.patch
patch -p0 < /tmp/app-config.patch

핵심 옵션/패턴

  • diff -u: 사람이 읽기 좋은 unified diff 형식으로 출력한다.
  • diff -r: 하위 디렉터리까지 재귀 비교한다.
  • diff -N: 한쪽에만 있는 파일도 비교 대상에 포함한다.
  • patch --dry-run: 실제 반영 없이 적용 가능 여부만 확인한다.
  • patch -pN: 패치 안의 경로 앞부분을 N개 제거해 경로를 맞춘다.

실무에서는 먼저 --dry-run으로 실패 여부를 확인하고, 성공한 동일 패치를 운영 반영하는 흐름이 안전하다.

명령 출력 예시

$ diff -u /tmp/nginx.conf.orig /tmp/nginx.conf.new
--- /tmp/nginx.conf.orig	2026-02-19 00:50:11
+++ /tmp/nginx.conf.new	2026-02-19 00:52:03
@@ -23,7 +23,7 @@
 worker_processes auto;
-events {
-    worker_connections 1024;
+events {
+    worker_connections 2048;
 }
$ patch --dry-run /etc/nginx/nginx.conf < /tmp/nginx-tuning.patch
checking file /etc/nginx/nginx.conf
Hunk #1 succeeded at 23 (offset 0 lines).

자주 하는 실수

  • 원본 파일 버전을 안 맞춘 채 패치를 적용해서 hunk failed가 발생한다.
  • patch -p 옵션을 잘못 줘서 파일 경로를 못 찾는다.
  • dry-run 없이 바로 반영해서 서비스 재기동 시점에 설정 오류를 발견한다.

검증 방법

# 패치 적용 여부 확인
grep -n "worker_connections" /etc/nginx/nginx.conf

# 서비스 설정 문법 검증 (nginx 예시)
nginx -t

# 반영 이력 기록용
sha256sum /etc/nginx/nginx.conf

패치 적용 후에는 서비스별 설정 검사 명령까지 꼭 실행해 두는 게 좋다.

운영 팁

한 번 검증된 patch 파일은 배포 아티팩트처럼 보관하면 재현성이 높아진다.
파일명에 날짜와 목적을 넣어두면 추적이 쉬워진다. 예를 들어 2026-02-19-nginx-worker-tuning.patch 같은 형태가 실무에서 관리하기 편하다.

출처

GNU Diffutils
GNU patch
Nginx