뭉게뭉게 엔지니어

Compress(tar,gzip,bzip2) 본문

☁ Server/기초 따라가기

Compress(tar,gzip,bzip2)

어푸어푸🌊 2022. 7. 17. 12:31

여러 개의 파일을 하나로 만드는 방법으로는 묶음압축 이 있다.

무엇인지 설명하기 전에 이미 이름에서 감이 오니까 그 용도를 우선적으로 살펴보자!

 - 배포의 편리성 : 데이터를 빠르고, 편리하게 송·수신 하기 위해 사용한다.
 - 파일 관리의 편리성 : 대용량의 데이터를 보관하기 위해 사용한다.

 

묶음은 단순하게 파일을 하나로 묶는 것을 말하며, tar 명령어를 사용한다.

tar 명령어 사용 후 file 명령어를 활용하여 파일 형식을 찾아보면 Archive 임을 확인할 수 있다!

더불어 tar는 아카이브 기능뿐만 아니라, tar로 묶여지기 전 파일들의 속성과 디렉터리 구조 등을 유지하는 특징이 있다.

그래서 리눅스용 프로그램, 데이터, 소스 및 라이브러리 등을 배포하는 용도로 많이 사용한다.

(내용 출처: https://recipes4dev.tistory.com/146)

 

tar의 주요 명령 옵션은 아래와 같다.

    tar [OPTION...] [FILE]...
        -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     : 첫 번째 에러 발생 시 중지.
        
        ※ tar 파일의 확장자는 .tar 이다.

여기서 많이 사용하는 것은 cvf (묶기) 와 xvf(풀기)인데, 쉽게 구성도를 그리면 아래와 같다. 

tar 명령어 구조

 

구성도를 토대로 실습을 해보자!

실습 환경 설정]
파일 3개 생성 
# touch /root/1 /root/2 /root/3

[root@localhost ~]# ll
합계 8
-rw-r--r--  1 root root    0  6월 30 11:42 1
-rw-r--r--  1 root root    0  6월 30 11:42 2
-rw-r--r--  1 root root    0  6월 30 11:42 3

[root@localhost ~]# alias ll
alias ll='ls -l --color=auto'

--------------------------------------------------------------
 
절대 경로로 묶기]
[root@localhost ~]# tar cvf /root/123.tar /root/1 /root/2 /root/3
tar: Removing leading `/' from member names (▶절대 경로로 묶는 경우는 최상위(/)가 제거된 상태로 묶인다.)
/root/1
/root/2
/root/3
[root@localhost ~]# ls
1  123.tar  2  3  
anaconda-ks.cfg  initial-setup-ks.cfg  
공개  다운로드  문서  바탕화면  비디오  사진  서식  음악

파일 포맷 확인]
[root@localhost ~]# file /root/123.tar
/root/123.tar: POSIX tar archive (GNU)

기존 1,2,3 파일 삭제후 묶음을 해제]
[root@localhost ~]# rm ./1 ./2 ./3
rm: remove 일반 빈 파일 `./1'? y
rm: remove 일반 빈 파일 `./2'? y
rm: remove 일반 빈 파일 `./3'? y

[root@localhost ~]# alias rm
alias rm='rm -i'

tar xvf ~
[root@localhost ~]# tar xvf /root/123.tar
root/1 v옵션 
root/2 v옵션 
root/3 v옵션 

[root@localhost ~]# ls -R /root/
/root/:
123.tar  anaconda-ks.cfg  initial-setup-ks.cfg  root  
공개  다운로드  문서  바탕화면  비디오  사진  서식  음악

/root/root:
1  2  3

~

--------------------------------------------------------------

상대 경로로 묶기]

[root@localhost ~]# touch ./11 ./22 ./33
[root@localhost ~]# ls
11  123.tar  22  33  anaconda-ks.cfg  initial-setup-ks.cfg

상대경로로 파일지정하여 묶음]
[root@localhost ~]# tar cvf /root/112233.tar ./11 ./22 ./33
./11
./22
./33

묶음 파일 정보 확인]
[root@localhost ~]# tar tvf /root/112233.tar
-rw-r--r-- root/root         0 2022-06-30 12:02 ./11
-rw-r--r-- root/root         0 2022-06-30 12:02 ./22
-rw-r--r-- root/root         0 2022-06-30 12:02 ./33

기존 파일 삭제후 묶음을 해제]
[root@localhost ~]# rm -rf ./11 ./22 ./33
[root@localhost ~]# tar xvf /root/112233.tar
./11
./22
./33
[root@localhost ~]# ls
11    123.tar  33  112233.tar  22  anaconda-ks.cfg  root

 

압축은 여러 개의 파일을 하나로 묶음과 동시에 크기를 줄일 수 있다. gzip과 bzip2 명령어를 사용한다.

