rsync Reference
rsync 파일 동기화 레퍼런스
rsync Reference 소개
rsync 레퍼런스는 rsync 파일 동기화 유틸리티를 위한 포괄적이고 검색 가능한 치트 시트입니다. 기본 옵션, 필터, 원격 동기화, SSH, 백업, 제외 등 6개 카테고리에 걸쳐 30개 항목을 다룹니다. 각 항목에는 정확한 플래그나 패턴 구문, 설명, 실용적인 명령줄 예제가 포함되어 있어 로컬 디렉토리 동기화, 서버 배포, 자동 백업 시스템 구축 시 올바른 옵션을 빠르게 찾을 수 있습니다.
이 레퍼런스는 네트워크를 통해 효율적으로 파일을 전송해야 하는 시스템 관리자, DevOps 엔지니어, 개발자, 고급 사용자를 위해 설계되었습니다. 기본 옵션 섹션은 -a(아카이브 모드, 권한과 타임스탬프 보존), -v(상세 출력), -z(압축), -P(진행률 + 부분 재시작), --delete(미러 동기화), -n(드라이 런 시뮬레이션), --stats(전송 요약) 등 필수 플래그를 다룹니다. 필터 섹션은 파일 타입 필터링을 위한 --include와 --exclude 패턴, 파일에서 패턴 읽기를 위한 --exclude-from, --filter 규칙 구문, 크기 기반 필터링을 위한 --max-size/--min-size를 다룹니다.
원격 동기화 섹션은 rsync 로컬-원격, 원격-로컬, 데몬 모드(rsync:// 프로토콜)를 설명합니다. SSH 섹션은 -e ssh 전송 옵션, -e "ssh -p PORT"를 이용한 커스텀 SSH 포트, -e "ssh -i KEY"를 이용한 SSH 키 인증, --bwlimit을 이용한 대역폭 제한, --checksum을 이용한 체크섬 기반 비교를 다룹니다. 백업 섹션은 suffix가 있는 --backup, 날짜 기반 버전 관리를 위한 --backup-dir, 하드링크 증분 백업을 위한 --link-dest, cron 스케줄링 패턴, 전체 미러 백업을 다룹니다. 제외 섹션은 .git, node_modules, 숨김 파일 제외 및 디렉토리별 규칙을 위한 .rsync-filter 파일 사용에 대한 실용적인 패턴을 다룹니다.
주요 기능
- 핵심 rsync 플래그: -a(아카이브), -v(상세), -z(압축), -P(진행률+부분), --delete(미러), -n(드라이 런), --stats
- 필터 패턴: 와일드카드가 있는 --include/--exclude, --exclude-from 파일, --filter 규칙, --max-size와 --min-size
- 원격 동기화: 로컬-원격, 원격-로컬, rsync 데몬 모드(rsync://와 ::module 구문)
- SSH 전송: -e ssh, -e "ssh -p PORT"를 이용한 커스텀 포트, -e "ssh -i KEY"를 이용한 SSH 키 파일, --bwlimit 대역폭 제어
- 백업 전략: --suffix가 있는 --backup, 날짜별 백업을 위한 --backup-dir, 하드링크 증분 백업을 위한 --link-dest
- 예약 백업: /var/log/rsync-backup.log에 로깅을 포함한 일일 rsync cron 작업 템플릿
- 실용적인 제외 패턴: .git/, node_modules/, 숨김 점 파일, --cvs-exclude 플래그, 디렉토리별 .rsync-filter 규칙
- 정확한 비교를 위한 --checksum 기반 동기화, --delete-excluded를 이용한 미러 백업
자주 묻는 질문
rsync -av는 무엇을 하며 언제 사용해야 하나요?
-a 플래그는 아카이브 모드를 활성화하며 -rlptgoD와 동일합니다: 디렉토리를 재귀적으로 복사(-r), 심볼릭 링크 보존(-l), 권한 보존(-p), 수정 시간 보존(-t), 그룹 소유권 보존(-g), 소유자 보존(-o), 디바이스/특수 파일 보존(-D). -v 플래그는 전송되는 각 파일을 볼 수 있도록 상세 출력을 활성화합니다. 대부분의 동기화 작업에서 기본 시작점으로 -av를 사용합니다.
소스 경로 끝에 슬래시가 있는 rsync와 없는 rsync의 차이점은 무엇인가요?
소스 경로의 끝 슬래시는 큰 차이를 만듭니다. 끝 슬래시가 있으면(rsync -av /src/ /dest/) rsync가 /src/의 내용을 직접 /dest/에 복사하여 파일이 /dest/file.txt에 위치합니다. 끝 슬래시가 없으면(rsync -av /src /dest/) rsync가 디렉토리 자체를 복사하여 /dest/src/file.txt를 생성합니다. 대상 경로의 끝 슬래시는 영향을 미치지 않습니다. 이것은 rsync 실수 중 가장 흔한 원인 중 하나입니다.
rsync가 무엇을 변경할지 미리 확인하는 드라이 런을 어떻게 실행하나요?
-n 또는 --dry-run 플래그를 사용합니다: rsync -avn --delete /src/ /dest/. -v와 조합하면 실제로 변경하지 않고도 어떤 파일이 생성, 업데이트 또는 삭제될지 정확히 표시합니다. --delete나 다른 파괴적인 작업을 사용하기 전에 항상 드라이 런을 실행하여 파일 목록이 예상과 일치하는지 확인합니다. 출력 형식은 실제 실행과 동일하여 검토하기 쉽습니다.
rsync로 증분 백업을 구현하는 방법은?
--link-dest 옵션을 사용하여 하드링크 기반 증분 백업을 만듭니다. 패턴은 다음과 같습니다: LATEST=$(ls -td /backup/*/ | head -1) && rsync -av --link-dest="$LATEST" /src/ /backup/$(date +%Y%m%d)/. 마지막 백업 이후 변경되지 않은 파일은 이전 백업 디렉토리에서 하드링크되어(추가 디스크 공간 없음) 변경된 파일만 새로 복사됩니다. 각 날짜별 백업 디렉토리는 완전한 복사본처럼 보이지만 최소한의 추가 공간만 사용합니다.
비표준 포트의 SSH를 통해 파일을 동기화하는 방법은?
-e 플래그를 사용하여 SSH 전송 옵션을 지정합니다: rsync -avz -e "ssh -p 2222" /local/ user@remote:/data/. -e 옵션은 기본 원격 셸 명령을 대체하므로 포트를 위한 -p, 키 파일을 위한 -i, SSH 설정 옵션을 위한 -o, SSH 레벨 압축을 위한 -C 등 모든 ssh 플래그를 전달할 수 있습니다. 비표준 포트를 자주 사용한다면 Host와 Port 지시어로 ~/.ssh/config에 추가하는 것이 좋습니다.
rsync 전송에서 node_modules와 .git을 제외하는 방법은?
--exclude 플래그를 사용합니다: rsync -av --exclude='.git/' --exclude='node_modules/' /project/ user@server:/var/www/project/. 여러 --exclude 플래그를 체이닝할 수 있습니다. 대규모 프로젝트에서는 모든 제외 패턴을 텍스트 파일(한 줄에 하나씩)에 넣고 --exclude-from=exclude-list.txt를 사용합니다. 또는 --cvs-exclude(-C)를 사용하면 .git, .svn, *.o, *.swp 등 일반 VCS 및 빌드 아티팩트 디렉토리를 자동으로 제외합니다.
--delete 플래그는 무엇이며 언제 안전하게 사용할 수 있나요?
--delete 플래그는 소스에 더 이상 존재하지 않는 대상의 파일을 삭제하여 대상이 소스의 정확한 미러가 되도록 합니다. 이것은 진정한 미러링에 필수적이지만 부주의하게 사용하면 위험합니다 — 대상에만 존재하는 모든 파일이 영구적으로 삭제됩니다. 항상 --dry-run으로 먼저 파일 목록을 확인하고, 프로덕션에서 --delete를 사용하기 전에 --backup 또는 --backup-dir을 사용하여 삭제될 파일을 저장하는 것을 고려합니다.
rsync --checksum은 기본 파일 비교와 어떻게 다른가요?
기본적으로 rsync는 파일 크기와 수정 시간을 비교하여 전송 여부를 결정합니다. 이것은 빠르지만 파일이 수정되었다가 같은 크기와 타임스탬프로 복원된 경우를 놓칠 수 있습니다. --checksum 플래그는 rsync가 각 파일의 MD5 또는 유사한 체크섬을 계산하고 크기/시간 대신 체크섬을 비교하도록 강제합니다. 이것은 더 느리지만(모든 파일의 모든 바이트 읽기 필요) 비트 단위 정확도를 보장합니다. 미디어 복사 후나 타임스탬프를 신뢰할 수 없을 때처럼 데이터 무결성이 중요한 경우에 --checksum을 사용합니다.