[Bash] Rsync활용하기

2025. 3. 17. 23:35Developers 공간 [Shorts]/Software Basic

728x90
반응형
<분류>
A. 수단
- OS/Platform/Tool : Linux, Kubernetes(k8s), Docker, AWS
- Package Manager : node.js, yarn, brew, 
- Compiler/Transpillar : React, Nvcc, gcc/g++, Babel, Flutter

- Module Bundler  : React, Webpack, Parcel

B. 언어
- C/C++, python, Javacsript, Typescript, Go-Lang, CUDA, Dart, HTML/CSS

C. 라이브러리 및 프레임워크 및 SDK
- OpenCV, OpenCL, FastAPI, PyTorch, Tensorflow, Nsight

 


1. What? (현상)

 

이번 글에서는 rsync(Remote Sync)를 활용한 예시 코드를 정리해보겠습니다.

 

rsync란 리눅스나 유닉스에서 활용하는 remote-update프로토콜을 활용하는 파일전송 유틸리티입니다.

많이 들 사용하시는 rcp, scp보다 데이터를 압축해서 송수신할 수 있어 빠르고, 동기화를 통해 차이가 있는 파일만 복사하므로 효율적입니다.

 

따라서 단일 복사에는 간단한 scp를 주로 홀용하지만, 파일을 자주 동기화하거나 큰 디렉토리를 백업하는 경우는 rsync를 활용하는 것이 더 유리합니다.

 

그럼 rsync의 기본 명령어를 살펴보겠습니다.


2. Why? (원인)

  • X

3. How? (해결책)

먼저, 아래와 같이 rsync를 설치해줍니다.

apt-get install rsync

 

먼저 (내 서버 ← 상대 서버)로 rsync하는 경우를 의미합니다. 주로 사용하는 옵션들은 아래와 같습니다.

  • -a, --archive : 아카이브 모드로, 심볼릭 링크 & 유저와 그룹의 권한 & timestap 등의 
  • -v, --verbose : verbose 모드를 의미합니다.
  • -z, --compress : 압축전송 모드를 의미합니다.
  • -h, --human-readable : 사람이 쉽게 이해할 수 있도록 큰 용량의 단위는 K,  M,  or  G 등의 suffix를 활용해 표현합니다.
  • -e, --rsh : 원격 Shell에서 communication하기 위해 사용하는 프로그램을을 지정해줍니다. default로 ssh가  사용되지만, pem key를 활용해 보안접속하거나 rsh등을 활용하고 싶으면 이를 활용합니다.
  • --progress : 보내지는 과정에 대한 progress를 보여줍니다.
  • --exclude : 동기화할 폴더더 중 제외하고 싶은 것 지정해줍니다.
rsync -avh --progress \
    userA@1.2.3.4:/remote/target \
    /local/

 

위를 보면 알 수 있다시피 1.2.3.4서버의 계정 userA에 있는 /remote/target 폴더를 /local/target로 동기화하는 코드입니다.

 

반대로 (내 서버 상대 서버)로 rsync하는 경우는 아래와 같습니다.

rsync -avh --progress \
    /local/target \
    userA@1.2.3.4:/remote/

 

(내 서버  상대 서버) rsync할 때, ssh를 보안을 통해 접속하는 경우는 아래와 같이 -e 옵션을 활용합니다.

sync -avh -e "ssh -i my_key.pem" --progress \
    /local/target \
    userA@1.2.3.4:/remote/

 

(내 서버  상대 서버) rsync할 때, ssh를 보안을 통해 접속하면서 특정 폴더들은 제외하고 싶으면 --exclude 옵션을 활용합니다.

아래는 /local/target/FOLDER_A, /local/target/FOLDER_A, /local/target/FOLDER_C를 빼고 동기화하도록 했습니다. 

rsync -avh -e "ssh -i my_key.pem" --progress \
    --exclude target/FOLDER_A \
    --exclude target/FOLDER_B \
    --exclude target/FOLDER_C \
    /local/target \
    userA@1.2.3.4:/remote/

 

 

 


 

728x90
반응형