본문 바로가기

스터디/리눅스 커맨드라인

[리눅스] 18. 파일 보관 및 백업

 

컴퓨터 시스템을 관리하는 데 있어서 가장 기초적인 작업 중 하나가 바로 시스템의 데이터를 안전하게 유지하는 것이다.
시스템 파일을 백업하거나, 시슨템 관리자가 아니더라고 많은 양의 파일을 장치 간이나 특정 위치 간에 이동시키거나 복사하는 방법을 정리할 것이다.

 

 

1. 파일 압축하기

 

1) gzip - 파일 압축 및 압축 해제하기

gzip 프로그램은 하나 이상의 파일을 압축할 때 사용된다. 이와 함께 사용되는 gunzip 프로그램(압축 해제)은 압축 파일을 압축되기 이전의 원본 상태로 복원시켜준다.
$ gzip foo.txt

$ gunzip foo.txt​
gzip foo.txt : gzip 프로그램을 실행하여 원본 파일을 foo.txt.gz 라는 압축 파일로 바꾼다. 또한 원본의 크기보다 축소되어서 압축이 된다.

 

gzip 옵션

  • -c : 표준 출력에 결과를 쓰고, 원본 파일을 유지함
  • -d : 압축 해제 
  • -f : 압축 파일이 이미 존재해도 압축을 실행
  • -h : 도움말
  • -l : 압축 정보를 표시
  • -r : 디렉토리를 순환하면서 포함되어 있는 파일들을 압축한다. (하부 디렉토리까지 확장 개념)
  • -t : 압축 파일의 무결성을 검사
  • -v : 압축되는 과정을 자세히 표시
  • -number : 압축 정도를 설정 (1은 빠르고 9는 느림) --fast, --best 로 속도조절이 가능하지만 숫자도 가능

 

2) bzip2 - 속도는 느리지만 고성능 압축 프로그램

gzip와는 압축 알고리즘이 다르지만 같은 사용 방식으로 사용할 수 있다.

 

 

2. 파일 보관하기 (아카이빙)

압축 작업과 함께 주로 사용되는 작업인 파일 보관 작업이다.

아카이빙이란 말은 파일들을 모아서 하나의 큰 파일로 묶는 과정을 말한다.
시스템 백업의 일환으로 종종 수행되는 작업이다. 또한, 일종의 장기 보관용 저장 장치에 오래된 데이터를 옮길 때 필요한 작업이다.

 

1) tar - 테이프 아카이빙 유틸리티

tar 모드

  • c : 파일과 디렉토리의 목록에서 아카이브 생성하기 
  • x : 아카이브 해제하기

r : 아카이브 끝에 경로명을 덧붙이기

  • t : 아카이브 내용 보기
여러 파일을 .tar이나 .tgz를 확장자로 가진 파일들로 묶어서 보관하는 프로그램이다.

$ tar cf playground.tar playgound​

f : tar 아카이브의 이름을 지정하고 대시 기호를 안써도 되게끔 한다. 대신 모드는 다른 옵션 앞에 명시되어야 한다. ( Ex. cf )
playgound.tar : playgound.tar 이라는 파일명을 가지고 .tar 파일을 생성한다.
playgound : 자료가 있는 파일 경로 이다. 

하나의 예를 더 들면,

$ sudo tar cf /media/BigDisk/home.tar /home

 cf : .tar 파일을 생성
media/BigDisk/home.tar : /home에 있는 파일들을 tar 파일로 묶어서 /media/BigDisk/ 경로에 home.tar이름으로 저장. (마운트 한다)

 

2) zip - 파일을 묶고 압축하기

zip 프로그램은 파일 압축과 보관을 한 번에 할 수 있는 프로그램이다.
우리가 흔히 아는 .zip 형식의 파일로 되어있다.

$ zip -r playgound.zip playgound​
-r : 하위 디렉토리까지 압축을 진행한다.

파일을 압축 해제하고 싶을 때는 unzip 프로그램을 사용하면 된다.
$ unzip ../playgound.zip​


zip 프로그램은 tar 프로그램과 달리 기존 아카이브 파일이 지정되면 파일 자체가 교체되는 것이 아닌 업데이트된다는 점이 중요하다.

 

 

3. 파일 및 디렉토리 동기화

예를 들어, 
개발 중인 웹사이트의 로컬 복사본을 만들고 원격 웹 서버에 주기적으로 동기화하고 싶을 때는 어떻게 해야할까?

 

1) rsync - 원격 파일 및 디렉토리 동기화

$ rsync options source destination

 

source와 destination에는 다음 중 하나가 올 수 있다. (source나 destination 둘 중 하나는 반드시 로컬 파일이어야 한다)

  • 로컬 파일이나 디렉토리
  • 원격 파일이나 디렉토리, [user@]host:path 형식
  • rsync://[user@]host[:port]/path 형식의 URL로 지정된 원격 rsync 서버

 

playgound 디렉토리를 foo 디렉토리에 동기화해보면, (playgound 디렉토리의 내용을 foo 에 미러링 한다는 뜻)
$ rsync -av playgound foo​
-a : 아카이브 생성, 실행 반복 및 파일 속성을 유지해주는 옵션
-v : 자세한 출력 방식 옵션

 

2) 네트워크상에서 rsync 실행하기

rsync 프로그램은 네트워크상에서도 파일을 복사할 수 있다.

첫 번째 방법은 rsync 프로그램이 설치되어 있고 ssh와 같은 원격 쉘 프로그램이 동작하고 있는 다른 시스템으로 복사하는 것이다.

로컬 네트워크상에 연결된 한 시스템이 있고 이 시스템에는 공간이 아주 많은 하드 드라이브가 있다고 가정하자!
외장 하드 대신 원격 시스템을 이용해서 백업 작업을 하려고 할 때, 파일을 복사해둘 /backup이란 디렉토리가 이미 있다고 가정하고 코드를 작성해보면..
$ sudo rsync -av --delete --rsh=ssh /etc /home /usr/local remote-sys:/backup​
--rsh=ssh : rsync로 하여금 원격 쉘로서 ssh를 사용하라는 뜻
remote-sys : 원격 호스트명
두 번째 방법은 rsync server를 이용하여 네트워크상에서 동기화하는 방법이다.
rsync 프로그램은 데몬으로 실행해서 동기화 요청에 응답할 수 있도록 설정할 수 있다. 이 방법은 주로 미러링할 때 사용된다.

보통 저장소에 있는 파일들은 자주 바뀌기 때문에, 대량 복사를 통해 백업하는 것보다는 주기적으로 동기화로 로컬 백업본을 유지하는 것이 바람직한데 어떤 사이트에서 운영하는 저장소 중 하나를 로컬 시스템의 rsync 프로그램과 어떤 사이트의 rsync 서버를 이용하여 이 저장소를 미러링할 수 있다.
$ rsync -av -delete rsync://사이트 주소/ 저장소 파일 이름​

 

rsync:// : 프로토콜과 호스트 명, 저장소 경로명(URL)

'스터디 > 리눅스 커맨드라인' 카테고리의 다른 글

[리눅스] 20. 텍스트 편집  (0) 2022.05.30
[리눅스] 19. 정규 표현식  (0) 2022.05.30
[리눅스] 17. 파일 검색  (0) 2022.05.23
[리눅스] 16. 네트워킹  (0) 2022.05.16
[리눅스] 15. 저장장치  (0) 2022.05.16