tar 압축 사용법

Tips/Linux 2012.02.24 10:13

출처: tar 압축 사용법


◈ 압축 파일 
리눅스의 배포본은 전부 압축되어서 제공되며, 기타 다른 응용 소프트웨어도 압축된 형태로 제공된다. 유닉스에서는 디렉토리를 포함하여 여러 파일들을 하나로 묶는 명령어로 `tar'를 사용하며, 실제로 압축하는 것으로는 `gzip'을 주로 사용한다. 전자는 `.tar'가 파일명 뒤에 붙으며, 후자는 `.gz' 또는 `z'가 붙는다. 또한, tar파일이 압축되었을 경우는 `.tar.gz', `.tar.z', `.tgz' 등의 이름이 붙을 수 있다. 
또 DOS에서 많이 사용하는 lzh나 zip 파일을 이용할 수 있으며, 각각 `lharc', `unzip', `unarj' 등의 유틸리티가 제공된다. 
 
< tar 의 사용 > 
명령어 tar는 압축 소프트웨어중에서 가장 많이 사용되는 것이다. 
문법    tar <options> <file1> <file2> ...<fileN> 
예제    # tar cvf backup.tar /etc 
          이 명령은 /etc 안의 모든 파일을 backup.tar의 이름으로 묶는다. 첫 번째 인자인 "cvf" 는
          tar의 <options>으로서, "c"는 새로운 파일을 생성하며, "v"는 묶이게 될 각각의 파일들을
          화면에 출력될 것을 지정한다. "f"는 다음에 나오는 인자인 backup.tar로 생성될 파일의 이
          름을 지정한다. 마지막 인자는 압축이 될 파일이나 디렉토리이다. 
          # tar xvf backup.tar 
          현재 디렉토리의 backup.tar 파일을 푼다. 이것은 tar로 묶은 것을 풀 때 기존의 파일들이 덮
          어써지기 때문에 때로는 위험하다. backup.tar 파일이 디렉토리를 포함한다면, 자동적으로
          디렉토리가 생성되고 파일이 속하게 된다. 

          파일들을 풀 때, 파일이 어디로 풀리게 되는지 아는 것도 중요하다.
          예를 들어, /etc/hosts, /etc/group, /etc/passwd 파일들을 묶는 다면,
          # tar cvf backup.tar /etc/hosts /etc/group /etc/passwd
          /etc/디렉토리의 각각의 파일들이 추가된다. 위와 같이 묶인 파일들을 올바른 장소로 풀기
          위해서는 아래의 명령어를 사용해야 한다. 
          # cd /
          #tar xvf backup.tar 
          왜냐하면, 묶어 놓은 파일에 저장되어 있는 경로도 풀어야 하기 때문이다.
          만일, 아래의 명령으로 묶는다면, 
          # cd /etc
          # tar cvf hosts group passwd
 
          디렉토리 이름 `/etc'는 tar 파일에 저장이 되지 않을 것이다. 그러므로, 이 파일을 풀기 전에
          "cd /etc"를 먼저 입력하여야 한다. 이 방식으로 tar파일을 만드는 것은, 파일을 어디로 풀어
          야 하는지에 대한 큰 차이를 갖게 된다.

          # tar tvf backup.tar 
          이것은 파일을 풀기 전에 tar파일의 "index"를 출력한다. 이러한 방법은 tar 파일 안에 어떤
          디렉토리의 파일들이 상대적으로 어떻게 저장이 되어있는지 볼 수 있으며, 따라서 올바른
          장소로 풀 수 있다. 


gzip과 compress 
MS-DOS의 프로그램과는 달리, tar는 파일을 묶을 때, 자동적으로 압축하지는 않는다. 그러므로, 만일 2개의 1MB의 파일을 묶으려 한다면, tar파일의 크기는 2MB일 것이다. 명령어 `gzip' 은 파일을 압축하는데 사용된다(압축하기 위해서 tar 파일은 필요치 않다.). 

          # gzip -9 backup.tar 
          위의 명령은 backup.tar 파일을 압축하고, 이 파일의 압축 버전인 backup.tar.gz 파일을 만들 것이다. -9는 최상의 압축율로 압
          축하는 옵션이다. 명령어 `gunzip'은 `gzip' 명령으로 압축된 파일을 풀기 위해 사용된다. 명령은 `gzip -d' 이다. 

          `gzip'은 유닉스의 새로운 도구이며, 지난 수년 동안 `compress' 명령을 대신하여 사용되어 왔다. `compress'의 알고리즘에 대
          한 소프트웨어 특허권 문제와 `gzip'의 효율이 `compress' 보다 좋다는 점 등의 이유로 `compress'는 물러나야 했지만 여전히
          필요할 것이다. 

          compressed 파일의 끝에 확장자 .Z 가 붙는다. 예를 들면, backup.tar의 compress된 버전이 backup.tar.Z이며, backup.tar.gz
          는 gzip 버전이다.(때로는, 소문자 z가 gzipped 파일이다.) 명령어 `uncompress'는 compress 된 파일을 풀기 위해 사용한다.
          또한, gunzip은 compressed 파일을 취급하는 방법을 알고 있기 때문에 .Z 파일도 gzip을 이용하여 압출을 풀 수 있다. 

gzip과 tar의 혼합 사용 
일반적으로 파일들을 하나로 묶은후, 그것을 압축시켜 백업해 놓는 경우가 많을 것이다. 
          # tar cvf backup.tar /etc 
          # gzip -9 backup.tar 

          따라서, 결과는 backup.tar.gz 이 생길 것이다.
 
파일을 풀기 위해서는 그 반대의 명령을 아래의 순서대로 사용한다. 
          # gunzip backup.tar.gz
          # tar xvf backup.tar
 

          물론, tar파일을 풀기 전에는 언제나 올바른 디렉토리에서 확인해야 할 것이다. 
          여기서, 파이프와 리디렉션을 사용하여 위의 명령을 한 라인으로 처리할 수 있다. 
          # tar cvf - /etc | gzip -9c > backup.tar.gz 
          이 명령은 먼저, tar 파일을 tar의 표준 출력("-"로 표시)으로 보낸다. 이것은 gzip과 파이프되어 들어오는 tar 파일을 압축하며,
          그 결과를 backup.tar.gz로 리디렉트 시킴으로서 파일로 저장된다. 
          gzip의 -c 옵션은 출력을 backup.tar.gz로 리디렉트하기 위해 표준 출력으로 보내라는 명령이다. 
그럼, 한 라인의 명령으로 이 파일을 풀어보자
          # gunzip -c backup.tar.gz | tar cvf - 
          다시, gunzip은 backup.tar.gz의 내용을 풀고, 그 결과를 표준 출력으로 tar 파일에 보낸다. 이것은 tar를 파이프한 것이고, "-"는
          tar의 표준 출력을 말한다. 

리눅스로 이식된 tar 버젼은 -z 옵션이 있어, 압축과 해제를 자동적으로 시킬 수 있다. 

# tar cvfz backup.tar.Z /etc 
          이것은 아래와 두 명령과 같다. 
          # tar cvf backup.tar /etc 
          # compress backup.tar
 

또한, 압축을 해제할때는 아래와 같으며, 
# tar xvfz backup.tar.Z 
          이것은 아래와 두 명령과 같은 것이다. 
          # uncompress backup.tar.Z 
          # tar xvf backup.tar