ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [UNIX/LINUX] 파일압축[gzip] 및 파일묶음[tar] 사용법
    유용한정보 2010. 11. 6. 09:35

    GZIP : 파일을 압축 또는 해제 하는데 사용한다.

    명령어
    gzip [-9,-d] fileName

    옵션

    -9 압축율 최대
    -d 압축 해제


    사용법
    압축 gzip -9 filename.tar 결과:filename.tar.gz
    해제 gzip -d filename.tar.gz 결과:filename.tar
    내용보기 gzcat filename.tar.gz 결과:리스트 출력


    tar와 gzip을 이용한 파일 압축 및 해제
    사용예 
    압축 tar cvf - include/ src/ | gzip > backup/filename.tar.gz
    풀기 gzcat filename.tar.gz | tar xvf -
    내용보기 gzcat filename.tar.gz | tar tvf -



    TAR : 여러개의 파일을 한개의 파일로 묶거나 푸는데 사용

    tar에서 자주 쓰이는 옵션
    c 새로운 tar 파일을 묶습니다.
    x tar파일을 풉니다.
    t tar 파일안에 있는 파일의 리스트를 보여줍니다.
    v 명령에 대한 파일의 정보를 보여줍니다.
    f 작업 대상이 되는 tar 파일의 이름을 지정합니다.
    z tar 파일을 사용할 때 gzip을 필터로 사용합니다.(gzip을 통해 tar 압축과 풀기가 가능합니다)


    사용예
    tar -cf sample.tar file1 file2 file1과 file2를 sample.tar 파일로 묶으라는 명령입니다.
    tar -cf sample.tar * 현재 디렉토리 안에 있는 모든 파일을 sample.tar 파일로 묶으라는 명령입니다.
    tar -xvf sample.tar sample.tar 파일을 풉니다. '-v' 옵션을 사용했기때문에 sample.tar 안에 있는 파일들을 풀면서 그 정보를 보여줍니다.
    tar -xzvf sample.tar.gz tar 명령으로 파일을 풀고 gzip으로 압축된 파일을 '-z'옵션을 통해 합축해제합니다.


    단순 백업
    단순 백업 방식이라는 것은, 먼저 모든 것을 한꺼번에 백업하고 그 다음부터는 앞선 백업에서 변경된 부분만을 골라 백업하는 것을 말한다. 여기서 맨 처음 하는 백업을 ful backup(완전 백업)이라고 하며, 그 다음부터는 incremental backups(변경분 백업) 이라고 한다. 보통 풀 백업은 양이 많기 때문에, 여러장의 플로피와 테이프를 사용해야하는 고된 작업이 된다. 반면에, 풀 백업을 해두면 복원하기는 변경분 백업보다 훨씬 쉽다. 풀 백업 이후에도 언제나 모든 것을 백업해 두도록 하면 복원 작업은 좀 더 효율적일 수 있을 것이다. 다만 이렇게 하면 일이 좀 많아지는데, 물론 풀 백업과 변경분 백업을 사용해서 복원할 때의 작업량보다도 더 과중한 작업을 하면서까지 이렇게 할 필요는 없다.
    만일 테이프 6개로 매일 백업을 하고 싶다면, 하루(금요일 같은 날에)는 1번 테이프로 풀 백업을 하고 2-5번 테이프로는 변경분 백업(월요일에서 목요일까지)을 하는 방법을 생각해 볼 수 있다(토요일과 일요일은 쉰다). 그리고 그 다음주 금요일에는 6번 테이프에 새로 풀 백업을 받고, 역시 2-5번 테이프로 변경분 백업을 받도록 한다. 6번 테이프에 새로 풀 백업을 받았다하더라도 1번 테이프의 풀 백업을 지워서는 안되며, 1번 테이프는 멀찌감치 다른 장소에 잘 보관해 두도록 한다. 이렇게 해두면, 불이 나서 다른 테이프가 다 타버린다고 해도 1번 테이프로 뭔가 복구를 시도해 볼 수 있을 것이다. 마찬가지 방법으로, 다시 한 주가 지나고 새 풀 백업을 받을 때에는 1번 테이프에 받도록 하고 6번 테이프를 보관하면 된다.
    테이프가 6개 이상 있는 경우에는, 남는 테이프를 모두 풀 백업에 사용하도록 한다. 그리고 새로 풀 백업을 받을 때는 그중에서 백업 받은 지 가장 오래된 테이프를 사용한다. 이렇게 하면 상당히 오래전의 풀 백업본을 가질 수 있게 되므로, 옛날에 지워진 파일들도 복구할 수가 있게 된다.

    tar를 사용해 백업하기
    tar를 사용하면 풀 백업을 쉽게 할 수 있다.
    # tar --create --file /dev/ftape /usr/src
    tar: Removing leading / from absolute path names in the archive
    #

    위는 tar의 GNU 버전과 긴 이름 옵션을 사용한 예이다. 전통적인 tar는 원래 한 문자 옵션만을 인식한다. 또한 GNU tar는 한개 테이프나 플로피에 다 들어가지 않는 큰 용량의 백업도 다룰 수 있으며, 아주 긴 경로명도 사용할 수 있다. 이런 것들은 전통적인 tar에서는 할 수 없던 일들이다(리눅스는 GNU tar만을 사용한다).

    만일 백업이 한 개 테이프에 다 들어가지 않는다면, multi-volume (-M) 옵션을 사용하면 된다:
    # tar -cMf /dev/fd0H1440 /usr/src
    tar: Removing leading / from absolute path names in the archive Prepare volume #2 for /dev/fd0H1440 and hit return:
    #

    플로피를 사용할 때에는 백업 받기 전에 꼭 포맷을 하여야 한다는 점을 주의하자. tar가 새 플로피를 요구할 때, 새 플로피를 넣고 다른 가상 터미널에서 포맷을 먼저 한 뒤 백업을 계속 해서 받을 수도 있다.
    백업을 받고 나서는 그것이 제대로 되었는지 확인, 비교를 해야 한다. --compare (-d) 옵션을 사용하자.
    # tar --compare --verbose -f /dev/ftape
    usr/src/ usr/src/linux
    usr/src/linux-1.2.10-includes/
    ....
    #
    확인, 비교 과정에서 실패한 백업본을 그대로 방치한다면, 나중에 원본이 손상되고 난 후에야 그 백업본이 무용지물이었다는 사실을 깨닫게 될 것이다.
    --newer (-N) 옵션을 사용하면, tar를 사용해 변경분 백업을 할 수 있다.
    # tar --create --newer '8 Sep 1995' --file /dev/ftape /usr/src --verbose
    tar: Removing leading / from absolute path names in the archive
    usr/src/
    usr/src/linux-1.2.10-includes/
    usr/src/linux-1.2.10-includes/include/
    usr/src/linux-1.2.10-includes/include/linux/
    usr/src/linux-1.2.10-includes/include/linux/modules/
    usr/src/linux-1.2.10-includes/include/asm-generic/
    usr/src/linux-1.2.10-includes/include/asm-i386/
    usr/src/linux-1.2.10-includes/include/asm-mips/
    usr/src/linux-1.2.10-includes/include/asm-alpha/
    usr/src/linux-1.2.10-includes/include/asm-m68k/
    usr/src/linux-1.2.10-includes/include/asm-sparc/
    usr/src/patch-1.2.11.gz #

    아쉽게도, tar는 파일의 inode 정보(파일의 이름과 퍼미션의 변경같은 정보)가 변경된 것을 알아내지 못한다. 이 문제는 find를 사용해 지난번 백업의 파일리스트와 현재 파일시스템을 비교해 보는 방법으로 해결할 수 있는데, 이런 일을 해주는 스크립트와 프로그램들을 리눅스 ftp 사이트에서 구할 수 있다. 

    tar를 사용해 파일 복원하기
    tar의 --extract ( -x) 옵션을 사용하면 파일들을 추출해 낼 수 있다.
    # tar --extract --same-permissions --verbose --file /dev/fd0H1440
    usr/src/ usr/src/linux usr/src/linux-1.2.10-includes/
    usr/src/linux-1.2.10-includes/include/
    usr/src/linux-1.2.10-includes/include/linux/
    usr/src/linux-1.2.10-includes/include/linux/hdreg.h
    usr/src/linux-1.2.10-includes/include/linux/kernel.h
    ...
    #
    또한 커맨드 라인 상에서 이름을 명시해 주면, 특정 파일들과 디렉토리들을(그 안의 파일들과 하위 디렉토리를 포함해서) 빼낼 수가 있다.
    # tar xpvf /dev/fd0H1440 usr/src/linux-1.2.10-includes/include/linux/hdreg.h
    usr/src/linux-1.2.10-includes/include/linux/hdreg.h
    #


    백업본에 어떤 파일이 들어있는지 보기만 하려면 --list (-t) 옵션을 쓰면 된다.
    # tar --list --file /dev/fd0H1440 usr/src/
    usr/src/linux
    usr/src/linux-1.2.10-includes/
    usr/src/linux-1.2.10-includes/include/
    usr/src/linux-1.2.10-includes/include/linux/
    usr/src/linux-1.2.10-includes/include/linux/hdreg.h
    usr/src/linux-1.2.10-includes/include/linux/kernel.h
    ...
    #

    tar는 백업본들을 순서대로만 읽기 때문에, 큰 백업본을 다루기엔 좀 느리다. 더구나 테이프 드라이브 같은 순차적 저장 장치들은, 원천적으로 랜덤 억세스 데이터베이스 테크닉을 사용할 수가 없다.
    또한 tar는 지워버린 파일들을 제대로 다루지 못한다. 만약 풀 백업본 하나와 변경분 백업본 하나를 가지고 복원 작업을 한다고 했을 때, 두 백업본 사이에 지워버린 파일이 있다면 그 파일은 다시 복원되어 나타나게 된다. 이렇게 꼭 지워졌야만 하는 민감한 파일까지도 다시 복원된다는 사실은 큰 문제라고 할 수 있다.
Designed by Tistory.