리눅스/명령어

파일을 복사하는 명령어 1 - rsync

KWMBLOG 2018. 11. 30. 15:59

제목은 파일을 복사하는 명령어라고 썼지만,

서버 대 서버로 복사도 가능하다.


이번 글에서는 로컬에서 사용하는 방법만 작성한다.




rsync : 빠르고 다양한 복사툴이다. (man rsync 직역)

옵션

  • -a : 기존에 갖고있는 소유주, 권한 정보를 그대로 복사하는 옵션이다.
  • -v : 진행상황을 표시하는 옵션이다.
  • -z : 데이터를 압축해서 전송하는 옵션이다.
  • --delete : 원본에 없으면 대상에서도 삭제하는 옵션이다.
  • --bwlimit=속도 : kbyte 단위로 속도를 제한하여 복사하는 옵션이다.
  • --exclude 경로 : 경로를 복사에서 제외하는 옵션이다.
  • --include 경로 : 경로를 복사에 포함시키는 옵션이다.
  • --progress : 복사되고 있는 상황을 자세히 보는 옵션이다.




-z는 써본적도 없고 쓸 계획도 없어서

따로 다루지 않겠다.

우선 rsync를 사용할 수 있는 환경인지 부터 확인한다.





이 파일은 원래 disable = yes 로 되어있다.

vi 로 열어 disable = no로 바꾼다음

service xinetd restart 혹은 /etc/rc.d/init.d/xinetd 를 입력해준다.


여기서 xinetd 를 못찾는다고 하면

yum install xinetd 를 해준다.





rsync.txt 라는 파일을 생성하여 권한을 이상하게 줬다.

이 파일을 단순히 상위 디렉토리로 복사하는 예제이다.


rsync -av 파일 복사할위치

이렇게 입력해주면 소유주, 권한정보가 

똑같이 복사된 것을 확인 할 수 있다.


옵션을 쓰지 않아도 똑같이 복사된 것을 볼 수 있다.



이제 디렉토리를 포함시켜서 복사해보도록 한다.

rsync 라는 디렉토리를 생성해서 옵션 없이 rsync를 사용했다.

하지만 옵션이 없으면 디렉토리는 스킵해버린다.

그럼 옵션을 주면?


디렉토리를 포함하여 같이 복사한다.

그래서 내손은 rsync를 치면 무의식적으로 -av 가 따라붙는다 허허





이번엔 --delete 옵션에 대해 설명하려고 한다.

위에 적어놓은 옵션설명은 너무 전체적으로 적어놓은 

느낌이 있어서 상세히 적으려고 한다.


현재 예제로 만들어놓은 구조이다.

원본으로 사용할 디렉토리에서는 rsync_delete.txt라는 파일이 없고,

대상으로 사용할 디렉토리에는 rsync 디렉토리 안에 만들어 두었다.



--delete 옵션을 사용했을 때, 

서로 비교를 해서 대상에 원본에 없는게 

있으면 대상에서도 삭제를 해버린다.

100% 동기화가 되는 것이다.


명령어를 실행한 직후 뜨는 문구를 보면

deleting rsync/rsync_delete.txt

라고 떠있다.





--bwlimit 은 복사하는 속도를 제한하는 명령어다.

보통 로컬복사에서는 사용하지않고,

서버대 서버로 복사할 때 많이 사용한다.


특히 트래픽이 급격히 상승하는게 

문제가 될경우 많이 사용한다.


지금 예제는 초당 1Kbyte 속도로 복사하는 것이다.

--progress 를 이용한 것도 있다.





--exclude 는 파일을 제외하고 싶을때 사용하는 옵션이다.

exclude 뒤에 붙는 경로는 상대경로만 먹힌다.

내가 테스트 할때는 ../ ./ 이것도 안먹히고,

그냥 현재경로에 있는 것들만 됐다.


예제에 보면 rsync.txt는 제외하고 복사하라고 입력했다.

입력한대로 결과가 나왔다.



하나하나 exclude에 포함시킬 필요는 없다.

--exclude-from=FILE

을 지정하면 그 파일에 있는 이름은 전부 제외시켜준다.

이미지에 있는 예제가 그러하다.




다음 글에서는 서버 대 서버로

복사하는 방법에 대해 알아보도록 한다.


3줄 요약

rsync는 빠르고 다양한 복사툴이다. (힘세고 강한아침?)

옵션을 어떻게 쓰냐에 따라 복사결과가 달라진다.

나는 아직도 exclude 쓸 때 헤맨다.