OS/Linux | 리눅스

[Linux]리눅스 rsync 명령어 및 사용법

tech-record 2025. 4. 9. 14:05

rsync는 파일 및 디렉토리 동기화 및 백업을 위한 강력한 명령어로, 주로 리눅스, 유닉스 기반 시스템에서 널리 사용됩니다.이 명령어는 네트워크를 통해 파일을 복사하거나 로컬 파일 시스템 내에서 파일을 동기화하는 데 사용됩니다.rsync의 가장 큰 장점은 효율성입니다. 파일이 변경된 부분만 전송하여 전송 시간을 최소화하고, 네트워크 대역폭을 절약할 수 있습니다. rsync 명령어의 기본 사용법과 유용한 옵션들에 대해 설명하고, 실전에서 어떻게 활용할 수 있는지 다뤄보겠습니다.

 

rsync, sftp, scp 장/단점
특징
rsync
sftp
scp
기본 개념
파일 및 디렉토리를 동기화할 수 있는 유틸리티
SSH 기반 파일 전송 프로토콜
SSH를 사용한 파일 복사 프로토콜
주요 장점
- 변경된 부분만 전송하여 효율적
- 보안: SSH 암호화
- 단순성: 사용이 간편
- 네트워크 대역폭 절약
- 플랫폼 독립성
- SSH를 통한 보안 전송
- 다양한 옵션 제공 (압축, 삭제 등)
- 접근 제어 가능
 
주요 단점
- 초기 설정 복잡성
- 속도: 상대적으로 느림
- 실시간 모니터링 부족
- SSH 설정 문제에 영향 받을 수 있음
- 설정 복잡성
- 로그 기록이 제한적
사용 용도
파일 및 디렉토리 동기화, 백업
파일 전송, 특히 보안이 중요한 경우
파일 복사, 원격 서버 간 파일 전송
설치 및 사용 편의성
대부분의 리눅스 배포판에 기본 포함. 설치가 필요 없음
대부분의 리눅스 배포판에 기본 포함. 설치가 필요 없음
대부분의 리눅스 배포판에 기본 포함. 설치가 필요 없음
네트워크 효율성
높은 효율성. 변경된 부분만 전송
중간 정도의 효율성. 파일 전체를 전송
낮은 효율성. 파일 전체를 전송

 

rsync 옵션 목록

rsync는 다양한 옵션을 제공하여 사용자 맞춤형 복사 작업을 수행할 수 있습니다. 아래는 자주 사용되는 주요 옵션들입니다.

  • -a (아카이브 모드): 원본 파일의 권한, 타임스탬프, 심볼릭 링크 등을 보존하면서 복사합니다.
  • -v (verbose): 복사 과정의 자세한 출력을 보여줍니다.
  • -z (압축): 데이터를 전송하기 전에 압축하여 네트워크 대역폭을 절약합니다.
  • -r (recursive): 디렉토리 내부의 파일과 서브디렉토리까지 복사합니다.
  • -u (update): 목적지에 있는 파일이 최신 버전일 경우 복사를 하지 않습니다.
  • --delete: 목적지에서 원본에 존재하지 않는 파일을 삭제합니다.
  • -e ssh: SSH를 통해 원격 서버에 접속하여 파일을 전송합니다.

 

사용방법 예시)
rsync는 파일을 복사하는 방식에서 "보내기" 와 "당기기" 모두 가능합니다. 이 점은 rsync를 유용하게 만드는 특징 중 하나입니다.

# 파일 및 디렉토리 동기화
rsync -av /source/directory/ /destination/directory/
 
# 원격 서버로 파일 복사
rsync -av /local/file user@remote:/remote/directory/
 
# 원격 서버에서 로컬로 파일 복사
rsync -av user@remote:/remote/file /local/directory/
 
# 파일을 동기화하지만 삭제는 하지 않기
rsync -av --ignore-existing /source/directory/ /destination/directory/
 

 

rsync 옵션 설명
 
숏옵션
롱옵션
설명
-v
--verbose
상세한 출력 활성화
 
--info=FLAGS
세밀한 정보 출력
 
--debug=FLAGS
세밀한 디버그 정보 출력
 
--msgs2stderr
디버깅 시 출력 처리 방식 변경
-q
--quiet
비에러 메시지 출력 억제
 
