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
|
도움말 출력
|