OS/LINUX

[명령어] rsync 이해

투칼론 2019. 8. 20. 20:22
반응형

데이타 마이그레이션 하면서 rsync 명령어를 자주 사용하는데, 아래와 같은 옵션으로 주용사용함.

$ rsync -lrv /home1/data root@10.xx.xx.xx:/home1  --progress  --log-file=./rsync_2019.log


$ sshpass -p password  rsync -lrv /home1/data root@10.xx.xx.xx:/home1  --progress  --log-file=./rsync_2019.log 

 

 



 rsync 명령은 파일과 디렉토리를 로컬 및 원격으로 동기화 (또는 복사)하는 데 사용됩니다. rsync의 중요한 기능 중 하나는“ 

델타 전송 알고리즘

 ”에서 작동한다는 것입니다. 즉, 전체 파일을 복사하는 대신 소스에서 대상으로 변경 사항 만 동기화하거나 복사하여 궁극적으로 네트워크를 통해 전송되는 데이터의 양을 줄입니다. Linux 사용자는 일반적으로 rsync 명령을 사용하여 일상적인 백업, 미러링 및 복원 활동을 관리합니다. 로컬 시스템에서 원격 시스템으로 파일을 동기화하는 동안 SSH와 같은 원격 쉘을 사용하며 시스템의 모든 사용자는 루트 또는 sudo 권한이 필요하지 않으므로 rsync 명령을 사용할 수 있습니다.

 


sync 명령은 운영 체제와 같은 모든 UNIX 및 Linux에서 사용할 수 있습니다. CentOS & RHEL OS를 최소한으로 설치하면 rsync 패키지가 기본 설치의 일부가 아니므로 CentOS & RHEL에 rsync를 설치하려면 yum 명령 아래를 실행하십시오.

~] # yum 설치 rsync -y

Debian Like operating systems (Ubuntu & Linux Mint)에서 아래 apt 명령을 사용하여 rysnc 도구를 설치하십시오.

~] # apt 설치 rsync -y

rsync 명령의 구문 :

로컬 동기화 : 

# rsync {options} {Source} {Destination}

원격 동기화 Pull : 

# rsync {options} <User_Name>@<Remote-Host>:<Source-File-Dir> <Destination>

원격 동기화 Push : 

# rsync <옵션> <Source-Files-Dir> <User_Name>@<Remote-Host>:<Destination>

rsync 명령에서 일반적으로 사용되는 옵션 중 일부는 다음과 같습니다.

  • -v, –verbose 상세 출력
  • -q, –quiet 메시지 출력 억제
  • -a, –archive 아카이브 파일 및 동기화 중 디렉토리 (-a는 다음 옵션 -rlptgoD와 동일)
  • -r, –recursive 동기화 파일 및 디렉토리 재귀
  • -b, –backup 동기화 중에 백업을 수행합니다
  • -u, –update 대상 파일이 더 최신 인 경우 소스에서 대상으로 파일을 복사하지 않습니다.
  • -l, –links 동기화 중에 심볼릭 링크를 심볼릭 링크로 복사
  • -n, –dry-run은 동기화없이 시험 실행을 수행합니다.
  • -e, –rsh=COMMAND rsync에서 사용할 원격 쉘을 언급
  • -z, –compress 압축 파일 데이터
  • -h, –human-readable 읽을 수있는 형식으로 출력 번호를 표시합니다.
  • –progress는 전송 중 동기화 진행률을 표시합니다

rsync 명령의 유용한 예를 살펴 보겠습니다.

 

 

예1) 로컬로 파일 복사 또는 동기화 (rsync -zvh)

pkumar 사용자의 홈 디렉토리에서 /opt/back 폴더로 파일을 복사하고, 아래의 rsync 명령을 실행

 

[root@gateway ~]# rsync -zvh /home/pkumar/OpenStack-Networking.pdf /opt/backup
OpenStack-Networking.pdf
sent 4.09M bytes  received 35 bytes  2.73M bytes/sec
total size is 6.15M  speedup is 1.50
[root@gateway ~]#

예2) 로컬로 디렉토리 복사 또는 동기화 (rsync -zavh)

