본문 바로가기

Operating Systems/Linux

[ Linux ] 파일 압축 및 해제

ZIP

필 캐츠(Phil Katz)가 1989년 만든 무손실 압축 포맷
여러개의 파일을 압축해서 하나의 파일로 만들기위해 개발됨

 

zip 압축

zip [압축파일명.zip] [압축대상파일명1] [압축대상파일명2] [압축대상파일명3] ...

 

zip 파일 압축 해제

unzip [압축파일명].zip

# xz 파일이 없을경우 centos는 [ yum -y install zip unzip ]
# ubuntu는 [ apt-get -y install zip unzip ] 을 이용하여 설치

rm -rf /tmp/*

rm -rf /app/tmp/*

mkdir -p /app/tmp

cd /app/tmp

touch file01

touch file02

touch file03

# 개별 파일 압축
zip file01.zip file01 file02 file03

# 압축 정보 확인
unzip -l file01.zip

# 절대 경로 파일명 압축
zip /app/tmp/file02.zip /app/tmp/file01 /app/tmp/file02 /app/tmp/file03

# 절대 경로가 아닌 상대 경로로 저장되는 것 확인
unzip -l file02.zip

zip file03.zip *

# 모든 파일이 저장되는 것 확인
unzip -l file03.zip

zip file04.zip * -x "*.zip"

# zip 파일 제외하고 저장된 것 확인
unzip -l file04.zip

mkdir /app/tmp/dir01

mv /app/tmp/file01 /app/tmp/file02 /app/tmp/file03 /app/tmp/dir01/

zip /app/tmp/file05.zip dir01

# 디렉토리만 압축되는 것 확인
unzip -l file05.zip

zip -r /app/tmp/file06.zip dir01

# 하위 파일까지 압축되는 것 확인
unzip -l file06.zip

# zip 파일 제외하고 삭제
rm -rf `find /app/tmp/ -name "*" | grep "^/app/tmp/." | grep -v "\.zip$"`

# 압축 풀기
unzip /app/tmp/file01.zip

ls -l

# 압축 폴더 지정하여 압축 풀기
unzip file01.zip -d /tmp

ls -l /tmp

# 전체 경로로 지정되어 있는 파일 압축풀기
unzip /app/tmp/file02.zip

# 압축 해제 확인
ls -la

 

TAR ( Tape ARchive )
tar파일, tarball

과거 자기테이프를 기억 매체로 사용하던 시절 데이터 관리를 보다 효율적으로 하기 위해 개발됨
압축이 아닌 파일을 하나로 묶는 역활만 하기 때문에 처리 속도가 빠르다.
입축할때 압축 파일 대상명 경로 전체를 상대경로로 저장한다.

[ tar 압축 ]
tar -cvf [압축파일명.tar] [압축대상파일명1] [압축대상파일명2] [압축대상파일명3] ...
-c : Create
-v : Verbose
-f : File

[ tar 파일 리스트 확인 ]
tar -tvf [압축파일명.tar]
-t : --lisT

[ tar 파일 압축 해제 ]
-x : --eXtract
tar -tvf [압축파일명.tar]
tar -tvf [압축파일명.tar] -C [압축 해제 폴더]

rm -rf /tmp/*

rm -rf /app/tmp/*

mkdir -p /app/tmp

cd /app/tmp

touch file01

touch file02

touch file03

# 개별 파일 압축
tar -cvf /app/tmp/tar01.tar file01 file02 file03

# 압축 정보 확인
tar -tvf /app/tmp/tar01.tar

# 절대 경로 파일명 압축
tar -cvf /app/tmp/tar02.tar /app/tmp/file01 /app/tmp/file02 /app/tmp/file03

# 절대 경로가 아닌 상대 경로로 저장되는 것 확인
tar -tvf /app/tmp/tar02.tar

# 절대 경로 옵션 P를 주어 압축
tar -cvPf /app/tmp/tar03.tar /app/tmp/file01 /app/tmp/file02 /app/tmp/file03

# 절대 경로로 저장되는 것 확인
tar -tvf /app/tmp/tar03.tar

tar -cvf /app/tmp/tar04.tar *

# 모든 파일이 저장되는 것 확인
tar -tvf /app/tmp/tar04.tar

tar -cvf /app/tmp/tar05.tar * --exclude=*.tar

# tar 파일 제외하고 저장된 것 확인
tar -tvf /app/tmp/tar05.tar

mkdir /app/tmp/dir01

mv /app/tmp/file01 /app/tmp/file02 /app/tmp/file03 /app/tmp/dir01/

tar -cvf /app/tmp/tar06.tar dir01

# 디렉토리 압축되는 것 확인
tar -tvf /app/tmp/tar06.tar

# tar 파일 제외하고 삭제
rm -rf `find /app/tmp/ -name "*" | grep "^/app/tmp/." | grep -v "\.tar$"`

# 압축 풀기
tar -xvf /app/tmp/tar01.tar

ls -l /tmp

# 압축 폴더 지정하여 압축 풀기
tar -xvf /app/tmp/tar01.tar -C /tmp

ls -l /tmp

# 절대 경로로 지정되어 있는 파일 압축풀기
tar -xvPf /app/tmp/tar03.tar

# 압축 해제 확인
ls -la

 

Z ( Zip )
Z파일

UNIX에서 제공하는 기본 압축 파일
파일 하나만을 압축하기 때문에 tar를 사용하여 파일을 묶은 후

압축하는 방식을 사용

리눅스 계열에서는 GZ 를 통해 사용된다. 

 

Z 압축

compress [파일명]

 

Z 파일 압축 해제

uncompress [파일명]

 

GZ ( GNU Zip )
gz파일

ZIP 파일과 같이 DEFLATE 알고리즘을 사용하여 압축 기능을 처리
 여러 파일을 하나로 압축하는 옵션이 존재하지 않아 보통 tar를 사용하여 파일을 묶은 후
다시 GZ를 사용하여 압축하는 방식을 사용한다.

 

gz 압축

-c : stdout

gzip [압축파일명]

 

gz 파일 압축 해제

gzip -d [압축파일명].gz

# gzip 파일이 없을경우 centos는 [ yum -y install gzip ]
# ubuntu는 [ apt-get -y install gzip ] 을 이용하여 설치

rm -rf /app/tmp/*

cd /app/tmp

touch file01

gzip file01

# 원본파일이 유지되지 않음
ls -l

touch file02

# 표준출력으로 압축내용 출력해 file02를 생성하여 원본파일 유지 압축
gzip -c file02 > file02.gz

touch file03

# 압축할때 상세 정보 출력
gzip -v file03

# 파일 하나만 압축하기 때문에 보통 tar 압축으로 파일을 모은 후에
# gz로 압축을 함
# tar에 한꺼번에 gz까지 압축하는 옵션을 제공을 함
tar -cvzf targz01.tar.gz *

rm -rf /tmp/*

# 압축 풀기
tar -xvzf targz01.tar.gz -C /tmp

ls -l /tmp

rm -rf /tmp/*

# tar 압축 해제
gzip -d targz01.tar.gz

tar -xvf targz01.tar -C /tmp

ls -l /tmp

# tar 압축
tar -cvzf targz02.tar.gz *

# 원본 파일 유지하여 압축 풀기
gzip -d -c targz02.tar.gz > targz02.tar

rm -rf /tmp/*

tar -xvf targz02.tar -C /tmp

ls -l /tmp

 

BZ ( Burrows wheeler ZIP )
bz파일

버로우즈-휠러 변환 기반이 알고리즘을 사용하여 압축 기능을 처리
gzip 과 마찬가지로 파일 하나만을 압축하기 때문에 tar를 사용하여 파일을 묶은 후
BZ를 사용하여 압축하는 방식을 사용한다.

 

bz 압축

-c : stdout

bzip2 [압축파일명]

 

bz 파일 압축 해제

bzip2 -d [압축파일명].bz2

# bzip2 파일이 없을경우 centos는 [ yum -y install bzip2 ]
# ubuntu는 [ apt-get -y install bzip2 ] 을 이용하여 설치

rm -rf /app/tmp/*

cd /app/tmp

touch file01

bzip2 file01

# 원본파일이 유지되지 않음
ls -l

touch file02

# 표준출력으로 압축내용 출력해 file02를 생성하여 원본파일 유지 압축
bzip2 -c file02 > file02.bz2

touch file03

# 압축할때 상세 정보 출력
bzip2 -v file03

# 파일 하나만 압축하기 때문에 보통 tar 압축으로 파일을 모은 후에
# bz로 압축을 함
# tar에 한꺼번에 bz까지 압축하는 옵션을 제공을 함
tar -cvjf tarbz01.tar.bz2 *

rm -rf /tmp/*

# 압축 풀기
tar -xvjf tarbz01.tar.bz2 -C /tmp

ls -l /tmp

rm -rf /tmp/*

# tar 압축 해제
bzip2 -d tarbz01.tar.bz2

tar -xvf tarbz01.tar -C /tmp

ls -l /tmp

# tar 압축
tar -cvjf tarbz02.tar.bz2 *

# 원본 파일 유지하여 압축 풀기
bzip2 -d -c tarbz02.tar.bz2 > tarbz02.tar

rm -rf /tmp/*

tar -xvf tarbz02.tar -C /tmp

ls -l /tmp

 

XZ
xz파일

LZMA2 압축 알고리즘을 사용하여 압축 기능을 처리
파일 하나만을 압축하기 때문에 tar를 사용하여 파일을 묶은 후
XZ를 사용하여 압축하는 방식을 사용한다.

압축 알고리즘중 가장 높은 압축률을 지원한다.

 

xz 압축

-c : stdout

xz [압축파일명]

 

xz 파일 압축 해제

xz -d [압축파일명].xz

# xz 파일이 없을경우 centos는 [ yum -y install xz ]
# ubuntu는 [ apt-get -y install xz ] 을 이용하여 설치

rm -rf /app/tmp/*

cd /app/tmp

touch file01

xz file01

# 원본파일이 유지되지 않음
ls -l

touch file02

# 표준출력으로 압축내용 출력해 file02를 생성하여 원본파일 유지 압축
xz -c file02 > file02.xz

touch file03

# 압축할때 상세 정보 출력
xz -v file03

# 파일 하나만 압축하기 때문에 보통 tar 압축으로 파일을 모은 후에
# xz로 압축을 함
# tar에 한꺼번에 xz까지 압축하는 옵션을 제공을 함
tar -cvJf tarxz01.tar.xz *

rm -rf /tmp/*

# 압축 풀기
tar -xvJf tarxz01.tar.xz -C /tmp

ls -l /tmp

rm -rf /tmp/*

# tar 압축 해제
xz -d tarxz01.tar.xz

tar -xvf tarxz01.tar -C /tmp

ls -l /tmp

# tar 압축
tar -cvJf tarxz02.tar.xz *

# 원본 파일 유지하여 압축 풀기
xz -d -c tarxz02.tar.xz > tarxz02.tar

rm -rf /tmp/*

tar -xvf tarxz02.tar -C /tmp

ls -l /tmp

 

※ 압축률 비교

rm -rf /app/tmp/*

cd /app/tmp

fallocate -l 10000k /app/tmp/file01

zip file01.zip file01

tar -cvf /app/tmp/file01.tar file01

gzip -c file01 > file01.gz

bzip2 -c file01 > file01.bz2

xz -c file01 > file01.xz

# 압축률
# xz > bz > gz == zip > tar
du /app/tmp/*

 

'Operating Systems > Linux' 카테고리의 다른 글

[ Linux ] 방화벽 서버 설치  (0) 2021.11.20
[ Linux ] FIND 활용  (0) 2021.10.25
[ Linux ] PXE 서버 설치 [ 임시 작성 ]  (0) 2021.10.21
[ Linux ] PROXY 서버 설치  (0) 2021.10.20
[ Linux ] RAID 활용 ( 2 / 2 ) - Ubuntu20  (0) 2021.10.18