개인/리눅스

[리눅스] 압축과 아카이브(tar, gzip, bzip2, xz)

OmeGa2 2020. 2. 12. 18:30

리눅스에서 프로그램을 설치할 때

리눅스에서 사용되는 프로그램은 C언어로 된 소스(source)파일을 tar 형식으로 압축해서 배포된다.

(소스프로그램은 GNU 웹사이트나 관련 프로그램사이트에서 무료로 배포된다.)

 

프로그램은 대부분 여러 배포판들의 패키지관리 기법을 통해 쉽게 설치,관리할 수 있지만, 환경설정을 변경해야하거나, 부득이하게 소스파일로 설치해야 하는 경우도 있다.

 

수동으로 소스파일을 설치할 때 가장 처음에 할 일은 압축된 프로그램을 풀어 내용을 확인하는 것이다.

 

프로그램은 압축도구에 따라 각기 다른 확장자가 붙게 된다.

이때 사용되는  압축도구에는 compress, gzip, bzip2, xz 총 4가지가 존재한다.

 

이번에는 이 네 가지의 압축도구와 tar 명령의 사용법에 대해 알아보려고 한다.

 

tar (tape archive) 와 압축관련 유틸리티

tar 명령은 파일 아카이브라 불리며 원래는 저장소라는 뜻을 가지고 있다.

리눅스에서는 파일을 묶어서 하나로 만든 것이라는 의미로 사용한다.

 

파일로 묶을 때 디렉터리를 지정하면 그 디렉터리의 모든 파일과 서브디렉터리들까지 함께 묶여진다.

또한 파일의 속성이나 허가권, 하드링크, 심볼릭링크 등도 보존할 수 있다.

 

원래 tar는 파일을 묶어주고 풀어주는 기능으로만 사용했지만 현재는 파일을 묶거나 풀 때 압축관련 작업도 동시에 진행할 수 있다.

 

압축 형식

리눅스에서 지원되는 압축형식에는 compress, gzip, bzip2, xz가 있다.

각각 압축형식에 대한 간단한 명령어와 사용방법에 대해 알아보자.

 

1. compress (.Z 확장자) 사용방법

]# compress [파일명] = 압축하기

]# uncompress [파일명] = 압축풀기

유닉스에서 많이 사용하던 압축 프로그램이다. 하지만 압축률이 낮아 현재는 거의 사용되지 않는다.

compress 명령을 통해 압축한 파일에는 .Z 확장자가 붙는다.

 

대부분 리눅스 배포판에서는 기본설치할 때 compress가 제외되어 있다.

그 중 레드햇 리눅스의 경우에는 ncompress 패키지를 설치한다면 사용할 수 있다.

 

compress 패키지 설치

compress를 사용하려면 먼저 yum list 명령을 통해 ncompress가 현재 패키지 저장소에 있는지 확인한다.

이후 yum install 명령으로 패키지를 설치하면 된다.

 

compress 설치완료

 

 

빈파일은 compress 명령을 사용해도 압축되지 않는다. 

file.txt 파일을 만들어 아무런 내용이나 입력한 뒤 용량을 확인해보니 41Byte 라고 나온다.

 

compress 명령을 통해 파일을 압축한다.

다시 파일을 확인해 보니 파일명 뒤에 .Z 가 붙어있으며 용량이 36Byte로 줄어들었다.

uncompress 명령으로 압축풀기도 정상적으로 이루어진다.

 

 

2. gzip (.gz 확장자) 사용방법

]# gzip [옵션] [파일명] = 압축하기

]# gunzip [옵션] [파일명] = 압축풀기

]# zcat [파일명] = 압축된 파일의 내용 확인

-d : 압축풀기

-1 : 압축시간 줄이기 (압축률은 떨어진다.)

-9 : 파일을 최대로 압축 (시간이 오래걸린다.)

-l : 압축파일에 대한 정보 출력

-r : 압축대상이 디렉터리라면 하위디렉터리까지 모두 압축

-v : 진행과정을 %와 함께 자세히 출력한다.

gzip은 GNU zip의 줄임말로 GNU에서 만든 압축프로그램이다.

compress를 대체하기 위해 만들어졌으며 압축률을 조정하는 등 다양한 옵션을 제공한다.

 

gzip 을 통한 압축

gzip 명령을 통해 file.txt 파일을 압축해보았다.

압축 이후 파일명 뒤에 .gz 가 붙어있고 512byte 에서 56byte로 줄어든 것을 확인할 수 있다.

 

압축된 파일에 관련된 정보는 gzip -l 을 통해 확인할 수 있다.

 

 

gunzip을 통한 압축해제
gzip -d 를 통한 압축해제

압축된 파일을 풀기 위해서는 gunzip 명령이나 gzip -d 명령이 있다.

두 가지 명령은 같은 결과를 보여주며 사용자의 편의에 맞게 사용하면 된다.

 

또한 gzip에서는 -1 ~ -9 옵션을 통해 압축률을 조정할 수 있다.

gzip -1 부터 gzip -9 사이 몇가지 압축률을 확인해보았다.

-l 명령어를 통해 확인해보면 -1보다 -9가 압축률이 1%가 높게 나오는것을 볼 수 있다.

 

파일의 크기에 따라 압축률은 차이가 있을 수 있다.

 

 

