«   2021/05   »
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
05-08 06:43
관리 메뉴


[명령어] rsync 명령어 본문

* 리눅스

[명령어] rsync 명령어

변군 변군이글루 2013. 6. 18. 00:04

rsync 명령어

rsync  version 2.6.8  protocol version 29
Copyright (C) 1996-2006 by Andrew Tridgell, Wayne Davison, and others.
Capabilities: 64-bit files, socketpairs, hard links, ACLs, xattrs, symlinks, batchfiles,
              inplace, IPv6, 64-bit system inums, 64-bit internal inums

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

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.

 -v, --verbose               increase verbosity
 -q, --quiet                 suppress non-error messages
 -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
 -E, --executability         preserve the file's executability
 -A, --acls                  preserve ACLs (implies --perms)
 -X, --xattrs                preserve extended attributes (implies --perms)
     --chmod=CHMOD           change destination 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              ignore non-existing files on receiving side
     --ignore-existing       ignore files that already exist on receiving side
     --remove-sent-files     sent files/symlinks are removed from sending side
     --del                   an alias for --delete-during
     --delete                delete files that don't exist on the sending side
     --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 on the receiving side
     --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
     --log-format=FORMAT     output filenames using the specified format
     --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
 -4, --ipv4                  prefer IPv4
 -6, --ipv6                  prefer IPv6
     --version               print version number
(-h) --help                  show this help (-h works with no other options)

