리눅스 Rsync 명령어 완전 정복: Use법과 고급 팁 매뉴얼
Linux Rsync Command Complete Guide
리눅스 시스템 관리에서 파Day 동기화와 백업은 Required적인 작업입니다. Rsync는 이러한 작업을 효율적으로 수행할 수 있는 강력한 Tool로, Network를 통한 파Day 전송과 동기화에서 업계 표준으로 자리잡고 있습니다. 이 포스트에서는 Rsync의 기본 개념부터 고급 활용법까지 상세히 다루어보겠습니다.
🎯 이 글에서 배울 Content
- Rsync의 기본 개념과 작동 원리
- 핵심 옵션과 실무 활용 Yes제
- SSH를 활용한 안전한 원격 동기화
- 성능 최적화 및 트러블슈팅
- 실제 시나리오별 활용 전략
📋 목차
1. Rsync란 무엇인가? 🤔
Rsync (Remote Sync)는 유닉스 계열 시스템에서 파Day과 디렉터리를 효율적으로 동기화하고 전송하는 Tool입니다. 1996Year Andrew Tridgell과 Paul Mackerras에 의해 개발된 이후, 시스템 관리자들의 Required Tool로 자리잡았습니다.
✨ Rsync의 Week요 Features
🎯 핵심 Advantages
- 증Minutes 전송: 변경된 부Minutes만 전송하여 대역폭 절약
- 압축 Support: Network 전송 시 데이터 압축으로 속도 향상
- 권한 보존: 파Day 권한, 소유자, 타임스탬프 등 메타데이터 유지
- 암호화 Support: SSH를 통한 안전한 원격 전송
- Resume Feature: 중단된 전송을 이어서 진행 Available
🔍 작동 원리
Rsync는 rolling checksum 알고리즘을 Use하여 파Day의 변경된 부Minutes만을 식별하고 전송합니다. 이를 through All 파Day을 전송할 필요 없이 효율적인 동기화가 Available합니다.
# Rsync 설치 Check which rsync rsync --version # 대부Minutes의 리눅스 배포판에 기본 설치됨 # Ubuntu/Debian: apt install rsync # CentOS/RHEL: yum install rsync 또는 dnf install rsync
2. 기본 문법과 핵심 옵션 ⚙️
📝 기본 문법
rsync [옵션] 소스 목적지 rsync [옵션] 소스 Use자@Host:목적지 rsync [옵션] Use자@Host:소스 목적지
🔧 핵심 옵션 완전 정리
| 옵션 | 단축형 | Description |
|---|---|---|
-v |
--verbose | 상세한 Output Info 표시 |
-r |
--recursive | 하위 디렉터리까지 재귀적으로 처리 |
-a |
--archive | 아카이브 모드 (-rlptgoD와 동Day) |
-z |
--compress | 전송 중 압축 적용 |
-h |
--human-readable | 사람이 읽기 쉬운 형태로 용량 표시 |
-P |
--progress | 진행 상황 표시 (--partial --progress) |
--delete |
- | 소스에 없는 파Day을 목적지에서 Delete |
--dry-run |
-n | 실제 실행 없이 시뮬레이션만 수행 |
--exclude |
- | 특정 파Day/디렉터리 Exclude |
--include |
- | 특정 파Day/디렉터리 Include |
🌟 Frequently Used하는 옵션 조합
💡 Recommend 옵션 조합
-avzP: 아카이브 모드 + 압축 + 진행상황 표시-avzh --delete: 완전 동기화 (미러링)-avzh --dry-run: 안전한 사전 테스트
3. 실무 활용 Yes제 💼
📁 로컬 디렉터리 간 동기화
# 기본 Copy rsync -avzh /source/directory/ /destination/directory/ # 진행 상황과 함께 Copy rsync -avzP /home/user/documents/ /backup/documents/ # Delete된 파Day도 동기화 (완전 미러링) rsync -avzh --delete /source/ /destination/ # 특정 파Day 형식만 Copy rsync -avzh --include="*.jpg" --include="*.png" --exclude="*" /photos/ /backup/photos/
🌐 원격 서버로 파Day 전송
# 로컬에서 원격으로 전송 rsync -avzh /local/directory/ user@remote-server:/remote/directory/ # 원격에서 로컬로 Import rsync -avzh user@remote-server:/remote/directory/ /local/directory/ # 특정 포트를 Use하는 SSH 연결 rsync -avzh -e "ssh -p 2222" /local/directory/ user@server:/remote/directory/ # SSH 키를 Use한 인증 rsync -avzh -e "ssh -i ~/.ssh/my-key" /local/directory/ user@server:/remote/directory/
🔒 Security을 강화한 전송
# SSH 압축과 함께 Use rsync -avzh -e "ssh -C" /local/directory/ user@server:/remote/directory/ # 대역폭 제한 (1000 KB/s) rsync --bwlimit=1000 -avzh /local/directory/ user@server:/remote/directory/ # 체크섬을 Use한 무결성 검증 rsync -avzh --checksum /source/ /destination/
4. SSH 연동과 Security 🔐
🔑 SSH 키 기반 인증 Settings
# SSH 키 Generate ssh-keygen -t rsa -b 4096 -C "your-email@example.com" # 공개 키를 원격 서버에 Copy ssh-copy-id user@remote-server # SSH 에Previous트에 키 Add ssh-add ~/.ssh/id_rsa # Rsync에서 SSH 키 Use rsync -avzh -e "ssh -i ~/.ssh/id_rsa" /local/ user@server:/remote/
⚡ SSH 성능 최적화
# SSH Settings 파Day (~/.ssh/config) Yes제
Host myserver
HostName 192.168.1.100
User myuser
Port 22
IdentityFile ~/.ssh/my-private-key
Compression yes
ServerAliveInterval 60
ServerAliveCountMax 3
# Settings 파Day Use
rsync -avzh /local/directory/ myserver:/remote/directory/
⚠️ Security Caution사항
- SSH 키는 적절한 권한으로 보호하세요 (600 또는 400)
- Available한 한 SSH 포트를 Default(22)에서 변경하세요
- 방화벽 규칙을 적절히 Settings하세요
- 정기적으로 SSH 키를 갱신하세요
5. 고급 Feature과 팁 🚀
📋 Exclude/Include 패턴 활용
# 여러 파Day 형식 Exclude rsync -avzh --exclude="*.tmp" --exclude="*.log" --exclude=".git/" /source/ /dest/ # Exclude 목록 파Day Use echo "*.tmp" > exclude-list.txt echo "*.log" >> exclude-list.txt echo ".git/" >> exclude-list.txt rsync -avzh --exclude-from=exclude-list.txt /source/ /dest/ # 복잡한 패턴 Yes제 rsync -avzh \ --include="*.jpg" \ --include="*.png" \ --include="*/" \ --exclude="*" \ /photos/ /backup/photos/
🔄 백업 전략: 증Minutes 백업
# Date별 백업 디렉터리 Generate BACKUP_DIR="/backup/$(date +%Y-%m-%d)" mkdir -p "$BACKUP_DIR" # 하드링크를 Use한 증Minutes 백업 rsync -avzh --link-dest=/backup/latest /source/ "$BACKUP_DIR"/ ln -nsf "$BACKUP_DIR" /backup/latest # 백업 스크립트 Yes제 #!/bin/bash SOURCE="/home/user" BACKUP_BASE="/backup" DATE=$(date +%Y-%m-%d_%H-%M-%S) BACKUP_DIR="$BACKUP_BASE/$DATE" LATEST_LINK="$BACKUP_BASE/latest" # 백업 실행 rsync -avzh --delete --link-dest="$LATEST_LINK" "$SOURCE/" "$BACKUP_DIR/" # Latest 링크 Update ln -nsf "$BACKUP_DIR" "$LATEST_LINK"
📊 로그 및 모니터링
# 상세 로그 파Day Generate rsync -avzh --log-file=/var/log/rsync.log /source/ /dest/ # 상태 Info와 함께 실행 rsync -avzh --stats /source/ /dest/ # 진행 상황을 in real-time 모니터링 rsync -avzh --progress --stats /source/ /dest/ | tee rsync-log-$(date +%Y%m%d).txt
6. 성능 최적화 ⚡
🔧 전송 성능 튜닝
# 대역폭 제한 (KB/s Unit)
rsync --bwlimit=1000 -avzh /source/ /dest/
# 압축 레벨 조정 (1-9, 6이 Default)
rsync -avzh --compress-level=9 /source/ user@server:/dest/
# 체크섬 알고리즘 Select
rsync -avzh --checksum-choice=md5 /source/ /dest/
# 병렬 전송을 for 여러 프로세스
# (GNU parallel Use)
find /source -maxdepth 1 -type d | parallel -j4 rsync -avzh {} /dest/
💾 대용량 파Day 처리
# 부Minutes 전송 활성화 (중단 시 Resume Available) rsync -avzh --partial /large-files/ /dest/ # 인플레이스 Update (디스크 공간 절약) rsync -avzh --inplace /source/ /dest/ # 희소 파Day 처리 rsync -avzh --sparse /source/ /dest/ # 대용량 파Day용 최적화 조합 rsync -avzh --partial --inplace --progress /large-files/ /dest/
💡 성능 최적화 팁
- Network 대역폭: --bwlimit으로 다른 서비스에 영향 Minimum화
- 압축 Settings: CPU와 Network 상황에 맞게 조정
- 체크섬 방식: 작은 파Day은 --checksum, 큰 파Day은 기본 Settings
- SSH 압축: -e "ssh -C"로 SSH 레벨에서도 압축 적용
7. 트러블슈팅 🔍
❌ 자Week 발생하는 문제와 해결법
🔐 권한 문제
# 권한 Error 시 해결법 # 1. 소유자 Info 무시 rsync -avzh --no-owner --no-group /source/ /dest/ # 2. 권한 Info 무시 rsync -rvzh --no-perms /source/ /dest/ # 3. 관리자 권한으로 실행 sudo rsync -avzh /source/ /dest/
🌐 Network 연결 문제
# 타임아웃 Settings rsync -avzh --timeout=30 /source/ user@server:/dest/ # 재시도 횟수 Settings rsync -avzh --timeout=30 --contimeout=10 /source/ user@server:/dest/ # 연결 상태 Check rsync -avzh --dry-run user@server:/source/ /dest/
💾 디스크 공간 부족
# 디스크 Use량 Check df -h # 부Minutes 전송으로 공간 효율성 개선 rsync -avzh --partial --inplace /source/ /dest/ # 임시 파Day 위치 변경 rsync -avzh --temp-dir=/tmp/large-temp /source/ /dest/
🐛 디버깅 및 로그 Minutes석
# 상세 디버그 Info rsync -avzh --debug=ALL /source/ /dest/ # 특정 모듈 디버깅 rsync -avzh --debug=FILTER /source/ /dest/ # 로그 레벨 조정 rsync -avzh --verbose --verbose /source/ /dest/ # Error만 Output rsync -avzh --quiet /source/ /dest/ 2>&1 | grep -i error
⚠️ Caution사항
- --delete 옵션: 실수로 중요한 파Day을 Delete할 수 Yes
- 경로 끝의 슬래시: /source/와 /source는 다른 Result를 만듦
- 심볼릭 링크: -L 옵션으로 링크 대상을 Copy할지 결정
- Network 안정성: 불안정한 연결에서는 --partial Use 권장
8. 실무 시나리오 🏢
🎯 시나리오 1: Web사이트 배포
#!/bin/bash # Web사이트 배포 스크립트 # Settings LOCAL_DIR="/var/www/html" REMOTE_SERVER="web-server.example.com" REMOTE_DIR="/var/www/html" BACKUP_DIR="/backup/website-$(date +%Y%m%d-%H%M%S)" # 원격 서버 백업 ssh user@$REMOTE_SERVER "mkdir -p /backup" rsync -avzh user@$REMOTE_SERVER:$REMOTE_DIR/ $BACKUP_DIR/ # 새 Version 배포 rsync -avzh --delete \ --exclude=".git/" \ --exclude="*.log" \ --exclude="config/local.php" \ $LOCAL_DIR/ user@$REMOTE_SERVER:$REMOTE_DIR/ echo "배포 Complete. 백업: $BACKUP_DIR"
💾 시나리오 2: 데이터베이스 백업 동기화
#!/bin/bash # 데이터베이스 백업 동기화 스크립트 DB_NAME="myapp" BACKUP_LOCAL="/backup/db" BACKUP_REMOTE="backup-server:/backup/db" DATE=$(date +%Y%m%d) # 데이터베이스 덤프 mysqldump -u root -p$DB_PASSWORD $DB_NAME | gzip > $BACKUP_LOCAL/db-$DATE.sql.gz # 원격 백업 서버로 동기화 rsync -avzh --delete \ --include="*.sql.gz" \ --exclude="*" \ $BACKUP_LOCAL/ $BACKUP_REMOTE/ # 30Day 이상 된 백업 파Day Delete find $BACKUP_LOCAL -name "*.sql.gz" -mtime +30 -delete
📱 시나리오 3: 개발 환경 동기화
#!/bin/bash
# 개발 환경 동기화 스크립트
PROJECT_DIR="/home/developer/projects/myapp"
DEV_SERVER="dev.example.com"
STAGING_SERVER="staging.example.com"
# 개발 서버에서 스테이징으로 동기화
sync_to_staging() {
rsync -avzh --delete \
--exclude="node_modules/" \
--exclude=".env.local" \
--exclude="*.log" \
--exclude=".git/" \
developer@$DEV_SERVER:$PROJECT_DIR/ \
developer@$STAGING_SERVER:$PROJECT_DIR/
}
# 로컬에서 개발 서버로 동기화
sync_to_dev() {
rsync -avzh \
--exclude="node_modules/" \
--exclude=".env.local" \
--exclude="*.log" \
$PROJECT_DIR/ developer@$DEV_SERVER:$PROJECT_DIR/
}
case "$1" in
"staging")
sync_to_staging
;;
"dev")
sync_to_dev
;;
*)
echo "Use법: $0 {staging|dev}"
exit 1
;;
esac
🔄 시나리오 4: Real-time 동기화 (inotify 활용)
#!/bin/bash
# Real-time 파Day 동기화 스크립트
SOURCE_DIR="/home/user/documents"
DEST_DIR="backup-server:/backup/documents"
LOCK_FILE="/tmp/rsync-monitor.lock"
# 이미 실행 중인지 Check
if [ -f "$LOCK_FILE" ]; then
echo "이미 실행 중입니다."
exit 1
fi
# 락 파Day Generate
touch "$LOCK_FILE"
# 종료 시 락 파Day 제거
trap "rm -f $LOCK_FILE" EXIT
# Real-time 모니터링 및 동기화
inotifywait -m -r -e modify,create,delete,move "$SOURCE_DIR" |
while read path action file; do
echo "변경 감지: $path$file ($action)"
# 짧은 지연 후 동기화 (연속 변경 처리)
sleep 2
rsync -avzh --delete "$SOURCE_DIR/" "$DEST_DIR/"
if [ $? -eq 0 ]; then
echo "동기화 Complete: $(date)"
else
echo "동기화 Failed: $(date)"
fi
done
📝 정리 및 베스트 프랙티스
✅ Rsync Use 체크리스트
- 사전 테스트: 항상 --dry-run으로 먼저 Check
- 백업 준비: 중요한 데이터는 사전 백업
- 권한 Check: 소스와 목적지의 권한 Settings 점검
- Network 상태: 안정적인 연결 환경에서 실행
- 로그 관리: 작업 기록을 남겨 추후 Minutes석 Available하도록
🎯 상황별 권장 옵션
- Day반 백업:
rsync -avzh --progress - 완전 미러링:
rsync -avzh --delete - 원격 전송:
rsync -avzh -e ssh - 대용량 파Day:
rsync -avzh --partial --inplace - 느린 Network:
rsync -avzh --compress-level=9 --bwlimit=500
🚨 Caution해야 할 함정들
- 경로 끝의 슬래시:
/dir/와/dir는 다른 Result - --delete 옵션: 신중하게 Use, 중요 파Day Delete 위험
- 심볼릭 링크: -l, -L, -k 옵션의 차이점 이해
- 권한 문제: sudo Use 시 소유자 변경 Caution
- Characters 인코딩: 다른 시스템 간 파Day명 문제 Available
Rsync는 단순해 보이지만 매우 강력하고 유연한 Tool입니다. 이 가이드에서 제시한 Yes제들을 바탕으로 실제 환경에서 테스트해보시고, 각자의 요구사항에 맞게 옵션을 조합해 Use하시기 바랍니다. 효율적인 파Day 동기화와 백업으로 시스템 관리의 생산성을 크게 향상시킬 수 있을 것입니다.
🔗 Add 리소스
- 공식 문서:
man rsync또는 rsync.samba.org - 고급 가이드: Arch Linux Rsync Wiki
- 성능 튜닝: Rsync Performance Analysis