언제부턴가 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


터미널에 단조롭거나 혹은 촌스럽게 표시되는 색상에서 벗어나려고,

터미널 편집창을 열어 컬러값을 임의로 조정해보았습니다.

하지만, 헛짓이었습니다;


색상 하나하나를 그럴듯하게 골라놓아도,

색상 전체가 조화롭게 어우러지지 않더군요.


이런 색상 선택을 고민한 것은 저 하나가 아닐 것입니다.

컬러감 출중한 수많은 개발자들이 최적의 조합을 찾기 위해 무수히 노력하였습니다.


그리고 하나의 색상 조합으로 중지가 모아지고 있습니다.

그게 바로 solarized 파레트입니다.

색상이 아주 기가 막히네요. :)



solarized는 terminal과 gui 앱에 최적화된 색상을 찾아보자는 착상에서 시작하였습니다.

무수한 색상의 조합을 두고 고민하였죠.

그리고 그 결과로 16개의 색조합을 창출해내었습니다.

색조합에 대한 고민은 아래 사이트에서 엿볼 수 있습니다.

http://ethanschoonover.com/solarized


solarized 색조합을 우분투 터미널 환경에 적용해보기로 하겠습니다.

gnome-terminal, vim, ls 세 군데에 적용하면,

시스템 전체가 달라 보일 겁니다.


gnome-terminal, vim, ls 세 개는 개별적인 프로그램이기에 각각 컬러설정을 해야합니다.

gnome-terminal, vim, ls 순서로 설명하겠지만,

실제 설치 순서는 대세에 영향을 주지 않으므로 원하는 대로 설치하시면 됩니다.

참고로 vim을 컬러설정을 위해서는 반드시 gnome-terminal도 해주세요.


우선 gnome-terminal에 별도의 프로파일을 새로 만드는게 좋습니다.

만에 하나 색상이 맘에 들지 않을 경우 기존 프로파일로 돌아가야지요.

gnome-terminal이 활성화된 상태에서,

상단바 > 편집 > 프로파일 메뉴에 진입합니다.



위에서 "새로 만들기" 버튼을 눌러 새 프로파일 창을 띄웁니다.

프로파일 이름은 원하시는 것으로 적으세요.



여기서는 solarized라는 프로파일을 만들겠습니다.

기본 프로파일은 Default로 지정하시면 됩니다.

"만들기" 버튼을 눌러 프로파일을 생성하세요.



solarized 프로파일이 생성되었습니다.

하단에서 "새 터미널을 실행할 때 사용할 프로파일"을 solarized로 선택합니다.

앞으로 gnome-terminal을 띄울 때 solarized 프로파일에 설정한 컬러파레트를 사용할 겁니다.


gnome-terminal에 solarized 컬러 파레트를 적용하려면 gnome-terminal용 패키지를 설치해야합니다.

아래 주소에 들어가서 오른 편 Download ZIP 버튼을 눌러 압축파일을 받습니다.

https://github.com/Anthony25/gnome-terminal-colors-solarized



2015. 6. 15 기준으로 최신 패키지를 아래에 첨부합니다.

gnome-terminal-colors-solarized-master.zip

패키지를 받고 압축을 풀어보겠습니다.


