본문 바로가기

IT

[Ubuntu/Linux] xz 압축파일의 모든 것

언제부턴가 xz라는 기이한 이름의 압축파일이 눈에 띄기 시작했습니다.

처음에는 오타쿠스러운 집단에서 사용하는 유별난 압축파일이라고 생각했었는데요,

최근 몇 년간의 동향을 보자면,

압축계에서 가장 핫한 아이돌이라고 단언할 수 있습니다.



안녕하세요, Tizen 개발자 윤진입니다.


xz 압축파일이 인기를 끄는 이유는 압축률이 탁월하기 때문입니다.

xz는 Unix 계열에서 흔히 사용하는 gzip보다 압축률이 30% 좋고,

bzip2 보다도 15% 좋다고 알려져 있죠.

(http://tukaani.org/xz/)


게다가 대다수의 플랫폼에서 사용할 수 있으니 폭발적인 인기를 누리는 것은 당연해 보입니다.

  • GNU/Linux (GCC, LLVM/Clang, ICC)
  • GNU/HURD (GCC)
  • DragonflyBSD (GCC)
  • FreeBSD (GCC)
  • MirBSD (GCC)
  • NetBSD (GCC)
  • OpenBSD (GCC)
  • MINIX 3 (GCC) [1]
  • Haiku (GCC4)
  • Mac OS X (GCC)
  • Solaris 8, 9, 10, 11 (GCC, Sun Studio) [3]
  • Solaris 2.6, 7 (GCC)
  • HP-UX (GCC, HP ANSI C) [2]
  • Tru64 (GCC, Compaq C compiler) [1]
  • IRIX (MIPSpro) [1]
  • AIX (GCC)
  • QNX (compilers?)
  • OpenVMS (HP C compiler) [1]
  • OpenVOS 17 (GCC)
  • Windows 95 and later (GCC/MinGW, GCC/MinGW-w64, GCC/Cygwin, GCC/Interix) [1]
  • OS/2, eComStation (GCC)
  • DOS e.g. FreeDOS and MS-DOS (GCC/DJGPP) [1]

리눅스, Mac OS X, Solaris, Windows, DOS까지 대다수 플랫폼에 이식되었습니다.


그리고 이 인기를 토대로 플랫폼의 주요 압축툴로 자리매김하였습니다.

gnu의 coreutils도 xz로 압축하고 있습니다.

(ftp://ftp.gnu.org/gnu/coreutils/)

2009년까지 gzip과 bzip2를 이용하여 압축을 하였었는데요,

2009년 2월 21일 이후부터는 bzip2 대신 xz 입축파일이 보이기 시작합니다.


GNOME 프로젝트도 2011년 4월 21일에 xz 사용을 전격 선언했습니다.

Currently tarballs are released using the formats:
 - tar.gz
 - tar.bz2

The intend is to switch to tar.xz only as per below transition period.

After the last GNOME 3.0.x stable release (May 25th 2011) new releases
will have:
 - tar.xz
 - tar.bz2

After the last GNOME 3.2.x stable release (expect Nov 16th 2011) new
releases will have:
 - tar.xz

https://mail.gnome.org/archives/devel-announce-list/2011-April/msg00008.html

그리고 기타 수많은 플랫폼에서 xz를 차용한 예는 수도 없이 많습니다.


xz는 파일 하나만을 압축하기 위해 설계되었습니다.

다수의 파일을 하나로 묶어주진 않습니다.

따라서 다수의 파일을 압축하기 위해서는 tar와 같은 툴을 사용하여 하나의 파일로 모아야합니다.

tar로 다수를 하나로 만든 후 xz로 압축을 하는 방식이지요.

압축을 하면 압축하기 전의 tar 파일은 사라집니다.


압축을 풀 경우에는 역으로 unxz 혹은 xz -d로 압축을 풀고,

그 파일을 다시 tar를 이용하여 원래의 파일들로 환원해야 합니다.


xz 툴의 기능을 help를 통해 간단히 살펴보겠습니다.

$ xz --help
Usage: xz [OPTION]... [FILE]...
Compress or decompress FILEs in the .xz format.

  -z, --compress      force compression
  -d, --decompress    force decompression
  -t, --test          test compressed file integrity
  -l, --list          list information about .xz files
  -k, --keep          keep (don't delete) input files
  -f, --force         force overwrite of output file and (de)compress links
  -c, --stdout        write to standard output and don't delete input files
  -0 ... -9           compression preset; default is 6; take compressor *and*
                      decompressor memory usage into account before using 7-9!
  -e, --extreme       try to improve compression ratio by using more CPU time;
                      does not affect decompressor memory requirements
  -q, --quiet         suppress warnings; specify twice to suppress errors too
  -v, --verbose       be verbose; specify twice for even more verbose
  -h, --help          display this short help and exit
  -H, --long-help     display the long help (lists also the advanced options)
  -V, --version       display the version number and exit

With no FILE, or when FILE is -, read standard input.

Report bugs to <lasse.collin@tukaani.org> (in English or Finnish).
XZ Utils home page: <http://tukaani.org/xz/>

압축툴이니 압축 옵션 -c와 해제 옵션 -d만 기억하면 되겠네요.

default가 압축이기 때문에 -c 옵션이 없어도 압축을 해줍니다.


tar로 archieve를 만든다는 가정하에 압축 & 해제를 해보겠습니다.

우선 디렉토리를 하나 선정하여 tar 파일 하나로 묶겠습니다.

$ tar cvf test.tar test
$ ls -lai test.tar
22184223 -rw-rw-r-- 1 storycompiler storycompiler 6430720  7월 16 23:28 test.tar


 inode가 22184223인 6메가 상당의 test.tar 파일로 묶었습니다.

이제 이 파일을 xz로 압축하도록 하겠습니다.

$ xz test.tar 
$ ls -lai test.tar*
22184237 -rw-rw-r-- 1 storycompiler storycompiler 3431476  7월 16 23:28 test.tar.xz

inode가 22184237로 변하였습니다.

새로운 파일을 생성하였네요.

그리고, 확장자 xz가 파일에 붙었습니다.

크기는 6메가에서 3메가로 확연히 줄었습니다.


이제 이 파일의 압축을 해제해보겠습니다.

$ xz -d test.tar.xz 
$ ls -lai test.tar*
22184240 -rw-rw-r-- 1 storycompiler storycompiler 6430720  7월 16 23:28 test.tar

 
inode는 다시 바뀌었습니다.

새로운 파일에 압축을 푼 후에 기존 파일을 지웠나보네요.


그리고 연이어서 tar도 풀면 됩니다.

$ tar xvf test.tar
...


이상으로 압축계의 아이돌 xz에 대한 설명을 마치겠습니다.

그럼 좋은 하루 보내세요~

끝_


* References

http://tukaani.org/xz/

https://en.wikipedia.org/wiki/Xz

https://mail.gnome.org/archives/devel-announce-list/2011-April/msg00008.html