pkumar 사용자의 홈 디렉토리를 /opt/backup 폴더로 복사 또는 동기화하고, -zavh 옵션으로 아래 rsync 명령을 실행
[root@gateway ~]# rsync -zavh /home/pkumar /opt/backup
sending incremental file list
pkumar/
pkumar/.bash_logout
pkumar/.bash_profile
pkumar/.bashrc
pkumar/OpenStack-Networking.pdf

sent 4.09M bytes  received 96 bytes  8.19M bytes/sec
total size is 6.15M  speedup is 1.50
[root@gateway ~]#

디렉토리가 복사되었는지 여부를 확인하고, 아래 명령을 실행

[root@gateway ~]# ls -ld /opt/backup/*
-rwx------. 1 root   root   6153239 Apr  7 00:25 /opt/backup/OpenStack-Networking.pdf
drwx------. 2 pkumar pkumar      90 Apr  7 00:25 /opt/backup/pkumar
[root@gateway ~]#
보시다시피“pkumar”디렉토리가 대상 폴더에 생성되고 그 내용도 복사됩니다. 위의 예에서 소스 폴더 (/ home / pkumar /) 뒤에 trail /를 사용하면 rsync 명령은 대상에 pkumar 디렉토리를 만들지 않지만 내용 만 복사합니다.
[ root @ gateway ~] # rsync -zavh /home/pkumar/ /opt/backup

예3) 파일 및 디렉토리를 재귀적으로 로컬로 복사 (rsync -zrvh 또는 rsync -zavh)

pkumar 사용자 홈 디렉토리 내에 여러 파일과 디렉토리가 있다고 가정하고, rsync 명령 아래를 사용하여 파일과 디렉토리를 재귀 적으로 복사하고, -a 또는 -r 옵션을 사용하여 파일과 디렉토리를 재귀적으로 복사하십시오.

참고

 : rsync 명령에서  

-a

 옵션은 복사 또는 동기화 중 아카이브에 사용되며 아카이브와 별도로 -a 옵션은 다음에 사용됩니다.
  • 파일과 디렉토리를 재귀적으로 복사
  • 심볼릭 링크를 심볼릭 링크로 복사
  • 권한 유지
  • 그룹 유지
  • 수정 시간 유지
  • 소유권 유지
[ root @ gateway ~] # rsync -zrvh / home / pkumar / opt / backup
또는 
[ root @ gateway ~] # rsync -zavh / home / pkumar / opt / backup

예4) 파일 및 디렉토리를 로컬에서 원격 시스템으로 복사 또는 동기화

"

/home/pkumar/techi

폴더를 로컬 컴퓨터에서 /opt 아래의 원격 컴퓨터 (192.168.1.29) 로 복사한다고 가정하겠습니다.

 

[root@gateway ~]# rsync -zarvh /home/pkumar/techi root@192.168.1.29:/opt
root@192.168.1.29's password:
…………………………………………………………
techi/OTRS/
techi/OTRS/Database-Selection-OTRS-Installation-CentOS7.jpg
techi/OTRS/Install-OTRS-Accept-License.png
techi/OTRS/Install-OTRS-CentOS7-RHEL7.jpg
techi/OTRS/mysql-secure-installation-centos7-part2.jpg

sent 34.85M bytes  received 2.65K bytes  6.34M bytes/sec
total size is 37.77M  speedup is 1.08
……………………………………………………………
[root@gateway ~]#

예5) 원격 시스템에서 로컬 시스템으로 파일 및 디렉토리 복사 또는 동기화

원격 시스템 (192.168.1.29)에서 로컬 시스템으로 파일과 디렉토리를 복사하려고한다고 가정합니다. 아래 예 에서 로컬 시스템의 /tmp 폴더 아래에있는 

"/opt/rpms_db

라는 원격 폴더를 복사하고 있습니다.

 

[root@gateway ~]# rsync -zarvh root@192.168.1.29:/opt/rpms_db /tmp
root@192.168.1.29's password:
receiving incremental file list
……………………………………………………………
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
rpms_db/pytalloc-2.1.13-1.el7.x86_64.rpm
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm

sent 484 bytes  received 15.45M bytes  1.07M bytes/sec
total size is 16.37M  speedup is 1.06
[root@gateway ~]#
위의 명령은 자동으로 로컬 컴퓨터의 /tmp 폴더에“rpms_db”폴더를 만듭니다.

 