gzip, bzip2는 tar로 묶인 파일을 압축하는 명령어이다.

명령어의 구조는 아래와 같다.

 

 

위 구성도를 토대로 실습을 해보자!

※압축 해제
gzip  ▶ gunzip
bzip2 ▶ bunzip2

==============================================================

gzip>>

[root@localhost ~]# gzip /root/123.tar
[root@localhost ~]# ls
11        123.tar.gz  33               initial-setup-ks.cfg  
공개      문서      비디오  서식
112233.tar  22          anaconda-ks.cfg  root                  
다운로드  바탕화면  사진    음악

▶ 기존 123.tar 가 사라진 것을 확인할 수 있다! 
   gzip의 확장자는 .tar.gz 이다.

압축파일인지 확인]
[root@localhost ~]# file /root/123.tar.gz
/root/123.tar.gz: gzip compressed data, 
was "123.tar", from Unix, last modified: Thu Jun 30 11:45:06 2022

다시 묶음파일로]
[root@localhost ~]# gunzip /root/123.tar.gz
[root@localhost ~]# ls /root/123.tar
/root/123.tar

--------------------------------------------------------------------
bzip2>>

압축 전 ls 확인]
[root@localhost ~]# ls /root/123.tar
/root/123.tar

압축 후 확인]
[root@localhost ~]# bzip2 /root/123.tar
[root@localhost ~]# ls
11          123.tar.bz2  33               initial-setup-ks.cfg  
공개      문서      비디오  서식
112233.tar  22           anaconda-ks.cfg  root                  
다운로드  바탕화면  사진    음악

▶ 기존 123.tar 가 사라진 것을 확인할 수 있다! 
   bzip2의 확장자는 .tar.bz2 이다.

파일 형식 확인]
[root@localhost ~]# file /root/123.tar.bz2
/root/123.tar.bz2: bzip2 compressed data, block size = 900k

 

그런데 tar로 묶어주고 다시 gzip 또는 bzip2를 하는 것이 번거롭기 때문에 한번에 해주는 방법도 있다!

구조를 먼저 확인하는 것이 이해에 도움이 될 것!

 

 

실습!

gzip>>

기존 파일 삭제]
# rm -rf ./11 ./22 ./33 ./123.tar ./112233.tar 

[root@localhost ~]# tar zcvf 123.tar.gz ./1 ./2 ./3
./1
./2
./3
[root@localhost ~]# ls
1  123.tar.gz  2  3  anaconda-ks.cfg  initial-setup-ks.cfg  
root  공개  다운로드  문서  바탕화면  비디오  사진  서식  음악

기존 파일 삭제 -> 압축 파일 해제 -> 확인] 
[root@localhost ~]# rm -rf ./1 ./2 ./3
[root@localhost ~]# tar zxvf /root/123.tar.gz
./1
./2
./3
[root@localhost ~]# ls
1  123.tar.gz  2  3  anaconda-ks.cfg  
initial-setup-ks.cfg  root  
공개  다운로드  문서  바탕화면  비디오  사진  서식  음악

---------------------------------------------------------------

bzip2
새로 파일을 ./11 ./22 ./33 을 만들고 해볼 것
[root@localhost ~]# tar jcvf /root/112233.tar.bz2 ./11 ./22 ./33
./11
./22
./33

[root@localhost ~]# ls
1  11  112233.tar.bz2  123.tar.gz  2  22  3  33  
anaconda-ks.cfg  initial-setup-ks.cfg  root  
공개  다운로드  문서  바탕화면  비디오  사진  서식  음악

# rm -rf ./11 ./22 ./33

[root@localhost ~]# tar jxvf /root/112233.tar.bz2
./11
./22
./33

---------------------------------------------------------------

-C 압축 해제 시 경로 설정>>

/stickytest 디렉터리에 압축을 해제]
[root@localhost ~]# tar jxvf /root/112233.tar.bz2  -C /stickytest/
./11
./22
./33
[root@localhost ~]# ls -al /stickytest/
합계 4
drwxrwxrwt   2 root root   36  6월 30 12:42 .
dr-xr-xr-x. 20 root root 4096  6월 30 11:17 ..
-rw-r--r--   1 root root    0  6월 30 12:39 11
-rw-r--r--   1 root root    0  6월 30 12:39 22
-rw-r--r--   1 root root    0  6월 30 12:39 33

'☁ Server > 기초 따라가기' 카테고리의 다른 글

System Process 관리  (0) 2022.07.17
Package 관리  (0) 2022.07.17
Special permission & ACL(확장퍼미션)  (0) 2022.07.08
Permission  (0) 2022.07.08
Ownership  (0) 2022.07.05
Comments