리눅스 Rsync 명령어: 옵션 | 사용 예시

서버 두 대의 폴더를 맞추려고 전체를 매번 다시 복사하면, 바뀐 파일이 하나뿐이어도 전송량은 전체 크기 그대로입니다. Rsync 명령어는 remote sync 의 줄임말로, 원본과 대상을 비교해 달라진 파일만 전송하며 로컬 폴더 사이와 SSH 로 연결한 서버 사이에서 같은 방식으로 동작합니다. 이 글에서는 기본 사용법과 옵션, SSH 와 rsync 데몬 두 접속 방식의 예시를 정리했습니다.
이 글의 출력은 AlmaLinux 9.8 의 rsync 3.2.7 에서 받은 것이며, 설치되어 있지 않다면 패키지 관리자로 설치합니다.
# RHEL 계열
dnf -y install rsync
# Debian 계열
apt -y install rsync✅ 기본 사용 방법
기본 사용법은 아래와 같습니다.
rsync -옵션 원본 대상cp 명령어와 같이 원본을 먼저, 대상을 뒤에 적습니다. 원본 끝에 슬래시[/]를 붙이면 폴더 안의 내용만 대상에 들어가고, 붙이지 않으면 폴더째 들어가게 됩니다.
~]# rsync -av www/ backup/
sending incremental file list
index.html
img/
img/logo.png
~]# rsync -av www backup/
sending incremental file list
www/
www/index.html
www/img/
www/img/logo.png같은 명령을 다시 실행하면 파일 목록이 비고, sent 바이트가 수백 바이트로 줄어듭니다. 크기와 수정 시각이 같은 파일은 건너뛰기 때문입니다.
~]# rsync -av www/ backup/
sending incremental file list
sent 166 bytes received 13 bytes 358.00 bytes/sec
total size is 3,015 speedup is 16.84-a 없이 -r 만 쓰면 수정 시각이 보존되지 않아, 다음 실행에서 같은 파일을 다시 보내게 됩니다. 폴더를 동기화할 때는 -a 를 기본으로 붙입니다.
-n 옵션은 전송 없이 바뀔 파일만 보여 주며 결과 끝에 [(DRY RUN)]이 붙습니다. --delete 처럼 대상의 파일을 지우는 옵션은 -n 으로 먼저 확인한 뒤 실행합니다.
~]# rsync -avn --delete www/ backup/
sending incremental file list
deleting old.bak
index.html
sent 188 bytes received 39 bytes 454.00 bytes/sec
total size is 3,013 speedup is 13.27 (DRY RUN)✅ Rsync 명령어 옵션 & 시뮬레이터
| 옵션 | 설명 | |
|---|---|---|
| -a | --archive하위 디렉토리까지 복사하며 권한·소유자·수정 시각·심볼릭 링크를 보존 (-rlptgoD 와 같음) | |
| -v | --verbose전송한 파일 이름과 전송량을 출력 | |
| -z | --compress전송 중 파일 데이터를 압축 | |
| -r | --recursive하위 디렉토리까지 복사 (-a 에 포함) | |
| -t | --times수정 시각을 보존 (-a 에 포함). 다음 실행에서 건너뛸 파일을 정하는 기준 | |
| -n | --dry-run전송 없이 바뀔 파일만 출력하고 끝에 (DRY RUN) 을 표시 | |
| -u | --update대상 쪽이 더 새로운 파일은 건너뜀 | |
| -h | --human-readable바이트 수를 K·M·G 단위로 출력 | |
| -P | --partial --progress 와 같음. 파일마다 진행률을 표시하고 중단된 전송을 이어받음 | |
| -i | --itemize-changes파일마다 바뀐 항목을 기호로 출력>f+++++++++ 새 파일 · >f.st...... 크기·시각 변경 · *deleting 삭제 | |
| -e | --rsh=COMMAND원격 셸 지정-e 'ssh -p 2222 -i /root/.ssh/key.pem' | |
| --delete | 원본에 없는 파일을 대상에서 삭제 (-r 또는 -a 필요) | |
| --exclude=PATTERN | 패턴에 맞는 파일·디렉토리를 제외--exclude '*.tmp' --exclude 'cache/' | |
| --include=PATTERN | --exclude 보다 앞에 두어 그 패턴만 제외에서 뺌 | |
| --max-size=SIZE | 지정 크기보다 큰 파일은 전송하지 않음 (--min-size 는 작은 파일)--max-size=3M --min-size=10k | |
| --bwlimit=RATE | 전송 속도 제한, 단위는 KiB/s | |
| --stats | 파일 수·전송량 통계를 출력 |
✅ 접속 방식: SSH 와 rsync 데몬
원격 서버와 동기화하는 접속 방식은 둘입니다. 호스트 뒤의 콜론 하나[:]는 SSH 를 거치고, 콜론 둘[::]은 873 포트의 rsync 데몬에 직접 연결합니다.
| 구분 | SSH 방식 (:) | rsync 데몬 방식 (::) |
|---|---|---|
| 접속 형식 | rsync -옵션 user@host:/경로 /로컬경로 | rsync -옵션 host::모듈/경로 /로컬경로 |
| 포트 | SSH 포트 (기본 22) | 873 |
| 암호화 | SSH 로 암호화 | 암호화 없음 |
| 인증 | SSH 키 또는 비밀번호 | rsyncd.conf 의 hosts allow, 선택 사항으로 계정·비밀번호 |
| 서버 쪽 설정 | 없음 (SSH 접속만 되면 사용) | rsync-daemon 설치, /etc/rsyncd.conf, 873 포트 개방 |
| 용도 | 서버 사이 백업·배포 (기본 선택) | SSH 계정을 주지 않는 내부망 미러링 |
🔲 SSH 방식
SSH 로 접속할 수 있는 서버라면 서버 쪽 설정 없이 바로 쓸 수 있습니다. 포트가 다르거나 키 파일을 쓰는 경우 -e 옵션에 ssh 명령을 그대로 넣습니다.
# 로컬 → 원격
rsync -avz /home/2server_data/ root@192.168.45.239:/home/1server_data/
# 원격 → 로컬
rsync -avz root@192.168.45.239:/home/1server_data/html_Remote /home/2server_data
# SSH 포트·키 파일 지정
rsync -avz -e 'ssh -p 2222 -i /root/.ssh/key.pem' root@192.168.45.239:/home/1server_data/ /home/2server_data
특정 파일이나 디렉토리를 빼려면 --exclude 를 패턴마다 하나씩 붙이거나, 중괄호로 묶어 한 번에 적습니다.
rsync -avz --exclude 'html_Remote_Excertion' --exclude 'Exception_File' root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync -avz --exclude={'html_Remote_excertion/*','Exception_File'} root@192.168.45.239:/home/1server_data/ /home/2server_data
🔲 rsync 데몬 방식
rsync 데몬은 SSH 계정 없이 873 포트로 모듈 단위의 접근을 허용하며, 통신이 암호화되지 않으므로 같은 내부망의 서버 사이에서 씁니다.
AlmaLinux 9 에서는 rsync-daemon 패키지를 설치하고 서비스를 켭니다. firewalld 를 쓰는 서버라면 873 포트를 열고, 클라우드 서버는 콘솔 방화벽에서 엽니다. RHEL 8 이하에서 쓰던 xinetd 방식은 9 에서 사라졌습니다.
dnf -y install rsync-daemon
systemctl enable --now rsyncd
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reload설정 파일 [/etc/rsyncd.conf]에 모듈 이름과 경로, 허용할 호스트를 적습니다. read only 를 yes 로 두면 원격에서 받아 가기만 할 수 있습니다.
[myhome]
path = /home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.45.182
max connections = 3
timeout = 30원격에서 호스트 뒤에 콜론 둘만 적으면 모듈 목록이, 모듈 이름까지 적으면 그 안의 파일 목록이 나옵니다.
~]# rsync 192.168.45.239::
myhome
home
~]# rsync 192.168.45.239::myhome
drwxr-xr-x 4,096 2025/06/12 22:14:39 .
drwxr-xr-x 4,096 2025/06/12 22:21:10 1server_data
drwxr-xr-x 4,096 2025/06/12 22:14:39 2server_data복사는 [호스트::모듈/경로] 형식으로 받습니다. --delete 는 원본에 없는 파일을 대상에서 지우고, --include 는 --exclude 보다 앞에 둔 항목만 제외에서 뺍니다.
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
./
Exception_File
html_Remote/
html_Remote_Excertion/
sent 58 bytes received 332 bytes 780.00 bytes/sec
total size is 442 speedup is 1.13
~]# rsync -avz --delete 192.168.45.239::myhome/1server_data/ /home/2server_data/
~]# rsync -avz --include '*.html' --exclude 'exclude.txt' 192.168.45.239::myhome/1server_data/ /home/2server_data/

SELinux 가 켜진 서버에서는 모듈 경로 접근이 [Permission denied (13)]으로 막힐 수 있습니다. 테스트에서는 [setenforce 0]으로 SELinux 를 끈 뒤 통과했습니다.
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
rsync: change_dir "/1server_data" (in myhome) failed: Permission denied (13)
sent 8 bytes received 90 bytes 65.33 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1658) [Receiver=3.1.2]--bwlimit 로 전송 속도를 KiB/s 단위로 제한하고, -P 를 붙이면 파일마다 진행률을 함께 봅니다. --max-size 와 --min-size 는 지정 크기 범위의 파일만 전송합니다.
rsync -avzP --bwlimit=100 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync -avz --max-size='3M' --min-size='10k' 192.168.45.239::myhome/1server_data/ /home/2server_data/
ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.