3. bzip2 (.bz2 확장자) 사용방법

]# bzip2 [옵션] [파일명] = 압축하기

]# bunzip2 [옵션] [파일명] = 압축풀기

-d : 압축풀기

-1 : 압축시간을 줄인다. (압축률은 떨어진다.)

-9 : 파일을 최대로 압축

-f : 존재하는 파일을 덮어쓰기한다.

줄리안 시워드가 만든 압축프로그램으로 블록정렬 알고리즘을 사용한다.

기본적인 사용법은 gzip과 동일하며 gzip보다 압축률은 좋지만 압축시간은 더 걸린다.

(다만, gzip의 -l 옵션은 bzip2에서는 사용할 수 없다.)

 

압축한 파일명 뒤에는 .bz2 가 붙어서 나온다.

 

bzip2과 gzip 비교

사용법과 옵션이 모두 gzip과 동일하기 때문에 자세한 설명은 생략한다.

 

동일한 file.txt 파일을 gzip / bzip2 두 가지 형식으로 압축해보았다.

 

gzip 파일은 132 byte를 가지고 있는 반면 bzip2 파일은 86byte를 가지고 있다.

이는 압축률을 조절하는 -1 ~ -9 옵션 없이 사용한 압축파일이다.

따라서 기본적인 압축률은 bzip2 이 더 좋다는 것을 확인할 수 있다.

 

 

3. xz (.xz 확장자) 사용방법

]# xz [옵션] [파일명]

]# unxz [옵션] [파일명]

-d : 압축풀기

xz는 데이터 무손실 압축프로그램이다.

gzip과 bzip2 에서 사용하는 압축률 조절 옵션(-1~-9)기능이 없지만,

다른 압축파일에 비해 매우 높은 압축률을 자랑한다.

 

xz로 압축한 파일은 파일명 뒤에 .xz 이 붙는다.

 

명령어 사용법은 gzip이나 bzip2와 동일하다.

다만, 다른 압축프로그램보다 시간이 조금 더 걸린다.

 

 

tar 사용법

]# tar [옵션] [파일명]

-c : 지정된 파일이나 디렉터리를 묵어 하나의 tar파일 생성

-x : 생성된 tar파일 풀기

-v : 작업중 대상이 되는 파일을 보여준다.

-f : 작업대상의 tar파일에 대한 이름 지정

-r : 기존의 tar 파일 안에 다른파일 추가

-t : tar 파일에 묶인 파일의 목록 출력

-Z : compress 관련 옵션 tar.Z 파일 생성에 사용

-z : gzip 관련 옵션으로 tar.gz 파일 생성에 사용

-j : bzip2 관련 옵션으로 tar.bz2 파일 생성에 사용

-J : xz 관련 옵션으로 tar.xz 파일 생성에 사용 

tar은 리눅스에서 여러개의 파일이나 디렉터리를 하나로 묶는데에 사용된다.

파일을 묶을 때 여러 압축프로그램과 관련된 옵션을 동시에 사용할 수 있다.

 

즉, 파일을 묶으면서 압축을 동시에 진행할 수 있다.

 

tar에서는 옵션을 사용할 때 주로 "-" 기호를 사용하지 않아도 무관하다.

 

1. 여러개의 파일을 하나로 묶기

 

tar cvf [파일명] [묶을파일]

tar를 이용해서 5개의 log파일을 하나로 묶어보았다.

파일을 묶을 때는 기본적으로 cvf 옵션을 동시에 사용해야 한다.

 

v옵션을 사용했기 때문에 묶이는 파일이 모두 출력되었으며,

f 옵션을 이용해서 생성될 파일명을 [log.tar]로 지정했다. 

(파일명을 지정하지 않으면 진행과정만 출력될 뿐, tar파일이 생성되지 않는다.)

 

기존에 있던 파일은 그대로 존재하고 새로운 파일에 묶여있다.

 

 

2. tar 묶인 파일 확인

 

 

tar tvf [파일명]

tar 파일 안에 어떤 파일 들이 묶여있는지 확인하기 위해서는 t 옵션을 사용한다.

 

기본적으로 tf 옵션만으로 파일의 내용을 확인할 수 있다.

이후 파일의 내용을 자세히 확인하기 위해서는 v옵션을 같이 사용한다.

 

 

3. tar 파일 풀기

 

tar xvf [파일명]

tar로 묶인 파일을 풀기 위해서는 xvf 옵션을 사용한다.

파일을 풀고 나서 확인해 보면 기존의 tar파일은 그대로 보존되고,

묶였던 log 파일 5개가 풀려 나와있는것을 볼 수 있다.

 

 

4. tar과 압축프로그램의 사용

 

tar에서는 각 압축프로그램에 관련된 옵션을 이용해서 묶음과 동시에 압축할 수 있다.

(z = gz / j = bz2 / J = xz)

 

tar에서 압축에 사용되는 z, j, J 세 개의 옵션은 묶인 파일을 풀 때도 마찬가지로 사용한다.

(압축을 풀면서 묶였던 파일을 푼다.)

 

]# tar cvf [파일명] [묶을파일] = tar파일 생성

]# tar rvf [파일명] [묶을파일] = 기존 tar파일에 다른파일 추가로 묶기

]# tar xvf [파일명] = tar파일 풀기

]# tar tvf [파일명] = tar파일에 묶인 파일 확인