Action disabled: source

tar

리눅스 압축명령 tar 이해하기

리눅스의 배포본은 전부 압축되어서 제공되며, 기타 다른 응용 소프트웨어도 압축된 형태로 제공된다. 유닉스에서는 디렉토리를 포함하여 여러 파일들을 하나로 묶는 (Archiving) 명령어로 ‘tar’를 사용하며, 실제로 압축하는 것으로는 ‘gzip’을 주로 사용한다. 전자는 ‘.tar’가 파일명 뒤에 붙으며, 후자는 ‘.gz’ 또는 ‘z’가 붙는다. 또한, tar파일이 압축되었을 경우는 ‘.tar.gz’, ‘.tar.z’, ‘.tgz’ 등의 이름이 붙을 수 있다. DOS에서 많이 사용하는 lzh나 zip 파일을 이용할 수 있으며, 각각 ‘lharc’, ‘unzip’, ‘unarj’ 등의 유틸리티가 제공된다.

tar 의 사용

명령어 tar는 묶음(Archiving) 소프트웨어 중에서 가장 많이 사용되는 것이다.

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 파일 안에 어떤 디렉토리의 파일들이 상대적으로 어떻게 저장이 되어있는지 볼 수 있으며, 따라서 올바른 장소로 풀 수 있다.

압축

MS-DOS의 프로그램과는 달리, tar는 파일을 묶을 때, 자동적으로 압축하지는 않는다. 그러므로, 만일 2개의 1MB의 파일을 묶으려 한다면, tar파일의 크기는 2MB일 것이다.

compress

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

gzip

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

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

  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

Man page에 tar와 gzip에 대한 더 많은 정보가 언급되어 있다.

bzip2

속도는 느리지만 압축률이 좋다.

압축

tar -cjvf filename.tar.bz2 Download

Download 라는 디렉토리와 그 안의 파일들을 filename.tar.bz2 라는 파일로 압축함.

tar 에서 j 명령어로 bzip2 를 자동으로 호출하여 압축해 준다.

압축풀기

tar -xvf filename.tar.bz2

xz

옵션 --xz 사용

압축방법 비교

비교 항목 좋음 > 나쁨
해제 속도 lzop > gzip, zip > xz > 7z > rar > bzip2
합축 속도 lzop > gzip, zip > xz > bzip2 > 7z > rar
압축률 xz > 7z > rar, bzip2 > gzip > zip > lzop
가용성 (unix) gzip > bzip2 > xz > lzop > zip > 7z > rar
가용성 (windows) zip > rar > 7z > gzip > bzip2, lzop, xz

gzip vs bzip2 vs xz

예제

모든 폴더를 각각의 파일로 압축

for i in */; do zip -r "${i%/}.zip" "$i"; done