--no-motd
데몬 모드에서 MOTD 출력 억제
-c
--checksum
수정 시간과 크기가 아닌 체크섬을 기준으로 파일 비교
-a
--archive
아카이브 모드; -rlptgoD와 동일 (단, -H, -A, -X 제외)
 
--no-OPTION
기본적으로 포함된 OPTION을 끄기
-r
--recursive
디렉토리 내에서 재귀적으로 파일을 복사
-R
--relative
상대 경로 이름 사용
 
--no-implied-dirs
--relative 사용 시 암시된 디렉토리 전송 제외
-b
--backup
백업 만들기 (--suffix와 --backup-dir 옵션 사용 가능)
 
--backup-dir=DIR
지정된 디렉토리 구조에 백업 생성
 
--suffix=SUFFIX
백업 파일에 접미사 지정 (기본값 ~)
-u
--update
수신측에 더 최신 파일이 있으면 복사하지 않음
 
--inplace
파일을 인플레이스에서 업데이트
 
--append
짧은 파일에 데이터를 추가
 
--append-verify
--append처럼 동작하되 기존 데이터의 체크섬 확인
-d
--dirs
디렉토리만 전송, 재귀적 복사는 하지 않음
-l
--links
심볼릭 링크를 심볼릭 링크로 복사
-L
--copy-links
심볼릭 링크를 참조 파일/디렉토리로 변환
 
--copy-unsafe-links
"위험한" 심볼릭 링크만 변환
 
--safe-links
트리 외부를 가리키는 심볼릭 링크 무시
 
--munge-links
안전한 심볼릭 링크로 변환 (사용 불가)
-k
--copy-dirlinks
디렉토리로 링크된 심볼릭 링크를 참조 디렉토리로 변환
-K
--keep-dirlinks
수신측에서 심볼릭 링크를 디렉토리로 처리
-H
--hard-links
하드 링크 유지
-p
--perms
파일 권한 유지
 
--executability
파일의 실행 가능 여부 유지
 
--chmod=CHMOD
파일/디렉토리 권한 수정
-A
--acls
ACL(액세스 제어 목록) 유지
-X
--xattrs
확장 속성 유지
-o
--owner
파일 소유자 유지 (슈퍼유저만 가능)
-g
--group
그룹 유지 (슈퍼유저만 가능)
 
--devices
장치 파일 유지 (슈퍼유저만 가능)
 
--copy-devices
장치 내용을 일반 파일로 복사
 
--specials
특수 파일 유지
-D
--devices --specials
장치 파일과 특수 파일 유지
-t
--times
수정 시간 유지
 
--omit-dir-times
디렉토리의 시간 정보를 제외
 
--omit-link-times
심볼릭 링크의 시간 정보를 제외
 
--super
수신측에서 슈퍼유저 권한을 시도
 
--fake-super
권한 속성 복원시 xattr 사용
-S
--sparse
희소 파일 효율적으로 처리
 
--preallocate
대상 파일을 쓰기 전에 할당
-n
--dry-run
실제 변경 없이 실행 계획만 출력
-W
--whole-file
델타 전송 알고리즘 없이 전체 파일 복사
-x
--one-file-system
파일 시스템 경계를 넘지 않도록 제한
 
--block-size=SIZE
고정된 체크섬 블록 크기 지정
-e
--rsh=COMMAND
원격 셸 프로그램 지정
 
--rsync-path=PROGRAM
원격 서버에서 실행할 rsync 프로그램 지정
 
--existing
기존 파일만 갱신 (새 파일 생성 안 함)
 
--ignore-existing
기존 파일은 갱신하지 않고 새로운 파일만 복사
 
--remove-source-files
전송 후 원본 파일 삭제 (디렉토리는 제외)
 
--del
--delete-during의 별칭
 
--delete
수신측에서 불필요한 파일 삭제
 
--delete-before
전송 전에 수신측에서 파일 삭제
 
--delete-during
전송 중에 수신측에서 파일 삭제
 
--delete-delay
전송 후에 수신측에서 파일 삭제
 
--delete-after
전송 후에 수신측에서 파일 삭제
 
--delete-excluded
제외된 파일도 수신측에서 삭제
 
--ignore-missing-args
누락된 소스 파일을 오류 없이 무시
 
--delete-missing-args
수신측에서 누락된 소스 파일 삭제
 
--ignore-errors
I/O 오류가 있어도 삭제 진행
 
--force
비어 있지 않은 디렉토리도 삭제 강제
 
