웹사이트 검색

16 Linux에서 Rsync 명령의 실제 예


Rsync(원격 동기화)는 Linux/Unix 시스템에서 파일과 디렉터리를 원격 및 로컬로 복사하고 동기화하는 데 가장 일반적으로 사용되는 명령입니다.

rsync 명령을 사용하면 디렉터리, 디스크 및 네트워크 전반에 걸쳐 원격 및 로컬로 데이터를 복사 및 동기화하고, 데이터 백업을 수행하고, 두 Linux 시스템 간에 미러링할 수 있습니다.

이 문서에서는 Linux 기반 시스템에서 파일을 원격 및 로컬로 전송하기 위한 rsync 명령의 16 기본 및 고급 사용법을 설명합니다. rsync 명령을 실행하기 위해 루트 사용자일 필요는 없습니다.

Rsync 명령의 장점

다음과 같은 여러 가지 이점을 제공합니다.

  • 효율적인 파일 전송 – rsync는 델타 전송 알고리즘을 사용합니다. 즉, 소스 파일과 대상 파일 간의 차이점만 전송하므로 전송되는 데이터 양이 크게 줄어들어 대용량 파일이나 디렉터리를 효율적으로 동기화할 수 있습니다.
  • 원격 파일 동기화 – rsync는 SSH를 통한 로컬 및 원격 파일 전송을 모두 지원하므로 로컬 및 원격 시스템 간의 동기화 또는 여러 시스템에 걸친 디렉터리 미러링이 가능합니다.
  • 증분 백업 – rsync는 새 파일 또는 수정된 파일만 전송하여 효율적으로 백업을 생성하고 업데이트하므로 증분 백업에 적합합니다.
  • 파일 권한 유지 – rsync는 권한, 소유권, 타임스탬프, 심볼릭 링크 등 다양한 파일 속성을 보존할 수 있으므로 복사된 파일이 대상에서 원래 특성을 유지하도록 보장합니다.
  • 대역폭 제어 – rsync를 사용하면 양쪽 끝에서 데이터를 보내고 받는 동안 압축 및 압축 해제 방법을 사용하므로 파일 전송 중 대역폭 사용량을 제한할 수 있습니다.
  • 빠름 – rsync는 특히 대규모 디렉터리를 동기화하거나 이미 부분적으로 전송되었거나 대상에 존재하는 파일을 처리할 때 파일 전송 시 scp(Secure Copy)보다 빠를 수 있습니다.

Rsync 명령 구문

rsync 명령은 다음 구문을 따릅니다.

rsync [OPTIONS] SOURCE DESTINATION

