리눅스 압축은 파일이나 디렉토리를 묶어 하나의 파일로 만들거나, 특정 압축 알고리즘을 적용하여 파일 크기를 줄이는 것을 의미한다.
- 묶는 과정은 "아카이브(archive)", 크기를 줄이는 과정은 "압축(compression)"이라고 부른다.
- 리눅스에서는 여러 파일을 묶는 tar 명령어와 다양한 압축 알고리즘(gzip, bzip2, xz 등)을 사용한다.
◆ 파일 묶기 (아카이브) : tar 명령어를 사용하여 여러 파일을 하나의 파일로 묶는다.
◆ 압축 : 묶인 파일 (tar 파일)을 gzip, bzip2, xz 등 압축 알고리즘을 사용하여 압축한다.
◆ 압축 해제 : 압축된 파일 (예: tar.gz, tar.bz2, tar.xz)을 tar 명령어를 사용하여 압축을 풀고 원래 파일을 복원한다.
1. tar
tar파일은 리눅스 및 유닉스에서 가장 많이 사용되는 형태로써 tar로 묶이기 전 파일들의 속성과 디렉터리 구조등을 모두 보존할 수 있고
압축 & 압축해제 등의 작업을 거치면서 파일이 변경, 소실될 염려가 없기 때문에 소스 배포 파일을 만드는 용도로 자주 사용된다.
tar명령을 통해 만들어지는 파일은 보통 ".tar" 확장자를 갖는다.
아카이브를 gzip 또는 bzip2으로 압축된 경우, 파일 뒤에 ".gz" 또는 ".bz2" 확장자를 추가하여 ".tar.gz" 또는 ".tar.bz2"로 파일 이름을 지정할 수 있다.
드물지만 좀 더 간략하게, tar + gzip을 ".tgz"로, tar + bzip2를 ".tb2", ".tbz", "tbz2" 등으로 지정하기도 한다.
보통의 경우에는 tar을 통해 하나로 합쳐진 파일을 gzip 또는 bzip2 방식을 사용하여 압축하는데,
gzip 또는 bzip2 명령을 따로 수행하지 않고 tar 명령의 옵션만으로 처리할 수 있기도 하다.
기본 형식 tar [OPTION] [아카이브FILE명] [FILE|PATH]
[OPTION]
▪ -f : 대상파일을 tar 아카이브 지정 (기본 옵션)
▪ -c : tar 아카이브 생성. 기존 아카이브 덮어 쓰기 (파일 묶을 때 사용)
▪ -x : tar 아카이브에서 파일 추출(파일 풀 때 사용)
▪ -v : 처리되는 과정(파일 정보)을 자세하게 나열
▪ -z : gzip 압축 적용 옵션
▪ -j : bzip2 압축 적용 옵션
▪ -t : tar 아카이브에 포함된 내용 확인
▪ -C : 대상 디렉토리 경로 지정
▪ -A : 아카이브 파일을 tar 아카이브에 추가
▪ -d : tar 아카이브와 파일 시스템 간 차이점 검색
▪ -r : tar 아카이브 마지막에 파일들 추가
▪ -u : tar 아카이브에 새롭게 추가된 파일만 추가
▪ -k : tar 아카이브 추출 시, 기존 파일 유지
▪ -U : tar 아카이브 추출 전, 기존 파일 삭제
▪ -w : 모든 진행 과정에 대해 확인 요청. (interactive)
▪ -e : 첫 번째 에러 발생 시 중지
( 1 ) tar 묶기
# 현재 디렉토리의 모든 파일과 디렉토리를 tar로 묶기
$ tar cvf 파일명.tar *
# 대상 디렉토리를 포함한 모든 파일과 디렉토리를 tar로 묶기
$ tar cvf 파일명.tar [PATH]
# 파일을 지정하여 tar 아카이브로 묶기
$ tar cvf 파일명.tar [FILE_1] [FILE_2]
( 2 ) tar 풀기
# 현재 디렉토리를 tar로 묶고 gzip으로 압축하기
$ tar zcvf 파일명.tar.gz *
# gzip으로 압축된 tar 아카이브를 현재 디렉토리에 풀기
$ tar zxvf 파일명.tar.gz
# 현재 디렉토리를 tar로 묶고 bzip2로 압축하기
$ tar jcvf 파일명.tar.bz2 *
# bzip2로 압축된 tar 아카이브를 현재 디렉토리에 풀기
$ tar jxvf 파일명.tar.bz2
< 리눅스 압축 형식 >
압축형 기본형태 축약 설명
gzip .tar.gz .tgz zip과 같은 압축 알고리즘을 사용하지만 더 용량이 작음.
(다른 파일끼리의 중복되는 부분을 하나로 압축이 가능하기 때문)
xzip .tar.xz .txz LZMA2 압축 알고리즘을 사용하는 7-zip은 윈도우에서만 제공하는데
유닉스에 제공하기위해 사용됨압축효율이 가장 좋음.
bzip .tar.bz2 .tb2, .tbz, .tbz2 용량이 클 때, gzip에 비해 압축률은 좋지만 비교적 느림
Z .tar.Z .tZ ASCII나 바이너리 파일을 의미
lzma .tar.lzma .tlz bzip2보다 더 높은 압축률 제공(최대 4GB)
.tar.lz - LZMA 알고리즘에 기초함무결성을 확인하기 위한 CRC 체크섬이 지원됨
2. compress 명령어
유닉스에서 많이 사용하던 압축 프로그램이다. 하지만 압축률이 낮아 현재는 거의 사용되지 않는다.
compress 명령을 통해 압축한 파일에는 .Z 확장자가 붙는다.
압축 해제는 uncompress 명령어로 하거나 compress 명령어에 옵션 -d를 붙여 압축을 해제하면 된다.
----- 기본 형식 --------------------------------------------------
# 압축하기
$ compress [파일명]
# 압축풀기
$ uncompress [파일명]
[ 옵션 ]
-b maxbits : 최대 비트 수를 제한
-c : 기본 생성 파일인 .Z가 아닌 지정한 파일로 생성
-d : 압축된 파일의 압축을 해제, uncompress 명령과 같은 효과
-f : 기존에 압축한 파일이 존재해도 이를 무시하고 압축 파일을 생성(f는 force의 약자)
-r : 디렉터리를 압축할때 하위 디렉토리 및 하위 파일들도 같이 압축
-v : 압축 진행 여부를 표시
-V : compress 명령어의 버전 정보 출력
3. gzip / gunzip 명령어
gzip 명령어는 GNU zip의 약어로 gzip 명령어를 통해 압축이 성공하면 기존 원본 파일은 모두 사라지고 .gz 확장자를 가진 파일을 새롭게 생성한다.
Linux에서 여러 파일을 압축할 때는 tar 명령어로 파일을 묶고, gzip 명령어를 tar 명령어로 만들어진 아카이브 파일을 압축하기 때문에 단독으로
잘 쓰이지는 않는 편이다.
----- 기본 형식 --------------------------------------------------
# gzip설치
$ apt-get install gzip
# 압축하기
$ gzip [옵션] [파일명]
# 압축풀기
$ gzip -d [파일명]
$ gunzip [파일명]
# 압축된 파일의 내용 확인
$ gzip -l [파일명]
$ zcat [파일명]
[ 옵 션 }
-d : 압축을 풀 때 사용하는 옵션이다.
-1 : 파일의 압축 시간을 줄인다. 이 옵션을 사용하면 압축은 빠르지만 압축률은 떨어진다.
-9 : 파일을 최대로 압축한다. 압축률은 좋아지지만 시간이 많이 걸린다.
-l : 압축 파일에 대한 정보를 출력하는 명령이다.
-v : 진행 과정을 이름 및 퍼센트와 함께 자세히 보여준다.
Ex) test.txt 파일을 test.txt.gz 압축 파일로 압축
$ gzip test.txt
Ex) test.txt.gz 압축 파일을 압축 해제
$ gzip -d test.txt.gz
Ex) 두 개의 파일을 동시에 압축.
- 각각의 파일이 독립적으로 압축하기 때문에 1개의 파일로 합쳐지는 것은 아니다.
$ gzip test.txt test1.txt
Ex) 빠르지만 압축률이 낮은 압축 파일을 생성
$ gzip -1v test.txt
Ex) 느리지만 압축률이 높은 압축 파일을 생성.
$ gzip -9v test1.txt
Ex) test/ 디렉토리 아래에 있는 모든 파일을 느리지만 압축률이 높은 압축 파일로 생성하고, 생성할 때 자세한 내용 출력
$ gzip -9rv test/Copy
4. bzip2 / bunzip2 명령어
버로우즈-휠러 변환이라는 블록 정렬 알고리즘과 허브만 부호화를 사용한 압축 프로그램이다.
- gzip보다 압축률은 좋지만, 압축하는데 더 많은 시간이 걸린다.
- bzip2로 압축하면 파일명 뒤에 .bz2가 붙고, 압축 해제는 bunzip2 명령을 사용한다.
-------- 기본 형식 ----------------------------------------
$ bzip2 [옵션] [압축 파일 이름] [압축 대상 파일, 폴더명]
[ 옵션 ]
-d : 압축을 풀 때 사용하는 옵션이다.
-1 : 파일의 압축 시간을 줄인다. 이 옵션을 사용하면 압축은 빠르지만 압축률은 떨어진다.
-9 : 파일을 최대로 압축한다. 압축률은 좋아지지만 시간이 많이 걸린다.
-c : 결과를 표준 출력으로 보낼 때 사용한다. tar와 병행해서 작업할 때 사용한다.
-t : 압축 파일을 검사한다.
Ex) 압축
$ bzip2 text.txt
Ex) 압축 해제
$ bunzip2 text.txt.bz2
5. xz / unxz 명령어
LZMA2라는 알고리즘을 이용하여 만든 데이터 무손실 압축 프로그램이다.
gzip 및 gzip2와 비교하여 매우 높은 압축률을 자랑한다.
높은 압축률로 인하여 최근 공개용 소프트웨어 사이트에서 이 압축 포맷을 사용하여 파일을 배포하고 있다.
xz로 압축하면 파일명 뒤에 .xz가 붙고, 압축 해제는 unxz 명령을 사용한다.
------ 기본 형식 ----------------------------------
# 압축
$ xz [옵션] [파일명]
# 압축풀기
$ xz -d [파일명]
$ unxz [옵션] [파일명]
[ 옵션 ]
-z : 압축할 때 사용하는 옵션이다. 기본적으로 설정되어 있어서 사용하지 않아도 된다.
-d : 압축을 풀 때 사용하는 옵션이다.
6. zip / unzip 명령어
zip은 여러 파일을 묶고 압축할 수 있는 유틸리티로 tar와는 달리 아카이빙과 압축을 함께 할 수 있는 특징이 있다.
윈도우와 같이 압축 확장자 명은 .zip 이다.
- 이전의 압축명령어와는 달리 마치 윈도우의 zip프로그램 처럼 원본파일이 사라지지않고 그대로 남는다.
- 윈도우에서 주로 사용하는 압축 형태인 zip 파일을 리눅스 서버로 옮겨서 작업하는 경우도 종종 있는데,
윈도우zip파일을 풀때 바로 이 직관적인 명령어를 사용 하면 된다.
--------- zip 기본 형식 ---------------------------------------------------
$ apt-get install zip # zip 설치
$ zip [옵션] [압축 파일명] [압축할 파일명]
[ 옵션 ]
-n : n은 1부터 9까지 숫자의 설정으로, 1이 가장 빠르지만 압축률은 가장 낮음
-r : 하위 디렉터리까지 포함하여 압축
-e : zip 파일에 암호 설정
-x : 압축시 파일 제외
-P : 압축 파일 생성 시 암호를 입력하여 생성
-d : 지정된 위치에 압축 해제
--------- unzip 기본 형식 ---------------------------------------------------
$ unzip [옵션] [파일명]
[ 옵 션 ]
-a : 압축 해제 텍스트 파일을 기본적으로 자동 변환
-L : 파일 이름을 대문자 시스템에서 소문자로 변환
-C : 대소 문자를 구분하지 않고 이름을 일치시킴
-o : 항상 파일을 덮어쓰기
-n : 파일을 추출할 때 파일을 덮어쓰지 않음
Ex) mylog.log를 mylog.zip으로 압축하기(단일 파일 압축)
$ zip mylog.zip mylog.log
Ex) mylog1.log, mylog2.log, mylog3.log를 mylog.zip으로 압축하기(다중 파일 압축)
$ zip mylog.zip mylog1.log mylog2.log mylog3.log
Ex) 현 위치 디렉토리와 하위 디렉토리를 모두 test.zip으로 압축
$ zip -r test.zip ./*
Ex) test.zip 압축 해제
$ unzip test.zip