Use "rsync --daemon --help" to see the daemon-mode command-line options.
Please see the rsync(1) and rsyncd.conf(5) man pages for full documentation.
See http://rsync.samba.org/ for updates, bug reports, and answers

  • 프로필사진 Favicon of https://sangchul.kr 변군 변군이글루 2013.06.18 00:05 신고 rsync란?
    rcp(remote file copy)의 강화형으로 “rsync 알고리즘” 이라는 원격상의 파일의 전송이나 동기화를 가장 빠른 속도로 구현하는 방법을 쓰는 오픈 소스 유틸리티로 GPL에 기초해 자유로이 이용이 가능합니다.

    1. rsync의 특징
    1) 디렉토리 트리나 파일시스템 전체를 갱신할 수 있습니다
    2) 옵션에 따라 소프트 링크나 파일 소유자, 퍼미션, 디바이스, 타임스태프 유지가 가능합니다.
    3) 내부 파이프라인이 복잡한 파일의 레이턴시를 줄입니다.
    4) 전송에 rsh, ssh 혹은 다이렉트 소켓을 쓰는것이 가능합니다.
    5) 이상적 미러링을 가능케 하는 anonymous rsync를 지원합니다.
    6) 특별한 권한 없이도 실행이 가능합니다.

    2. rsync 설치
    redhat 배포판 에는 rsync-2.x.x가 기본으로 설치되어 있습니다.
    설치가 안 되어 있다면 http://rsync.samba.org/ftp/rsync/에서 최신버전을 다운받습니다.
    1) 설치 확인(redhat 배포판의 경우)
    # rpm -qa |grep rsync
    위와 같이 해당 서버에 rsync가 설치되어 있는지를 확인합니다.
    2) 소스 설치(소스로 설치하는 경우)
    # tar zxvf rsync-2.4.6.tar.gz
    # ./configure && make && make install

    3. rsync 설정
    rsync가 사용하는 프로토콜은 rsh나 ssh인데 이것을 원치 않는 경우는 873포트를 이용 할 수 있습니다. rsync가 873포트를 사용하느냐, rsh나 ssh를 사용하느냐에 따라 설정 내용이 약간 틀려집니다.
    873포트를 사용할 경우 /etc/inetd.conf(redhat7.0 이전) or
    /etc/xinetd.d/rsync(redhat7.0이후)을 설정하고 /etc/rsyncd.conf를 만들어 줍니다.

    1) 873포트를 사용할 경우
    가) /etc/inetd.conf 설정(redhat7.0 이전일 경우)
    rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon
    --> /etc/rc.d/init.d/inetd start 서비스를 restart 해준다.

    나) /etc/xinetd.d/rsync 설정(redhat7.0 이후일 경우)
    service rsync
    disable = no
    socket_type = stream
    wait = no
    user = root
    server = /usr/bin/rsync
    server_args = --daemon
    log_on_failure += USERID

    --> /etc/rc.d/init.d/xinetd restart 서비스를 restart 해준다
    다) /etc/services파일에도 아래와 갈은 내용이 없으면 추가해 주도록 한다.
    phonebook 767/tcp
    rsync 873/tcp
    rsync 873/udp
    telnets 992/tcp

    라) 데몬확인(netstat -tap)
    # netsyat -tap
    tcp 0 0 linux4:32774 *:* LISTEN
    tcp 0 0 *:rsync *:* LISTEN
    tcp 0 0 *:sunrpc *:* LISTEN

    마) /etc/rsyncd.conf
    path = /home/www
    comment = webserver1
    uid = nobody
    gid = nobody
    use chroot = yes
    read only = yes
    hosts allow =
    max connections = 3
    timeout 600

    [www] 서비스명
    path 서비스할 디렉토리위치
    comment 설명
    uid 파일전송하는 사용자의 id. 기본값은 nobody
    gid 파일전송하는 사용자의 그룹 id. 기본값은 nobody
    use chroot 위의 path를 root 디렉토리로 사용. (보안상 필요)
    read only 읽기전용(클라이언트에서 서버로 올리는 경우에는 read only=no 로 설정)
    hosts allow 호스트별 접속허용. 기본값은 all host입니다. 접근 허용할 호스트의 ip를 적어주시면 됩니다.(보안상 필요)
    max connections 동시접속자수.
    timeout 클라이언트에서 접근시 타임아웃시간. anonymous 로 운영하는 경우 설정을해야 클라이언트가 죽었을 때 서버에서 접속을 해제할 수 있음.

    2) ssh, rsh 포트를 사용하는 경우
    inetd나 xinetd를 수정하지 않아도 되고, /etc/rsyncd.conf를 만들어 주지 않아도 됩니다. 특별한 설정없이 클라이언트에서 사용하면 됩니다.

    4. rsync의 사용법
    우선 rsync서버설정이 된 것을 webserver1(www1.linuxone.co.kr)이라고 하고, 그 서버로부터 정보를 가져와 동기화 시킬 서버를 webserver2(www2.linuxone.co.kr) 라고 가정
    1) 873포트 사용시
    # rsync - 옵션 서버::디렉토리 동기화 위치
    가) webserver2의 /home/www로 webserver1의 /home/www내용을 동기화 시키려고 한다면, 이렇게 하면 됩니다.
    예) webserver2에서
    # rsync -avz www1.linuxone.co.kr::/home/www /home/www
    - avz옵션은 아래와 같습니다.
    -a 는 archive mode (심볼릭 링크, 속성, 퍼미션, 소유권 등 보존)
    -v verbose (상세하게 보여줌)
    -z compress (전송시 압축을 함)
    나) webserver2에서 webserver1의 내용을 가져오면서 webserver1에 없는 내용은 webserver2에서 삭제함
    예) webserver2에서
    # rsync -avz -delete www1.linuxone.co.kr::/home/www
    2) ssh, rsh 사용시
    클라이언트에서 다음과 같이 사용만 하면 됩니다.
    # rsync - 옵션 -e ssh(rsh) 서버:디렉토리 동기화 위치
    가) webserver2의 /home/www로 webserver1의 /home/www내용을 동기화 시키려고 한다면, 이렇게 하면 됩니다.
    예) webserver2에서
    # rsync -avz -e ssh www1.linuxone.co.kr:/home/www /home/www
    나) ssh를 사용하려면 비밀번호를 입력해야하는데 이것은 인증키를 생성해서 번거로움을 없앨 수 있습니다.
    예) ssh-keygen -d 라고한면
    ~/.ssh/id_dsa.pub 라는 파일이 생성됨
    이걸 원본 데이터가 있는 서버에 저장함
    scp -p .ssh/id_dsa.pub root@호스트명:~/.ssh/authorized_keys2라고 등록하면 가능합니다.
    ※ crontab 에 다음과 같이 등록하면 더욱 좋습니다.
    rsync -avPz --delete --stats -l -t -e ssh root@webserver1:/home/ /backup
    - 저렇게 할 경우 압축을 하고, 퍼미션 및 소유권은 그대로 유지하며, 심벌릭 링크는 심벌릭 링크 그대로 백업하고, 전송 속도 및시간을 출력해주고, 마지막에 전송된 상태를 출력 해줌.
    --delete는 옵션은 원본에는 없지만 그 전에 받은 백업본에 있을 경우 삭제해줌. 그래서, 원본과 항상 똑같이 백업이 되도록 함

    5. crontab에 등록
    모든 내용을 crontab에 등록합니다.
    # crontab -e
    10 04 * * * "rsync -avz -e ssh www1.linuxone.co.kr:/home/www /home/www"
    매일 04시 10분에 www1.linuxone.co.kr의 /home/www 를 자신의 home/www로 동기화 시킵니다.

    6. rsync의 주요옵션
    -v 진행상황을 상세히 보여줌
    -r 지정한 디렉토리의 하위 디렉토리까지 재귀적으로 실행
    -l 소프트링크 보존
    -H 하드링크 보존
    -p 버전속성 보존
    -o 소유속성 보존(루트)
    -g 그룹속성 보존
    -t 타임스탬프 보존
    -D 디바이스 파일보존(루트)
    -z 데이터압축 전송
    -u 추가된 파일만 전송
    -b 낡은 파일은 ~가 붙음
    -u 새로운 파일을 덮어쓰지 않음
    -c 서버와 클라이언트 파일크기를 세밀히 체크
    -e ssh(rsh) 전송암호화
    --existing : 추가된 파일은 전송하지않고 갱신된 파일만 전송
    --delete : 서버에 없는 파일은 클라이언트에서도 삭제
    --exclude 'PATTERN' : 패턴과 맞는 파일만 전송
    --stats : 결과를 보고
    --daemon : 대몬모드로 운영함(이건 inetd.conf에 지정할 때 필요함)

    ※ 참고사항
    ☞ -e 옵션은 rsh나 ssh를 사용할 때 써주는 옵션입니다.
    ☞ 873포트를 사용할 때는 :: 두 개를, rsh나 ssh를 사용할 때는 : 한 개만 써줍니다.
    ☞ rsync -avz www1.linuxone.co.kr:home/www1/ /home/www2 의 내용은
    ☞ www1.linuxone.co.kr의/home/www1 안의 내용을 /home/www2 디렉토리로 옮기는
    것인데 만약 /home/www1/ 라고하면 원래 www1은 그 디렉토리 자체까지 포함해서
    가져옵니다. 그렇지만 www1 뒤에 / 가붙어서 /home/www1/ 라고 표시하면 그 디렉
    토리안에 있는 내용만 가져옵니다.
댓글쓰기 폼