--max-delete=NUM
삭제할 파일 최대 개수 제한
 
--max-size=SIZE
지정된 크기보다 큰 파일은 전송하지 않음
 
--min-size=SIZE
지정된 크기보다 작은 파일은 전송하지 않음
 
--partial
부분적으로 전송된 파일을 보존
 
--partial-dir=DIR
부분적으로 전송된 파일을 지정된 디렉토리에 저장
 
--delay-updates
모든 업데이트 파일을 전송 후에 적용
-m
--prune-empty-dirs
빈 디렉토리 체인 제거
 
--numeric-ids
UID/GID 값을 사용자/그룹 이름으로 매핑하지 않음
 
--usermap=STRING
사용자 이름을 매핑하는 사용자 지정 방법
 
--groupmap=STRING
그룹 이름을 매핑하는 방법
 
--chown=USER:GROUP
사용자 및 그룹 이름을 매핑
 
--timeout=SECONDS
I/O 타임아웃 시간을 설정
 
--contimeout=SECONDS
데몬 연결 타임아웃 시간 설정
-I
--ignore-times
파일의 크기와 수정 시간이 일치하는 경우 전송하지 않음
 
--remote-option=OPTION
원격 측에만 옵션 전달
 
--size-only
파일 크기가 일치하는 경우 수정 시간 무시
 
--modify-window=NUM
수정 시간 비교 정확도 감소
-T
--temp-dir=DIR
임시 파일을 지정된 디렉토리에 생성
 
--fuzzy
대상 파일이 없을 경우 유사한 파일을 찾아서 복사
 
--compare-dest=DIR
지정된 디렉토리와 비교하여 파일을 동기화
 
--copy-dest=DIR
변경되지 않은 파일을 복사
 
--link-dest=DIR
변경되지 않은 파일을 하드링크로 연결
-z
--compress
파일 데이터를 전송 중 압축
 
--compress-level=NUM
압축 레벨을 지정
 
--skip-compress=LIST
특정 확장자를 가진 파일은 압축하지 않음
-C
--cvs-exclude
CVS와 동일한 방식으로 자동으로 무시할 파일 지정
-f
--filter=RULE
파일 필터링 규칙 추가
-F
--filter='dir-merge /.rsync-filter'
.rsync-filter 규칙을 반복적으로 적용
 
--exclude=PATTERN
지정된 패턴과 일치하는 파일을 제외
 
--exclude-from=FILE
지정된 파일에서 제외 패턴 읽어오기
 
--include=PATTERN
지정된 패턴과 일치하는 파일을 포함
 
--include-from=FILE
지정된 파일에서 포함 패턴 읽어오기
 
--files-from=FILE
파일 목록을 지정된 파일에서 읽어오기
0
--from0
-from 및 -filter 파일에 대해 구분자를 0으로 설정
-s
--protect-args
공백 분할 없이 와일드카드 특수 문자만 사용
 
--address=ADDRESS
수신측에서 사용할 주소 지정
 
--port=PORT
다른 포트 번호 지정
 
--sockopts=OPTIONS
사용자 지정 TCP 옵션 설정
 
--blocking-io
원격 셸에 대해 블로킹 I/O 사용
-i
--itemize-changes
모든 업데이트에 대한 변경 사항 요약 출력
 
--out-format=FORMAT
업데이트를 지정된 형식으로 출력
 
--log-file=FILE
지정된 파일에 로그 기록
 
--log-file-format=FMT
지정된 형식으로 로그 기록
 
--password-file=FILE
데몬 접근 비밀번호를 지정된 파일에서 읽어오기
 
--list-only
파일 목록만 나열하고 복사는 하지 않음
 
--bwlimit=RATE
네트워크 대역폭 속도 제한
 
`--outbuf=N
L
 
--write-batch=FILE
배치 업데이트를 파일로 기록
 
--only-write-batch=FILE
파일 업데이트 없이 배치만 기록
 
--read-batch=FILE
배치 업데이트를 파일에서 읽어오기
 
--protocol=NUM
구버전 프로토콜 강제 사용
 
--iconv=CONVERT_SPEC
파일명 문자셋 변환 지정
 
--checksum-seed=NUM
고급 기능으로 블록/파일 체크섬 시드 값 설정
-4
0
IPv4 우선 사용
-6
0
IPv6 우선 사용
 
--version
버전 번호 출력
-h
--help
도움말 출력