$ unzip gnome-terminal-colors-solarized-master.zip 
Archive:  gnome-terminal-colors-solarized-master.zip
789f3a13210ccd98c12020f94f2a96ca3346a636
   creating: gnome-terminal-colors-solarized-master/
  inflating: gnome-terminal-colors-solarized-master/LICENSE.mkd 
  inflating: gnome-terminal-colors-solarized-master/README.mkd 
   creating: gnome-terminal-colors-solarized-master/colors/
   creating: gnome-terminal-colors-solarized-master/colors/dark/
  inflating: gnome-terminal-colors-solarized-master/colors/dark/README.md 
  inflating: gnome-terminal-colors-solarized-master/colors/dark/bd_color 
 extracting: gnome-terminal-colors-solarized-master/colors/dark/bg_color 
 extracting: gnome-terminal-colors-solarized-master/colors/dark/fg_color 
  inflating: gnome-terminal-colors-solarized-master/colors/dark/palette 
   creating: gnome-terminal-colors-solarized-master/colors/dark_alternative/
  inflating: gnome-terminal-colors-solarized-master/colors/dark_alternative/README.md 
  inflating: gnome-terminal-colors-solarized-master/colors/dark_alternative/bd_color 
 extracting: gnome-terminal-colors-solarized-master/colors/dark_alternative/bg_color 
 extracting: gnome-terminal-colors-solarized-master/colors/dark_alternative/fg_color 
  inflating: gnome-terminal-colors-solarized-master/colors/dark_alternative/palette 
   creating: gnome-terminal-colors-solarized-master/colors/light/
  inflating: gnome-terminal-colors-solarized-master/colors/light/README.md 
 extracting: gnome-terminal-colors-solarized-master/colors/light/bd_color 
 extracting: gnome-terminal-colors-solarized-master/colors/light/bg_color 
 extracting: gnome-terminal-colors-solarized-master/colors/light/fg_color 
  inflating: gnome-terminal-colors-solarized-master/colors/light/palette 
  inflating: gnome-terminal-colors-solarized-master/install.sh 
  inflating: gnome-terminal-colors-solarized-master/set_dark.sh 
  inflating: gnome-terminal-colors-solarized-master/set_light.sh 
   creating: gnome-terminal-colors-solarized-master/src/
  inflating: gnome-terminal-colors-solarized-master/src/dircolors.sh 
  inflating: gnome-terminal-colors-solarized-master/src/profiles.sh 
  inflating: gnome-terminal-colors-solarized-master/src/set_theme_default_profile.sh 
  inflating: gnome-terminal-colors-solarized-master/src/tools.sh


다양한 파일이 쏟아져 나오네요,

새로운 터미널창을 열고 install.sh를 실행해주세요.


$ ./install.sh 

This script will ask you which color scheme you want, and which Gnome Terminal profile to overwrite.

Please note that there is no uninstall option yet. If you do not wish to overwrite any of your profiles, you should create a new profile before you run this script. However, you can reset your colors to the Gnome default, by running:

    Gnome >= 3.8 dconf reset -f /org/gnome/terminal/legacy/profiles:/
    Gnome < 3.8 gconftool-2 --recursive-unset /apps/gnome-terminal

By default, it runs in the interactive mode, but it also can be run non-interactively, just feed it with the necessary options, see 'install.sh --help' for details.

Please select a color scheme:
1) dark
2) dark_alternative
3) light
#? 1

Please select a Gnome Terminal profile:
1) Default
2) solarized
#? 2

You have selected:

  Scheme:  dark
  Profile: solarized (Profile0)

Are you sure you want to overwrite the selected profile?
(YES to continue) YES
Confirmation received -- applying settings


solarized 설정과 관련된 세가지 질문이 나옵니다.

첫번째는 dark / dark_alternative / light 파레트 중 무엇을 선택하겠느냐는 질문입니다.

터미널 환경에서는 dark가 익숙하기에 여기서는 1번을 선택하였습니다.

두번째에는 파레트를 적용할 터미널 프로파일을 선택해야합니다.

좀 전에 만들어둔 solarized 프로파일을 선택합니다.

세 번째에는 solarized 프로파일에 파레트를 덮어쓰겠냐는 질문입니다.

YES를 입력합니다.

그러면 바로 새로 실행한 터미널에 새로운 컬러파레트가 적용된 것을 보실 수 있습니다.


일부러 색상이 적용되는 파일들을 검색하여 보았습니다.

기본 바탕색과 전경색이 편하게 보입니다.


이번에는 vim에 컬러를 적용해보도록 하겠습니다.

https://github.com/altercation/solarized

위의 사이트에 접속하여 오른편 Download ZIP 버튼을 눌러 vim용 패키지를 받습니다.




2015. 6. 15 기준으로 최신 패키지는 11메가가 넘네요.

vim에 필요한 부분만 압축하여 첨부합니다.

