아카이버 및 컴프레서 - 윈디하나의 솔라나라
|
.br
확장자를 가진다. woff2 웹 폰트에서 사용되는 압축 알고리즘이 이 알고리즘이다.유닉스에서 흔이 사용되는 아카이버/컴프레서를 확장자별로 정리했다. 해당 파일을 처리할 수 있는 유틸리티 이름도 같이 정리했다.
확장자 | 설명 | 컴프레서/아카이버 |
.z 1) | pack 컴프레서 파일 | pack(1) |
.Z | compress 컴프레서 파일 | compress(1) |
.gz | GZip 컴프레서 파일 | gzip(1) |
.bz2 | BZip2 컴프레서 파일 | bzip2(1) |
.br | Brotli 컴프레서 파일 | brotli(1) |
.xz | XZ 컴프레서 파일 | xz(1) |
.lzma | LZMA 컴프레서 파일 | lzma(1), xz(1) |
.lz | LZip 컴프레서 파일 | lzip(1) |
.lzo | lzop 컴프레서 파일 | lzop(1) |
.a 2), .ar | ar 아카이버 파일 | ar(1) |
.tar | tar 아카이버 파일 | tar(1) |
.cpio | cpio 아카이버 파일 | cpio(1) |
.7z | 7Zip 아카이버/컴프레서 파일 | 7za(1) |
.zip | Zip 아카이버/컴프레서 파일 | zip(1) |
.z
파일의 압축을 풀려면 gunzip(1)을 사용하자. .a
파일은 흔히 정적 라이브러리(Static Library)를 말한다.
.o
(C Object) 파일을 ar(1)을 사용해 아카이빙한 것이 .a
확장자를 가진 정적 라이브러리파일이다. 모든 유닉스에서 지원하며, /usr/include/ar.h
을 열어보면 포맷에 대한 설명이 있다. (운영체제마다 포맷이 다르다) ar이란 이름은
ARchive에서 유래했다. ar(1) 의 테입용 커맨드가 바로 tar(1)이다.
tar는
Tape ARchive에서 유래했다.
root@wl ~/src # wget https://sourceforge.net/projects/p7zip/files/p7zip/16.02/p7zip_16.02_src_all.tar.bz2/download root@wl ~/src # tar xvfj p7zip_16.02_src_all.tar.bz2 root@wl ~/src # cd p7zip_16.02 root@wl ~/src/p7zip_16.02 # cp makefile.solaris_sparc_CC_64 makefile.machine root@wl ~/src/p7zip_16.02 # vi makefile.machine 1) OPTFLAGS=-fast -m64 -s root@wl ~/src/p7zip_16.02 # make 2) 3) root@wl ~/src/p7zip_16.02 # make install1) 64비트로 컴파일한다.
#pragma pack(push, n)
와 #pragma pack(pop)
을 지원하지 않기 때문에 아래와 같이 수정해서 컴파일 해야 한다. 그 이후 버전을 사용하거나, GCC를 사용한다면 수정할 필요 없다.root@wl ~/src/p7zip_16.02 # vi C/Ppmd.h #pragma pack(1) // 31 라인 ... #pragma pack(16) // 53라인 root@wl ~/src/p7zip_16.02 # vi C/Ppmd8.h #pragma pack(1) // 27 라인 ... #pragma pack(16) // 38 라인3)
make
명령만 수행시 7zr(1), 7z(1) 은 빌드되지 않는다. 이 유틸리티들은 7za 의 기능을 분리해 만든 것으로, 7za 는 아카이브 관리를 위한 독립적인 실행파일, 7z 은 공유 라이브러리를 사용하는 아카이브 관리용 실행파일, 7zr 은 7z 파일만 관리할 수 있는 독립적인 실행파일이다. 7zr 과 7z 을 설치하려면 make all3
명령을 사용해 빌드를 해주어야 한다. 자세한 사항은 README
파일을 읽어보자.솔라리스 11.4에서는 XZ 5.2.3을 기본제공하기 때문에 별도로 설치할 필요 없다.
windy@wl ~/src $ wget https://tukaani.org/xz/xz-5.2.5.tar.bz2 windy@wl ~/src $ tar xvfj xz-5.2.5.tar.bz2 windy@wl ~/src $ cd xz-5.2.5 windy@wl ~/src/xz-5.2.5 $ ./configure CFLAGS="-m64" windy@wl ~/src/xz-5.2.5 $ make windy@wl ~/src/xz-5.2.5 $ sudo make install
XZ를 설치하면 liblzma 도 같이 설치된다.
lzip(1)은 아래와 같이 설치할 수 있다.
windy@wl ~/src $ wget https://download.savannah.gnu.org/releases/lzip/lzip-1.21.tar.gz windy@wl ~/src $ tar xvfz lzip-1.21.tar.gz windy@wl ~/src $ cd lzip-1.21 windy@wl ~/src/lzip-1.21 $ ./configure CXX=CC CXXFLAGS="-O3 -m64" windy@wl ~/src/lzip-1.21 $ make windy@wl ~/src/lzip-1.21 $ sudo cp lzip /usr/local/bin 1) windy@wl ~/src/lzip-1.21 $ sudo cp ./doc/lzip.1 "/usr/local/share/man/man1/lzip.1" 1)1) Makefile에서 install 스크립트가 GNU CoreUtils의 install기준이라 솔라리스의 install과 호환되지 않는다. 실행 파일만 필요하기 때문에 복사해서 사용한다.
lunzip(1)도 아래와 같이 설치해주자.
windy@wl ~/src $ wget https://download.savannah.gnu.org/releases/lzip/lunzip/lunzip-1.9.tar.gz windy@wl ~/src $ tar xvfz lunzip-1.9.tar.gz windy@wl ~/src $ cd lunzip-1.9 windy@wl ~/src/lunzip-1.9 $ ./configure CC=cc CFLAGS="-O3 -m64" windy@wl ~/src/lunzip-1.9 $ make windy@wl ~/src/lunzip-1.9 $ sudo cp ./lunzip "/usr/local/bin/lunzip" 1) windy@wl ~/src/lunzip-1.9 $ sudo cp ./doc/lunzip.1 "/usr/local/share/man/man1/lunzip.1" 1)1) Makefile에서 install 스크립트가 GNU CoreUtils의 install기준이라 솔라리스의 install과 호환되지 않는다. 실행 파일만 필요하기 때문에 복사해서 사용한다.
lziprecover(1)도 설치하자. lzip 파일에 비트 플립이 일어난 경우 고칠 수 있다.
windy@wl ~/src $ wget https://download.savannah.gnu.org/releases/lzip/lziprecover/lziprecover-1.21.tar.gz windy@wl ~/src $ tar xvfz lziprecover-1.21.tar.gz windy@wl ~/src $ cd lziprecover-1.21 windy@wl ~/src/lziprecover-1.21 $ ./configure CXX=CC CXXFLAGS="-O3 -m64" windy@wl ~/src/lziprecover-1.21 $ make windy@wl ~/src/lziprecover-1.21 $ sudo cp ./lziprecover "/usr/local/bin/lziprecover" windy@wl ~/src/lziprecover-1.21 $ sudo cp ./doc/lziprecover.1 "/usr/local/share/man/man1/lziprecover.1"
# wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz
# tar xvfz lzo-2.10.tar.gz
# cd lzo-2.10
# ./configure 1)
# make
# sudo make install
1) 64비트로 빌드하려면 CFLAGS="-m64" LDFLAGS="-m64"
을 붙인다.
liblzo 를 설치한 후 아래와 같이 설치할 수 있다.
root@wl ~/src # wget http://www.lzop.org/download/lzop-1.03.tar.gz root@wl ~/src # tar xvfz lzop-1.03.tar.gz root@wl ~/src # cd lzop-1.03 root@wl ~/src/lzop-1.03 # ./configure CPPFLAGS="-I/usr/local/include" root@wl ~/src/lzop-1.03 # make root@wl ~/src/lzop-1.03 # make installlzop(1)는 자체적으로 병렬화를 지원하지 않지만, parallel(1)을 사용해 병렬로 실행 시킬 수 있다. 자세한 것은 윈디하나의 솔라나라: GNU Parallel (작성중)을 참조하자.
windy@wl ~/src $ wget https://github.com/google/brotli/archive/v1.0.7.tar.gz windy@wl ~/src $ tar xvfz brotli-1.0.7.tar.gz windy@wl ~/src $ cd brotli-1.0.7 windy@wl ~/src/brotli-1.0.7 $ mkdir out windy@wl ~/src/brotli-1.0.7 $ cd out windy@wl ~/src/brotli-1.0.7/out $ ../configure-cmake CFLAGS="-m64" windy@wl ~/src/brotli-1.0.7/out $ make windy@wl ~/src/brotli-1.0.7/out $ sudo make install
요즘에 개발되는 컴프레서는 압축 알고리즘 설계할때 부터 멀티 쓰레드환경을 고려해서 개발된다. p*
명령어들이 그것이다.
bzip2 의 병렬화 버전이다. 솔라리스 11.4 에는 pbzip2 1.1.13 을 기본 제공하기 때문에 별도로 설치할 필요 없다.
root@wl ~/src # wget https://launchpad.net/pbzip2/1.1/1.1.13/+download/pbzip2-1.1.13.tar.gz root@wl ~/src # tar xvfz pbzip2-1.1.13.tar.gz root@wl ~/src # cd pbzip2-1.1.13 root@wl ~/src/pbzip2-1.1.13 # mv Makefile.solaris.sunstudio Makefile root@wl ~/src/pbzip2-1.1.13 # vi Makefile PREFIX = /usr/local CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 root@wl ~/src/pbzip2-1.1.13 # make root@wl ~/src/pbzip2-1.1.13 # make install
xz 의 병렬화 버전이다. 솔라리스 11.4 에는 pixz 1.0.6 을 기본 제공하기 때문에 별도로 설치할 필요 없다. 소스설치에는 lzma 라이브러리(xz설치시에 같이 설치됨)와 libarchive가 필요하다.
root@wl ~/src # wget http://www.libarchive.org/downloads/libarchive-3.1.2.tar.gz root@wl ~/src # tar xvfz libarchive-3.1.2.tar.gz root@wl ~/src # cd libarchive-3.1.2 root@wl ~/src/libarchive-3.1.2 # ./configure root@wl ~/src/libarchive-3.1.2 # vi Makefile COMMON_CFLAGS = root@wl ~/src/libarchive-3.1.2 # make root@wl ~/src/libarchive-3.1.2 # make install설치 전에 Automake 1.15 버전을 설치해놓자. 또한 MAN 페이지 컴파일을 위해 asciidoc을 설치해놓자.
root@wl ~/src # wget http://downloads.sourceforge.net/project/asciidoc/asciidoc/8.6.9/asciidoc-8.6.9.tar.gz root@wl ~/src # tar xvfz asciidoc-8.6.9.tar.gz root@wl ~/src # cd asciidoc-8.6.9 root@wl ~/src/asciidoc-8.6.9 # ./configure root@wl ~/src/asciidoc-8.6.9 # make root@wl ~/src/asciidoc-8.6.9 # make installpixz 를 설치할 차례다.
root@wl ~/src # wget https://github.com/vasi/pixz/releases/download/v1.0.6/pixz-1.0.6.tar.xz
root@wl ~/src # tar xvfJ pixz-1.0.6.tar.xz
root@wl ~/src # cd pixz-1.0.6
root@wl ~/src/pixz-1.0.6 # vi src/Makefile.am
pixz_CFLAGS = $(PTHREAD_CFLAGS)
root@wl ~/src/pixz-1.0.6 # ./configure CFLAGS="-I/usr/local/include -llzma -larchive -lm"
root@wl ~/src/pixz-1.0.6 # /usr/sfw/bin/make 1)
root@wl ~/src/pixz-1.0.6 # cp ./src/pixz /usr/local/bin
1) Man 페이지 생성할때 나는 오류는 무시하자.
lzip 의 병렬화 버전이다. 설치하기 전에 lzlib 을 먼저 설치해야 한다.
windy@wl ~/src $ wget https://download.savannah.gnu.org/releases/lzip/lzlib/lzlib-1.11.tar.gz windy@wl ~/src $ tar xvfz lzlib-1.11.tar.gz windy@wl ~/src $ cd lzlib-1.11 windy@wl ~/src/lzlib-1.11 $ ./configure CC=cc CFLAGS="-O3 -m64" windy@wl ~/src/lzlib-1.11 $ make windy@wl ~/src/lzlib-1.11 $ sudo cp ./lzlib.h "/usr/local/include/lzlib.h" windy@wl ~/src/lzlib-1.11 $ sudo cp ./liblz.a "/usr/local/lib/liblz.a"
lzlib 을 설치했으면 아래와 같이 설치할 수 있다.
windy@wl ~/src $ wget https://download.savannah.gnu.org/releases/lzip/plzip/plzip-1.8.tar.gz windy@wl ~/src $ tar xvfz plzip-1.8.tar.gz windy@wl ~/src $ cd plzip-1.8 windy@wl ~/src/plzip-1.8 $ ./configure CXX=CC CXXFLAGS="-m64 -O2 -I/usr/local/include" windy@wl ~/src/plzip-1.8 $ make windy@wl ~/src/plzip-1.8 $ sudo cp ./plzip "/usr/local/bin/plzip" windy@wl ~/src/plzip-1.8 $ sudo cp ./doc/plzip.info "/usr/local/share/info/plzip.info" windy@wl ~/src/plzip-1.8 $ sudo cp ./doc/plzip.1 "/usr/local/share/man/man1/plzip.1"
root@wl ~ # 7za a -p1234 -t7z -mx=9 src.7z ./src
a: 추가 -p: 패스워드 -t: 7z 형식으로 압축 -m 옵션은 -t 옵션에 영향 받는다. 여기서 설명하는건 7z 형식에 대한 -m 옵션이다. -mx: 압축 레벨. 0,1,5,7,9 중 하나. 기본값은 5 -ms: 솔리드 모드 사용 여부. 기본값은 on -mf: 압축 필터 사용 여부. 기본값은 on -mhc: 아카이브 헤더 압축 여부. 기본값은 on -mhe: 아카이브 헤더 암호화 여부. 기본값은 off -m0: 사용할 0번 (최우선순위) 알고리즘. 기본값은 lzma -mmt: 멀티스레딩 모드 사용 여부. 기본값은 on
root@wl ~ # 7za a -tzip -mm=lzma src.zip ./src
a: 추가 -t: zip 형식으로 압축 -m 옵션은 -t 옵션에 영향 받는다. 여기서 설명하는건 7z 형식에 대한 -m 옵션이다. -mm: 압축 메소드 지정
7za x
명령을 사용하면 된다. 압축 형식, 메소드 등은 자동으로 판단해 알맞는 알고리즘을 써서 압축을 풀어준다.
root@wl ~ # 7za x src.7z
root@wl ~ # xz src.tar root@wl ~ # unxz src.tar.xzxz(1) 유틸리티는
.lzma
형식의 파일도 다룰 수 있다.
root@wl ~ # xz --format=lzma src.tar root@wl ~ # unxz src.tar.lzma
-J
옵션을 사용하면 xz(1) 와 같이 압축 하거나 풀 수 있다.
root@wl ~ # tar cvfJ src.tar.xz src root@wl ~ # tar xvfJ src.tar.xz참고로 GNU tar 에서 지원하는 아카이브 필터는 다음과 같다.
-j, --bzip2 bzip2 -J, --xz xz --lzip lzip --lzma lzma --lzop lzo -z, --gzip, --gunzip, --ungzip gzip -Z, --compress, --uncompress compress여기에 없는 옵션도 -I 옵션을 사용해 임의의 필터 프로그램을 지정할 수 있다.
tar xvf helloworld-1.0.tar.lz -I /usr/local/bin/lzip
과 tar xvf helloworld-1.0.tar.lz --lzip
은 같다.
RSS ATOM XHTML 5 CSS3 |
Copyright © 2004-2024 Jo HoSeok. All rights reserved. |