[root@gateway ~]# rsync -zarvh -e ssh  root@192.168.1.29:/opt/rpms_db  /tmp
root@192.168.1.29's password:
receiving incremental file list
………………………………………………………………………………
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
rpms_db/pytalloc-2.1.13-1.el7.x86_64.rpm
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm

sent 484 bytes  received 15.45M bytes  1.82M bytes/sec
total size is 16.37M  speedup is 1.06
[root@gateway ~]#

예6) 동기화 중 원격 쉘 지정 (rsync -e ssh)

rsync 명령에서 동기화하는 동안 ssh와 같은 원격 셸을 지정할 수 있습니다. rsync를 통해 소스와 대상 컴퓨터 간의 보안 통신을 사용하고 ssh를 원격 셸로 사용해야한다고 가정 해 보겠습니다. 예는 다음과 같습니다.

 

[root@gateway ~]# rsync -zarvh -e ssh  root@192.168.1.29:/opt/rpms_db  /tmp
root@192.168.1.29's password:
receiving incremental file list
………………………………………………………………………………
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
rpms_db/pytalloc-2.1.13-1.el7.x86_64.rpm
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm

sent 484 bytes  received 15.45M bytes  1.82M bytes/sec
total size is 16.37M  speedup is 1.06
[root@gateway ~]#

예7) rsync 명령 출력에서 ​​동기화 진행률 표시

rsync 명령에서 동기화 또는 복사 진행률을 보려면 " 

–progress

 " 를 사용하십시오 . 예는 다음과 같습니다.

 

