rsync 사용법
- Development/Tools
- 2021. 6. 21.
rsync 사용법
Linux/Unix/OSX의 툴들 중, 파일관리/동기화/백업에 유용한 툴로 rsync를 뺴놓을 수 없을 것이다. GUI 기반의 상용 툴들도 많지만, rsync만으로도 개인 데이터 로컬/리모트 백업 등의 작업을 수행하는데는 어느 정도 충분하다고 생각한다.
rsync
rsync(remote sync)는 이름이 나타내는 바와 같이 원격 시스템과의 데이터 동기화를 지원하는 프로그램이다. 변경이 있는 파일만 선별적으로 복사하기 때문에, 전체 디렉토리들을 백업/복사할 경우 일반적인 복사 방법보다 효율적이고 빠르게 동작한다. 뿐만 아니라, 데이터를 압축하여 송/수신하므로 적은 대역폭이 사용된다.
대부분의 리눅스 계열 및 OSX에는 기본적으로 설치가 되어 있지만, 만약 설치를 해야 한다면 아래와 같이 설치해보자.
$ yum install rsync
또는
$ apt-get install rsync
rsync 기본 문법
rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.
Usage: rsync [OPTION]... SRC [SRC]... DEST
or rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
or rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
or rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
or rsync [OPTION]... [USER@]HOST:SRC [DEST]
or rsync [OPTION]... [USER@]HOST::SRC [DEST]
or rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect
to an rsync daemon, and require SRC or DEST to start with a module name.
rsync는 로컬 -> 로컬, 로컬 -> 리모트, 로컬 <- 리모트간 파일복사를 지원한다. 위의 인용에서 보다시피 리모트 서버를 지정하는 경우, 호스트명:경로를 지정하면 된다. 접속 주소 표기시 아래와 같은 차이점은 있으니 참고하면 될 듯 하다.
- : - shell 기반
- :: - daemon 기반
rsync 주요 옵션
rsync가 제공하는 옵션은 아래와 같다.
-v, --verbose increase verbosity
-q, --quiet suppress non-error messages
--no-motd suppress daemon-mode MOTD (see manpage caveat)
-c, --checksum skip based on checksum, not mod-time & size
-a, --archive archive mode; same as -rlptgoD (no -H)
--no-OPTION turn off an implied OPTION (e.g. --no-D)
-r, --recursive recurse into directories
-R, --relative use relative path names
--no-implied-dirs don't send implied dirs with --relative
-b, --backup make backups (see --suffix & --backup-dir)
--backup-dir=DIR make backups into hierarchy based in DIR
--suffix=SUFFIX set backup suffix (default ~ w/o --backup-dir)
-u, --update skip files that are newer on the receiver
--inplace update destination files in-place (SEE MAN PAGE)
--append append data onto shorter files
-d, --dirs transfer directories without recursing
-l, --links copy symlinks as symlinks
-L, --copy-links transform symlink into referent file/dir
--copy-unsafe-links only "unsafe" symlinks are transformed
--safe-links ignore symlinks that point outside the source tree
-k, --copy-dirlinks transform symlink to a dir into referent dir
-K, --keep-dirlinks treat symlinked dir on receiver as dir
-H, --hard-links preserve hard links
-p, --perms preserve permissions
--executability preserve the file's executability
--chmod=CHMOD affect file and/or directory permissions
-o, --owner preserve owner (super-user only)
-g, --group preserve group
--devices preserve device files (super-user only)
--specials preserve special files
-D same as --devices --specials
-t, --times preserve times
-O, --omit-dir-times omit directories when preserving times
--super receiver attempts super-user activities
-S, --sparse handle sparse files efficiently
-n, --dry-run show what would have been transferred
-W, --whole-file copy files whole (without rsync algorithm)
-x, --one-file-system don't cross filesystem boundaries
-B, --block-size=SIZE force a fixed checksum block-size
-e, --rsh=COMMAND specify the remote shell to use
--rsync-path=PROGRAM specify the rsync to run on the remote machine
--existing skip creating new files on receiver
--ignore-existing skip updating files that already exist on receiver
--remove-source-files sender removes synchronized files (non-dirs)
--del an alias for --delete-during
--delete delete extraneous files from destination dirs
--delete-before receiver deletes before transfer (default)
--delete-during receiver deletes during transfer, not before
--delete-after receiver deletes after transfer, not before
--delete-excluded also delete excluded files from destination dirs
--ignore-errors delete even if there are I/O errors
--force force deletion of directories even if not empty
--max-delete=NUM don't delete more than NUM files
--max-size=SIZE don't transfer any file larger than SIZE
--min-size=SIZE don't transfer any file smaller than SIZE
--partial keep partially transferred files
--partial-dir=DIR put a partially transferred file into DIR
--delay-updates put all updated files into place at transfer's end
-m, --prune-empty-dirs prune empty directory chains from the file-list
--numeric-ids don't map uid/gid values by user/group name
--timeout=TIME set I/O timeout in seconds
-I, --ignore-times don't skip files that match in size and mod-time
--size-only skip files that match in size
--modify-window=NUM compare mod-times with reduced accuracy
-T, --temp-dir=DIR create temporary files in directory DIR
-y, --fuzzy find similar file for basis if no dest file
--compare-dest=DIR also compare destination files relative to DIR
--copy-dest=DIR ... and include copies of unchanged files
--link-dest=DIR hardlink to files in DIR when unchanged
-z, --compress compress file data during the transfer
--compress-level=NUM explicitly set compression level
-C, --cvs-exclude auto-ignore files the same way CVS does
-f, --filter=RULE add a file-filtering RULE
-F same as --filter='dir-merge /.rsync-filter'
repeated: --filter='- .rsync-filter'
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
--include=PATTERN don't exclude files matching PATTERN
--include-from=FILE read include patterns from FILE
--files-from=FILE read list of source-file names from FILE
-0, --from0 all *-from/filter files are delimited by 0s
--address=ADDRESS bind address for outgoing socket to daemon
--port=PORT specify double-colon alternate port number
--sockopts=OPTIONS specify custom TCP options
--blocking-io use blocking I/O for the remote shell
--stats give some file-transfer stats
-8, --8-bit-output leave high-bit chars unescaped in output
-h, --human-readable output numbers in a human-readable format
--progress show progress during transfer
-P same as --partial --progress
-i, --itemize-changes output a change-summary for all updates
--out-format=FORMAT output updates using the specified FORMAT
--log-file=FILE log what we're doing to the specified FILE
--log-file-format=FMT log updates using the specified FMT
--password-file=FILE read password from FILE
--list-only list the files instead of copying them
--bwlimit=KBPS limit I/O bandwidth; KBytes per second
--write-batch=FILE write a batched update to FILE
--only-write-batch=FILE like --write-batch but w/o updating destination
--read-batch=FILE read a batched update from FILE
--protocol=NUM force an older protocol version to be used
-E, --extended-attributes copy extended attributes
--cache disable fcntl(F_NOCACHE)
-4, --ipv4 prefer IPv4
-6, --ipv6 prefer IPv6
--version print version number
(-h) --help show this help (-h works with no other options)
이 옵션들 중, 주요 옵션들 위주로 축약하면 다음과 같다.
- -a, --archive: -rlptgoD와 동일, 즉 rlptgoD가 무엇인지 살펴보면 되고, -a옵션을 지정한 경우는 rlptgoD를 별도 지정할 필요가 없다.
- -r, --recursive: 하위 디렉토리 포함하여 재귀 탐색
- -l, --links: symbolic link를 그대로 보존
- -p, --perms: permission을 그대로 보존
- -t, --times: timestamp를 그대로 보존
- -g, --group: group 속성을 그대로 보존
- -o, --owner: owner 속성을 그대로 보존
- -D, --device: 디바이스 파일 보존
- -v, --verbose: 복사/동기화시 상세 내용 출력
- -h, --human-readable: 사람이 읽기 쉬운 메시지로 출력
- -z, --compress: 데이터 복제시 압축하여 처리
결론적으로, 개인적으로 많이 사용하는 옵션은 위 옵션의 조합이다. avzh
rsync 사용 예
// 로컬 데이터 백업
$ rsync -avzh /data /backup
// 로컬의 데이터를 리모트로 복제
$ rsync -avzh /data 192.168.1.100:/backup
// 사용자 계정을 지정하여 전송
$ rsync -avzh /data user@192.168.1.100:/backup
// ssh 포트가 다를 경우 지정
$ rsync -avzh -e 'ssh -p 8888' /data 192.168.1.100:/backup
// 백업 서버를 로컬로 복제
$ rsync -avzh 192.168.1.100:/backup /data
'Development > Tools' 카테고리의 다른 글
맥/리눅스에서 반복작업은 crontab으로 (0) | 2022.01.31 |
---|---|
유튜브 밴스드(Youtube Vanced) - 광고없이 유튜브를 볼 수 있다? (0) | 2022.01.02 |
Tomcat SSL인증서 설정시 APR 관련 에러 발생시 (0) | 2021.10.24 |
온라인에서 쉽게 자소서, 블로그 글자수 세기 (0) | 2021.09.27 |
VI에서 개행 문자(^M) 삭제하기 (0) | 2021.01.03 |
Docker 기반 SonarQube 실행하기 - 정적 분석의 준비 (4) | 2020.12.23 |
웹브라우저 완소 프로그램 - onetab (6) | 2020.12.04 |
Setting up VIM as IDE (0) | 2020.11.13 |