다음은 rsync 명령과 함께 사용되는 다양한 구성요소 및 옵션에 대한 설명입니다.

  • -v – 전송에 대한 자세한 정보를 표시하는 자세한 출력입니다.
  • -r – 데이터를 재귀적으로 복사합니다(그러나 데이터를 전송하는 동안 타임스탬프와 권한은 유지되지 않습니다.
  • -a – 파일을 반복적으로 복사할 수 있고 기호 링크, 파일 권한, 사용자 및 그룹 소유권, 타임스탬프도 보존하는 아카이브 모드입니다.
  • -z – 전송 중에 파일을 압축하여 네트워크 사용량을 줄입니다.
  • -h – 사람이 읽을 수 있는 형식으로 숫자를 출력합니다.
  • -P – 전송 중 진행 상황을 표시합니다.
  • SOURCE – 전송할 소스 파일 또는 디렉터리를 지정합니다. 이는 로컬 또는 원격 위치일 수 있습니다.
  • DESTINATION – 파일이나 디렉터리가 복사될 대상 경로를 지정합니다. 소스와 마찬가지로 로컬 경로일 수도 있고 원격 위치일 수도 있습니다.

Linux 시스템에 Rsync 설치

Linux 배포판에 따라 다음 패키지 관리자의 도움을 받아 rsync 패키지를 설치할 수 있습니다.

sudo apt install rsync         [On Debian, Ubuntu and Mint]
sudo yum install rsync         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/rsync  [On Gentoo Linux]
sudo apk add rsync            [On Alpine Linux]
sudo pacman -S rsync           [On Arch Linux]
sudo zypper install rsync      [On OpenSUSE]    

1. 로컬로 파일 복사/동기화

파일을 로컬로 복사하거나 동기화하려면 로컬 시스템의 단일 파일을 한 위치에서 다른 위치로 동기화하는 다음 명령을 사용할 수 있습니다.

이 예에서는 backup.tar 파일 이름을 /tmp/backups/ 폴더에 복사하거나 동기화해야 합니다.

[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/

created directory /tmp/backups
backup.tar.gz

sent 224.54K bytes  received 70 bytes  449.21K bytes/sec
total size is 224.40K  speedup is 1.00

위의 예에서 대상이 아직 존재하지 않는 경우 rsync가 대상에 대한 디렉터리를 자동으로 생성하는 것을 볼 수 있습니다.

2. 디렉토리를 로컬로 복사/동기화

다음 명령은 한 디렉터리의 모든 파일을 동일한 시스템의 다른 디렉터리로 전송하거나 동기화합니다.

이 예에서는 /root/rpmpkgs에 일부 rpm 패키지 파일이 포함되어 있으며 해당 디렉토리를 /tmp/backups/ 폴더에 복사하려고 합니다.

[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/

sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 3.47M bytes  received 96 bytes  2.32M bytes/sec
total size is 3.74M  speedup is 1.08

3. 로컬에서 원격 서버로 디렉터리 복사

로컬 서버에서 원격 서버로 디렉터리를 복사하려면 다음 명령을 사용하면 로컬에서 원격 시스템으로 디렉터리를 동기화할 수 있습니다.

예를 들어 로컬 컴퓨터에 일부 RPM 패키지가 포함된 "rpmpkgs" 폴더가 있고 해당 로컬 디렉토리의 콘텐츠를 전송하려는 경우 원격 서버에 다음 명령을 사용할 수 있습니다.

rsync -avzh /root/rpmpkgs [email :/root/

The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established.
ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts.
[email 's password: 
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 3.74M bytes  received 96 bytes  439.88K bytes/sec
total size is 3.74M  speedup is 1.00

4. 원격 서버에서 로컬 서버로 디렉터리 복사

이 명령은 원격 디렉터리를 로컬 디렉터리로 동기화하는 데 도움이 됩니다. 이 예에서는 원격 서버에 있는 /root/rpmpkgs 디렉토리가 로컬 컴퓨터의 /tmp/myrpms에 복사됩니다.

rsync -avzh [email :/root/rpmpkgs /tmp/myrpms

[email 's password: 
receiving incremental file list
created directory /tmp/myrpms
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 104 bytes  received 3.49M bytes  997.68K bytes/sec
total size is 3.74M  speedup is 1.07

5. SSH를 통한 재동기화

rsync를 사용하면 데이터 전송에 SSH(Secure Shell)를 사용할 수 있으며, 데이터를 전송하는 동안 SSH 프로토콜을 사용하면 데이터가 보안 연결에서 전송되고 있는지 확인할 수 있습니다. 데이터가 인터넷을 통해 전송되는 동안 누구도 데이터를 읽을 수 없도록 암호화합니다.

또한 rsync를 사용할 때 특정 작업을 수행하려면 사용자/루트 비밀번호를 제공해야 하므로 SSH를 사용합니다. Strong> 옵션은 귀하의 비밀번호가 안전하도록 암호화된 방식으로 로그인 정보를 보냅니다.

SSH를 통해 rsync를 사용하려면 -e 옵션을 사용하여 표시된 대로 일반적으로 ssh인 원격 셸 명령을 지정할 수 있습니다.

rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination

6. SSH를 사용하여 원격 서버에서 로컬 서버로 파일 복사

원격 서버에서 로컬 서버로 파일을 동기화하려면 사용하려는 프로토콜 이름과 함께 "-e " 옵션을 사용하여 rsync로 프로토콜을 지정할 수 있습니다.

이 예에서는 “-e” 옵션과 함께 “ssh”를 사용하여 데이터 전송을 수행합니다.

rsync -avzhe ssh [email :/root/anaconda-ks.cfg /tmp

[email 's password: 
receiving incremental file list
anaconda-ks.cfg

sent 43 bytes  received 1.10K bytes  325.43 bytes/sec
total size is 1.90K  speedup is 1.67

7. SSH를 사용하여 로컬 서버에서 원격 서버로 파일 복사

SSH를 사용하여 로컬 서버에서 원격 서버로 파일을 동기화하려면 표시된 대로 다음 명령을 활용할 수 있습니다.

rsync -avzhe ssh backup.tar.gz [email :/backups/

[email 's password: 
sending incremental file list
created directory /backups
backup.tar.gz

sent 224.59K bytes  received 66 bytes  64.19K bytes/sec
total size is 224.40K  speedup is 1.00

8. Rsync를 사용하여 데이터를 전송하는 동안 진행 상황 표시

한 컴퓨터에서 다른 컴퓨터로 데이터를 전송하는 동안 진행 상황을 표시하려면 파일과 전송을 완료하는 데 남은 시간을 표시하는 '--progress' 옵션을 사용할 수 있습니다.

rsync -avzhe ssh --progress /root/rpmpkgs [email :/root/rpmpkgs

[email 's password: 
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
          1.47M 100%   31.80MB/s    0:00:00 (xfr#1, to-chk=3/5)
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
        138.01K 100%    2.69MB/s    0:00:00 (xfr#2, to-chk=2/5)
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
          2.01M 100%   18.45MB/s    0:00:00 (xfr#3, to-chk=1/5)
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
        120.48K 100%    1.04MB/s    0:00:00 (xfr#4, to-chk=0/5)

sent 3.74M bytes  received 96 bytes  1.50M bytes/sec
total size is 3.74M  speedup is 1.00

9. Rsync를 사용하여 특정 확장자를 가진 파일 포함

rsync 작업 중에 특정 파일이나 패턴을 포함하려면 모든 파일과 일치하는 확장자와 함께 --include 옵션을 사용할 수 있습니다.

rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/

제공된 예에서 rsync는 전송 중에 /path/to/source/ 디렉터리에 있는 .txt 확장자를 가진 파일만 포함합니다.

10. Rsync를 사용하여 특정 확장자를 가진 파일 제외

마찬가지로, rsync 작업 중에 특정 확장자를 제외하려면 와일드카드 패턴과 함께 --exclude 옵션을 사용할 수 있습니다.

rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/

제공된 예에서 rsync는 전송 중에 지정된 확장자가 (*.ext)인 파일을 제외하고 다른 모든 파일과 디렉터리를 포함합니다.

11. Rsync를 사용하여 파일 포함 및 제외

rsync 작업 중에 특정 파일이나 패턴을 포함하거나 제외하려면 적절한 와일드카드 패턴과 함께 --include--exclude 옵션을 모두 사용할 수 있습니다.

이 두 가지 옵션을 사용하면 매개변수를 지정하여 파일을 포함제외할 수 있습니다. 이 옵션을 사용하면 동기화에 포함하고 파일과 폴더를 제외하려는 파일이나 디렉터리를 지정할 수 있습니다. 당신이 전송하고 싶지 않은 것.

이 예에서 rsync 명령은 'R'로 시작하는 파일과 디렉터리만 포함하고 다른 모든 파일과 디렉터리는 제외합니다.

rsync -avze ssh --include 'R*' --exclude '*' [email :/var/lib/rpm/ /root/rpm

12. Rsync와 함께 –delete 옵션 사용

파일이나 디렉터리가 원본에는 없지만 대상에는 이미 있는 경우 동기화하는 동안 대상에서 기존 파일/디렉터리를 삭제할 수 있습니다.

'--delete' 옵션을 사용하여 소스 디렉터리에 없는 파일을 삭제할 수 있습니다.

소스와 타겟이 동기화되어 있습니다. 이제 대상에 새 파일 test.txt를 만듭니다.

[root@tecmint:~]# cd /root/rpm/
[root@tecmint:~/rpm]# touch test.txt
[root@tecmint:~/rpm]# rsync -avz --delete [email :/var/lib/rpm/ /root/rpm/

[email 's password: 
receiving incremental file list
deleting test.txt
./
.dbenv.lock
.rpm.lock
Basenames
Conflictname
Dirnames
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Packages
Providename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.001
__db.002
__db.003

sent 445 bytes  received 18,543,954 bytes  2,472,586.53 bytes/sec
total size is 71,151,616  speedup is 3.84

Target에 '–delete' 옵션을 사용하여 소스와 동기화할 때 test.txt라는 새 파일이 있으며 test.txt 파일이 삭제되었습니다. .

13. Rsync로 파일 전송 제한 설정

전송 또는 동기화할 최대 파일 크기를 지정할 수 있습니다. “--max-size” 옵션을 사용하면 됩니다. 이 예에서 최대 파일 크기는 200k이므로 이 명령은 200k보다 작거나 같은 파일만 전송합니다.

rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email :/root/tmprpm

[email 's password: 
sending incremental file list
created directory /root/tmprpm
./
.dbenv.lock
.rpm.lock
Conflictname
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Recommendname
Requirename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.002

sent 129.52K bytes  received 396 bytes  28.87K bytes/sec
total size is 71.15M  speedup is 547.66

14. 전송 후 소스 파일 자동 삭제

이제 기본 웹 서버와 데이터 백업 서버가 있고 일일 백업을 생성하여 백업 서버와 동기화했지만 이제 웹 서버에 백업의 로컬 복사본을 보관하고 싶지 않다고 가정해 보겠습니다.

그렇다면 전송이 완료될 때까지 기다린 다음 해당 로컬 백업 파일을 수동으로 삭제하시겠습니까? 물론 아니오. 이 자동 삭제는 '--remove-source-files' 옵션을 사용하여 수행할 수 있습니다.

rsync --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email 's password: 
backup.tar.gz

sent 795 bytes  received 2.33K bytes  894.29 bytes/sec
total size is 267.30K  speedup is 85.40

[root@tecmint:~]# ls -l backup.tar.gz

ls: cannot access 'backup.tar.gz': No such file or directory

15. Rsync로 시험 실행하기

rsync를 사용하는 초보자이고 명령이 정확히 무엇을 수행할지 모르는 경우. Rsync는 대상 폴더의 내용을 엉망으로 만들 수 있으며 실행 취소를 수행하는 것은 지루한 작업이 될 수 있습니다.

이 옵션을 사용하면 파일이 변경되지 않고 명령 출력이 표시됩니다. 출력이 원하는 것과 정확히 동일하게 표시되면 '--dry-run을 제거할 수 있습니다. ' 옵션을 명령에서 선택하고 터미널에서 실행하세요.

rsync --dry-run --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email 's password: 
backup.tar.gz

sent 50 bytes  received 19 bytes  19.71 bytes/sec
total size is 267.30K  speedup is 3,873.97 (DRY RUN)

16. Rsync 대역폭 제한 설정 및 파일 전송

'--bwlimit' 옵션을 사용하여 한 시스템에서 다른 시스템으로 데이터를 전송하는 동안 대역폭 제한을 설정할 수 있습니다. 이 옵션은 I/O 대역폭을 제한하는 데 도움이 됩니다.

rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  [email :/root/tmprpm/
[email 's password:
sending incremental file list
sent 324 bytes  received 12 bytes  61.09 bytes/sec
total size is 38.08M  speedup is 113347.05

또한 기본적으로 rsync는 변경된 블록과 바이트만 동기화합니다. 전체 파일을 명시적으로 동기화하려면 '-W' 옵션을 사용하세요.

rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
sent 14.71M bytes  received 31 bytes  3.27M bytes/sec
total size is 16.18M  speedup is 1.10
결론

이것으로 rsync 및 해당 기능에 대한 개요를 마칩니다. 광범위한 옵션과 기능을 더 자세히 살펴보려면 사용 가능한 포괄적인 매뉴얼 페이지(man 페이지)를 참조하는 것이 좋습니다.