vim-colors-solarized.zip

사이트에서 제공하는 파일이나 첨부된 파일을 다운로드 받으신 후,

unzip 으로 압축을 풀어주세요.

그리고 아래 명령을 수행하면 vim에 대한 설정이 완료됩니다.


$ cd vim-colors-solarized/colors
$ mkdir -p ~/.vim/colors $ mv solarized.vim ~/.vim/colors/


~/.vimrc 파일에 위에서 설치한 solarized를 enable 시켜주세요.

만약 다른 colorscheme을 사용하고 있다면 다른 colorscheme은 주석처리하거나 지워주세요.


syntax enable
set background=dark
colorscheme solarized


이제 vim에도 solarized가 적용되었습니다.

만약 아직 gnome-terminal용 solarized를 적용하지 않았다면, vim에 solarized 파레트가 적용되지 않을 수 있습니다.

왜냐하면 ~/.vim/colors/solarized.vim 파일에는,

아래처럼 터미널에 설정된 파레트값을 참조하는 부분이 있기 때문입니다.


    let s:vmode       = "cterm"
let s:bright = "* term=bold cterm=bold"
let s:base03 = "DarkGray" " 0*
let s:base02 = "Black" " 0
let s:base01 = "LightGreen" " 2*
let s:base00 = "LightYellow" " 3*
let s:base0 = "LightBlue" " 4*
let s:base1 = "LightCyan" " 6*
let s:base2 = "LightGray" " 7
let s:base3 = "White" " 7*
let s:yellow = "DarkYellow" " 3
let s:orange = "LightRed" " 1*
let s:red = "DarkRed" " 1
let s:magenta = "DarkMagenta" " 5
let s:violet = "LightMagenta" " 5*
let s:blue = "DarkBlue" " 4
let s:cyan = "DarkCyan" " 6
let s:green = "DarkGreen" " 2


gnome-terminal과 vim에 solarized를 적용한 상태에서,

C코드를 열면 아래처럼 보이게 되지요.



이제 마지막으로 ls에도 solarized를 적용해보겠습니다.

아래 주소에 방문하여 오른편 Download ZIP 버튼을 누릅니다.



2015. 6. 15 기준으로 최신 패키지를 아래에 첨부합니다.

dircolors-solarized-master.zip

패키지를 받아 unzip으로 압축을 풀어주세요.


우분투 14.04 이후 버전에서는 그저 아래 명령어만 수행하면 됩니다.

$ cp dircolors-solarized-master/dircolors.256dark ~/.dircolors

그 외의 버전에서는,

$ cp dircolors-solarized-master/dircolors.256dark ~/.dircolors

위처럼 복사를 하신 후,

$ vi ~/.profile에 한 줄을 추가해주세요.

eval `dircolors ~/.dircolors`


그리고 ls를 사용하면 아래처럼 좀 더 컬러풀한 화면을 볼 수 있습니다.


설정된 컬러 파레트가 맘에 드셨으면 좋겠네요.

그럼 좋은 하루 보내세요~


끝_


* References

http://ethanschoonover.com/solarized

https://github.com/altercation/solarized

https://github.com/Anthony25/gnome-terminal-colors-solarized

https://github.com/seebi/dircolors-solarized

  1. thx 2015.06.27 19:35

    우왓 정말 감사합니다. ^^

  2. thx 2015.06.27 19:51

    엇 지금 계시는군요 ^^

    우연히 방문했지만 블로그 관리가 정말 잘되어 있네요. 정보도 많고요.

    지금 한창 눈팅하는 중입니다.

    이번 방학기간동안 알고리즘 공부도 하고, algospot 문제 풀면서 vim에 적응해나가야겠네요 ^^

    구경 잘하다가 갈께요 종종 들릴게요. 감사합니다

    • thx님, 감사합니다~!
      방학을 언급하신걸 보니, 학생이신가 보군요.
      7월이 다가오니 정말 방학이 그리워집니다.
      하는 공부마다 결실을 거두시길...
      종종 오세요~

+ Recent posts