[root@gateway ~]# rsync -avh --progress root@192.168.1.29:/opt/rpms_db /tmp
root@192.168.1.29's password:
receiving incremental file list
……………………………………………………………………………………………………..
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
          2.84M 100%   35.22MB/s    0:00:00 (xfr#6, to-chk=18/25)
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
         92.50K 100%    1.13MB/s    0:00:00 (xfr#7, to-chk=17/25)
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
          2.56M 100%   14.44MB/s    0:00:00 (xfr#17, to-chk=7/25)
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
        696.47K 100%    3.71MB/s    0:00:00 (xfr#19, to-chk=5/25)
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
          5.07M 100%   19.90MB/s    0:00:00 (xfr#20, to-chk=4/25)
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
        210.98K 100%  844.42kB/s    0:00:00 (xfr#21, to-chk=3/25)
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
        167.51K 100%  667.70kB/s    0:00:00 (xfr#22, to-chk=2/25)
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
        458.38K 100%    1.77MB/s    0:00:00 (xfr#23, to-chk=1/25)
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm
        282.33K 100%    1.09MB/s    0:00:00 (xfr#24, to-chk=0/25)

sent 484 bytes  received 16.38M bytes  3.64M bytes/sec
total size is 16.37M  speedup is 1.00
[root@gateway ~]#
 

예8) 파일을 복사하지 않고 디렉토리 구조 복사

파일을 건너 뛰는 디렉토리 구조를 로컬 시스템에서 원격으로 또는 그 반대로 복사하려는 시나리오가 있습니다."/ home / pkumar"의 디렉토리 구조를 로컬 컴퓨터에서 / opt 폴더 아래의 원격 컴퓨터 (192.168.1.29)로 복사한다고 가정하겠습니다.

 

root@gateway ~]# rsync -av -f"+ */" -f"- *" /home/pkumar root@192.168.1.29:/opt/
root@192.168.1.29's password:
building file list ... done
………………………………………………
pkumar/

sent 43 bytes  received 19 bytes  17.71 bytes/sec
total size is 0  speedup is 0.00
[root@gateway ~]#

예9) scp에서 실패한 후 대용량 파일 전송 재개

Linux 관리자 프로파일에는 scp 명령을 사용하여 더 큰 파일을 복사하기 시작한 시나리오가 있지만 중간에 종료되어 크기와 시간이 많이 걸리므로 scp를 사용하여 다시 복사 할 수 없습니다.따라서이 상황에서 rsync 명령은 파일을 중단 또는 종료 된 위치에서 파일 복사를 시작할 수 있으므로 사용할 수 있습니다. 즉, rsync는 scp 명령을 사용하여 부분적으로 복사 된 파일을 전송할 수 있습니다. 예는 아래와 같습니다.

 

[root@gateway ~]# scp root@192.168.1.29:/root/ubuntu-18.04-desktop-amd64.iso /opt
root@192.168.1.29's password:
ubuntu-18.04-desktop-amd64.iso                   28%  526MB  61.5MB/s   00:21 ETA
^CKilled by signal 2.
[root@gateway ~]#
[root@gateway ~]# rsync -P --rsh=ssh root@192.168.1.29:/root/ubuntu-18.04-desktop-amd64.iso /opt
root@192.168.1.29's password:
ubuntu-18.04-desktop-amd64.iso
  1,921,843,200 100%   18.47MB/s    0:01:39 (xfr#1, to-chk=0/1)
[root@gateway ~]#
 

예10) 소스에없는 경우 대상에서 파일 삭제 (–delete)

소스에서 대상으로 및 소스에서 파일을 이미 동기화 한 경우 파일을 삭제 한 경우 –delete 옵션을 사용하여 rsync 명령이 대상에서 파일을 삭제하도록 할 수 있습니다. 예는 다음과 같습니다.

 

[root@app ~]# rsync -avz --delete /opt/rpms_db root@192.168.1.28:/tmp/rpms_db
root@192.168.1.28's password:
sending incremental file list
deleting rpms_db/apr-util-1.5.2-6.el7.x86_64.rpm
deleting rpms_db/apr-1.4.8-3.el7_4.1.x86_64.rpm
rpms_db/

sent 862 bytes  received 105 bytes  276.29 bytes/sec
total size is 15,947,152  speedup is 16,491.37
[root@app ~]#

예11) 파일 전송 크기 제한 (–max-size)

rsync를 사용하여 큰 파일을 전송하거나 복사하지 않으려면 '– 

max-size = {specify-size-here}'

 옵션을 사용 하십시오 . 파일을 전송하고 싶지 않다고 가정합니다 크기가 500K 이상입니다.참고 : 크기를 MB 단위로 지정하려면 M을 사용하고 GB에 대해서는 G를 사용하십시오.
[ root @ app ~] # rsync -avz --max-size = '500K'/opt/rpms_db root@192.168.1.28:/ tmp

예12) 대상에서 수정 된 파일을 동기화 / 복사하지 마십시오

대상에서 파일을 수정 한 일부 시나리오가 있으며 동기화하는 동안 수정 된 파일을 소스에서 덮어 쓰고 싶지 않으므로 rsync 명령의 

-u

 옵션을 사용하여 쉽게 수행 할 수 있습니다.

 

[root@gateway ~]# rsync -avzu root@192.168.1.29:/opt/techi /home/pkumar/techi
root@192.168.1.29's password:
receiving incremental file list

sent 37 bytes  received 4,960 bytes  1,427.71 bytes/sec
total size is 37,771,649  speedup is 7,558.87
[root@gateway ~]#
 

예13) 동기화 후 소스에서 파일 제거 (–remove-source-files)

rsync 명령을 사용하여 동기화가 완료되면 소스에서 파일을 삭제한다고 가정 해 봅시다. 아래 예에서 로컬 시스템 " 

/home/pkumar/techi.tgz

 "의 폴더는 원격 시스템 (192.168.1.29)에 동기화되며 동기화가 완료되면 소스에서 파일이 삭제됩니다.

 

[root@gateway ~]# rsync --remove-source-files -zvh /home/pkumar/techi.tgz root@192.168.1.29:/opt
root@192.168.1.29's password:
techi.tgz
sent 597 bytes  received 43 bytes  182.86 bytes/sec
total size is 518  speedup is 0.81
[root@gateway ~]#
[root@gateway ~]# ls -l /home/pkumar/techi.tgz
ls: cannot access /home/pkumar/techi.tgz: No such file or directory
[root@gateway ~]#

예14) 실제 동기화 전 Dry run rsync 명령

rsync 명령의 동작과 관련이없는 상황이있을 수 있으므로 그러한 경우 rsync를 Dry run하는 것이 좋습니다

 

[root@gateway ~]# rsync --dry-run --remove-source-files -zvh /home/pkumar/projects.tar  root@192.168.1.29:/opt
root@192.168.1.29's password:
projects.tar

sent 51 bytes  received 19 bytes  7.37 bytes/sec
total size is 981.24M  speedup is 14,017,682.29 (DRY RUN)
[root@gateway ~]#

예15) rsync와 동기화하는 동안 파일 포함 및 제외

특정 유형의 파일 및 디렉토리를 복사 또는 동기화하고 특정 유형의 파일 또는 디렉토리를 제외하려는 경우가 있습니다. Rsync 명령은 포함 및 제외 옵션을 모두 지원합니다.아래 예제에서는 pdf 및 rpm 유형의 파일을 복사하고 png 파일 유형을 제외하려고합니다.

 

[root@gateway ~]# rsync -avz -e ssh --include '*.pdf *.rpm' --exclude '*.png' /home/pkumar/techi root@192.168.1.29:/opt
root@192.168.1.29's password:
sending incremental file list
techi/
techi/OpenStack-Networking.pdf
techi/httpd-2.4.6-88.el7.centos.x86_64.rpm
techi/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
techi/postfix-2.10.1-7.el7.x86_64.rpm

sent 9,469,912 bytes  received 96 bytes  2,705,716.57 bytes/sec
total size is 11,647,907  speedup is 1.23
[root@gateway ~]#
 

예16) rsync (–bwlimit = <KB/s>)에서 데이터 전송 속도 제한

