리눅스에서 Rsync 명령어 사용 방법: 실용적인 예 16가지

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 설치

우리는 리눅스 배포판에 따라 다음 패키지 관리자의 도움으로 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가 목적지를 자동으로 만듭니다.

Rsync Local Files

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
Rsync Local Directory

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

로컬 서버에서 원격 서버로 디렉토리를 복사하려면 다음 명령을 사용할 수 있으며, 이 명령은 로컬에서 원격 기계로 디렉토리를 동기화합니다.

예를 들어, 로컬 컴퓨터에 “rpmpkgs”라는 폴더가 있고 그 안에 일부 RPM 패키지가 포함되어 있고 이 로컬 디렉토리의 내용을 원격 서버로 전송하려면 다음 명령을 사용할 수 있습니다.

# rsync -avzh /root/rpmpkgs [email protected]:/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 protected]'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
Rsync Directory Remote System

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

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

# rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms

[email protected]'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
Rsync Remote Directory to Local

5. SSH를 통한 Rsync

rsync를 사용하면 데이터 전송에 SSH (보안 셸)을 사용하여 데이터 전송 시 SSH 프로토콜을 사용합니다. 데이터가 인터넷을 통해 전송되는 동안 데이터가 암호화된 보안 연결로 전송되므로 누구도 데이터를 읽을 수 없습니다.

또한 rsync을 사용할 때 특정 작업을 수행하려면 사용자/루트 암호를 제공해야 합니다. 따라서 SSH 옵션을 사용하면 로그인이 암호화된 방식으로 전송되어 암호가 안전합니다.

rsyncSSH로 사용하려면 원격 셸 명령을 지정하는 -e 옵션을 사용할 수 있습니다. 일반적으로 ssh로 표시됩니다.

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

6. 원격 서버에서 로컬 서버로 파일 복사하기

원격 서버에서 로컬 서버로 파일을 동기화하려면 ” rsync “를 사용하여 프로토콜을 지정할 수 있으며 원하는 프로토콜 이름으로 ” -e ” 옵션을 사용합니다.

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

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

[email protected]'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
Rsync Copy Remote File to Local

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

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

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

[email protected]'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
Rsync Copy Local File to Remote

8. Rsync를 사용하여 데이터 전송 중 진행 상황 표시하기

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

# rsync -avzhe ssh --progress /root/rpmpkgs [email protected]:/root/rpmpkgs

[email protected]'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
Rsync Progress While Copying Files

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 protected]:/var/lib/rpm/ /root/rpm
Rsync Include and Exclude Files

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

소스에 파일 또는 디렉토리가 없지만 대상에 이미 존재하는 경우 동기화하는 동안 해당 기존 파일/디렉토리를 삭제하려고 할 수 있습니다.

소스 디렉토리에 없는 파일을 삭제하려면 ‘--delete‘ 옵션을 사용할 수 있습니다.

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

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

[email protected]'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

대상은 ‘–delete’ 옵션을 사용하여 소스와 동기화할 때 test.txt라는 새 파일을 가졌습니다. 이는 파일 test.txt를 제거했습니다. Rsync로 파일 전송 한도 설정

Rsync Delete Option

13. Rsync를 사용하여 파일 전송 한도 설정

전송하거나 동기화할 최대 파일 크기를 지정할 수 있습니다. “–max-size” 옵션으로 할 수 있습니다. 여기 이 예에서 최대 파일 크기는 200k이므로 이 명령은 200k 이하의 파일만 전송합니다.

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

[email protected]'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
Rsync Set Max File Transfer Size

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

이제 주 서버와 데이터 백업 서버가 있고 매일 백업을 만들어 백업 서버와 동기화했습니다. 그러나 이제 웹 서버의 해당 로컬 백업 복사본을 보관하지 않으려고 합니다.

그래서 전송이 완료될 때까지 기다렸다가 해당 로컬 백업 파일을 수동으로 삭제하시겠습니까? 물론 그렇지 않습니다. 이 자동 삭제는 ‘–remove-source-files’ 옵션을 사용하여 수행할 수 있습니다.

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

[email protected]'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
Rsync Delete Source File After Transfer

15. Rsync로 Dry Run 수행

Rsync를 처음 사용하는 초보자이고 명령이 정확히 무엇을 할지 모르는 경우가 있습니다. Rsync는 대상 폴더에서 실수로 많은 문제를 일으킬 수 있으며 그 후 되돌리는 것이 번거로운 작업이 될 수 있습니다.

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

[email protected]'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)
Rsync Dry Run

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

하나의 기계에서 다른 기계로 데이터를 전송하는 동안 ‘--bwlimit‘ 옵션을 사용하여 대역폭 제한을 설정할 수 있습니다. 이 옵션을 사용하면 I/O 대역폭을 제한할 수 있습니다.

# rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  [email protected]:/root/tmprpm/
[email protected]'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 및 그 기능에 대한 개요를 마칩니다. 다양한 옵션과 기능을 더 자세히 살펴보려면 포괄적인 매뉴얼 페이지(맨 페이지)를 참조하시기 바랍니다.

Source:
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/