Cs

18.리눅스(Linux) 쉘 스크립트(Shell Script) - DB 백업 스크립트 - 파일 외부 복사/전송(rsync) - SCP대체 Rsync

ITSEONG 2022. 4. 28. 21:31

DB백업 스크립트를 할때나 쉘 스크립트를 짤때나 파일을 외부에 복사를 하거나 전송을 할 일이 필요하다.

DB백업은 2차 백업을 위해 파일을 전송하여야 하고 스크립트를 만들때도 파일 전송이 필요할 때가 있다.

 

파일전송에는 scp, rsync, sftp 등이 있으나 나는 rsync에 대해 알아보려 한다.

 

 

 

scp를 사용하려 했으나 scp OpenSSH 측에서는 scp의 알고리즘 혹은 프로토콜 자체가 rcp 시대의 오래전에 작성된 내용으로 수정이나 개선이 어렵다는 이유로 deprected를 한다 하여 Rsync를 사용하고자 한다.

 

자세한사항은 SCP지원중단 에서 확인하기 바란다.

 

Rsync 메뉴얼

 

rsync(1) manpage

Tell the sending side to include any directories that are encountered. Unlike --recursive, a directory's contents are not copied unless the directory name specified is "." or ends with a trailing slash (e.g. ".", "dir/.", "dir/", etc.). Without this option

download.samba.org

Rsync는 원격호스트와 로컬 사이에서 파일을 전송할 수 있다. (원격호스트 사이에서의 전송은 지원하지 않는다.

 

사용법

rsync options source destination

Rsync의 주요 옵션은 

  • -v : verbose 자세한 정보 출력
  • -r : 재귀적으로 하위 디렉터리 까지 복사(단 전송시 타임스탬프나 permission을 보존하지 않는다)
  • -a : archive mode.는 -rlptgoD와 동일하다.
    • -rlptgoD = -r(디렉토리 재귀), -t(수정시간 보존), -l (심볼릭 링크 보존), -p(permission 권한 보존), -g(그룹 보존), -o(소유자 보존 - root 만 가능),  -D(device, special 파일 보존)과 동일하다. 일반적으로 rsync 로 복제시 -a 옵션에 -z 옵션을 추가하면 충분하다.
  • -z : 데이타 압축
  • -h : 사람이 읽을 수 있는 형식으로 숫자 출력
  • --progress : 전송과정을 보여준다.

path에 slash가 있을경우 동작방식이 달라 유의해야한다.

$ tree test
test
├── dir1
└── dir2

다음 명령어는 다음과 같이 동작한다.

$ rsync -a test test_dest

$ tree test_dest/
test_dest/
└── test
    ├── dir1
    └── dir2

목적지 test_dest 폴더 아래에 test 폴더와 파일을 복사하였다.

 

소스에 / 를 추가할 경우 아래와 같이 목적지에 소스의 폴더를 생성하지 않고 복사한다.

$ rsync -a test/ test_dest

$ tree test_dest/
test_dest/ # 폴더내용만 복사
├── dir1
└── dir2

위와 같이 /가 있는지 여부에 따라 동작이 다르므로 rsync로 백업시 주의해야하며 다음 rsync명령어는 둘다 동일한 동작을 수행한다.

$ rsync -azvh /var/lib/mysql /home/backups
$ rsync -azvh /var/lib/mysql/ /home/backups/mysql

Local -> Local 로 사용시

 rsync -azvh /var/lib/mysql /home/backups

Local -> Remote 로 사용시

rsync -avz /home/Users/backup/ Users@Hostname.com:/home/Users/backup/

Remote -> Local 로 사용시 (downloads 폴더에 리모트의 backup 폴더와 파일을 복사한다.)

rsync -avz User@hostname.com:/home/Users/backup /home/Users/downloads/

파일 전송과정을 확인하고 싶을때 (--progress)

rsync -avz --progress User@hostname.com:/home/Users/backup /home/Users/downloads/

덮어쓰기 : rsync는 파일이 목적지에 존재할 경우 생성시간과 크기를 비교해서 동일할 경우 건너뜀

-i --ignore-times 옵션을 주면 생성시간과 크기를 비교하지않고 동작한다. 덮어쓰기와 동일한 효과를 발생한다.

rsync -avz -i -progress User@hostname.com:/home/Users/backup /home/Users/downloads/

 

 

오늘은 rsync에 대해 알아보았다.

 

rsync를 사용하면 데이터를 보다 편리하게 주고 받을 수 있을 것이고 백업하기에도 쉬워질 것으로 생각된다.

 

scp를 대체할만한 것은 rsync와 sftp가 있으니 다음에는 sftp에 대해 알아보자

 

 

이전글

2022.04.28 - [Cs] - 17. 리눅스(Linux) 쉘 스크립트(Shell Script) - DB 백업 스크립트 - Mysql_config_editor

2022.04.27 - [Cs] - 16. 리눅스(Linux) 쉘 스크립트(Shell Script) - DB 백업 스크립트-Mysqldump

 

16. 리눅스(Linux) 쉘 스크립트(Shell Script) - DB 백업 스크립트-Mysqldump

쉘 스크립트에서의 유의사항 java나 php 등 다른 언어에서는 변수를 사용하기 위해서는 변수 타입을 선언하거나, $를 붙여 줘야 한다. 하지만 쉘 스크립트에서는 1. 변수를 선언할 때 변수명만 적

itseong.tistory.com

 

반응형