rsync 명령에서 한 시스템에서 다른 시스템으로의 데이터 전송에 대한 대역폭 제한을 설정할 수 있습니다. rsync 명령에서 ' 

–bwlimit=<KB/S>

 '옵션을 사용하여 데이터 전송 속도를 제한하십시오.최대 데이터 전송 속도 (속도)를 rsync로 600KB/s로 설정한다고 가정합니다. 예는 다음과 같습니다.

 

[root@gateway ~]# rsync -avz --progress --bwlimit=600 /home/pkumar/techi root@192.168.1.29:/opt
root@192.168.1.29's password:
sending incremental file list
techi/
techi/OpenStack-Networking.pdf
6,153,239 100%  910.02kB/s    0:00:06 (xfr#1, to-chk=6/8)
techi/httpd-2.4.6-88.el7.centos.x86_64.rpm
2,844,028 100%  615.28kB/s    0:00:04 (xfr#2, to-chk=5/8)
techi/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
92,504 100%  507.51kB/s    0:00:00 (xfr#3, to-chk=4/8)
techi/pkumar-2.png
0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=3/8)
techi/pkumar-3.png
0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=2/8)
techi/pkumar.png
0 100%    0.00kB/s    0:00:00 (xfr#6, to-chk=1/8)
techi/postfix-2.10.1-7.el7.x86_64.rpm
2,558,136 100%  594.80kB/s    0:00:04 (xfr#7, to-chk=0/8)

sent 9,470,087 bytes  received 153 bytes  485,653.33 bytes/sec
total size is 11,647,907  speedup is 1.23
[root@gateway ~]#
 

예17) 소스와 대상의 파일 및 디렉토리의 차이점보기

rsync 명령에서 

-i

”옵션을 사용 하여 소스와 대상 사이의 파일과 디렉토리의 차이점을 나열하십시오. 예는 아래와 같습니다.

 

[root@gateway ~]# rsync -avzi /home/pkumar/techi root@192.168.1.29:/opt
root@192.168.1.29's password:
sending incremental file list
.d..t...... techi/
<f.st...... techi/projects.txt

sent 438 bytes  received 45 bytes  138.00 bytes/sec
total size is 11,648,064  speedup is 24,116.07
[root@gateway ~]#
 
위의 명령 출력에 따라 대상에서“projects.txt”라는 파일에 차이가 있습니다. 위 출력에서 ​​키워드의 의미는 다음과 같습니다.
  • d : 대상 파일의 변경을 나타냅니다
  • f : 파일을 나타냅니다
  • t : 타임 스탬프의 변화를 나타냅니다
  • s : 크기 변화를 나타냅니다

 

 

[원문] https://www.linuxtechi.com/rsync-command-examples-linux/

 

 

'OS > LINUX' 카테고리의 다른 글

[Tips] /etc/hosts와 resolv.conf 파일  (0) 2020.03.25
[Tips] CWD(current working directory) 찾기  (0) 2019.09.30
[명령어] sshpass 이해하기  (0) 2019.06.02
[Tips] 리눅스 파일시스템  (0) 2019.05.08
[명령어] watch 이해  (0) 2019.05.06