LINUX(Server)

압축 & 아카이브

천천히, 한 걸음씩 2024. 4. 13. 08:50

압축 & 아카이브

* 압축 & 아카이브
- 파일 하나의 용량을 줄여주는 것이 압축이다.
- 원래 여러개의 파일을 압축하는 기능은 없다.
- 여러개의 파일을 하나로 묶는 과정을 아카이빙 이라고 한다.

! 윈도우
복수의 파일 선택 -> 압축

! 리눅스
복수의 파일 선택 -> 아카이브 -> 압축

! 실습 환경 구축

#mkdir -p /Practice/compress // 테스트 디렉터리 생성
#cd /Practice/compress // 디렉터리로 이동
#cp /usr/lib/locale/locale-archive ./file1   // 테스트 파일 file1로복사
#cp ./file1 ./file2 // file1을 file2로 복사
#cp ./file2 ./file3 // file2를 file3으로 복사
#ls -lh // 확인

-rw-r--r--. 1 root root 95M 2023-05-18 04:33 file1
-rw-r--r--. 1 root root 95M 2023-05-18 04:33 file2
-rw-r--r--. 1 root root 95M 2023-05-18 04:34 file3

① gzip
[ 사용법 ]
#gzip   [파일명] // 압축결과 : [파일명].gz
#gzip [옵션] [파일명]     // 압축결과 : [파일명].gz
#gunzip [파일명] // 압축해제
#gzip -d [파일명].gz // 압축해제


[ 옵션 ]
1 ~ 9
-6 : 기본값
-1 : 압축속도가 가장 빠르며 , 압축율을 가장 낮음
-9 : 압축속도가 가장 느리며 , 압축율을 가장 높음


[root@Server-A compress]# time gzip -1 file1 // 95M -> 23M

real 0m1.336s // 실제 걸린시간 ( user + sys )
user 0m0.331s     // 사용자 영역에서 동작한시간
sys 0m1.003s     // 커널에서 동작한시간

[root@Server-A compress]# time gzip -9 file2 // 95M -> 22M

real 0m35.509s
user 0m34.563s
sys 0m0.568s

[root@Server-A compress]# time gzip file3

real 0m5.266s
user 0m4.503s
sys 0m0.748s
[root@Server-A compress]# ls -lh //95M -> 22M
합계 65M
-rw-r--r--. 1 root root 23M 2023-05-18 04:33 file1.gz
-rw-r--r--. 1 root root 22M 2023-05-18 04:33 file2.gz
-rw-r--r--. 1 root root 22M 2023-05-18 04:34 file3.gz


#gunzip file1.gz // 압축 해지
#gunzip file2.gz
#gzip -d file3.gz // 압축 해지
#ls -lh

-rw-r--r--. 1 root root 95M 2023-05-18 04:33 file1
-rw-r--r--. 1 root root 95M 2023-05-18 04:33 file2
-rw-r--r--. 1 root root 95M 2023-05-18 04:34 file3

#gzip file1 file2 file3 // 복수의 인자 사용가능
#ls -lh

#gunzip file1.gz file2.gz file3.gz
#ls -lh

#gzip file* // 메타 문자 사용가능
#ls -lh

#gunzip file*
#ls -lh

② bzip2
[ 사용법 ]
#bzip2 [파일명]   // 압축 결과 : [파일명].bz2
#bunzip2 [파일명]   // 압축 해제
#bzip2 -d [파일명]   // 압축 해제

[root@Server-A compress]# time bzip2 file1  // 95M -> 20M

real 0m6.869s
user 0m6.492s
sys 0m0.351s
[root@Server-A compress]# ls -lh
합계 209M
-rw-r--r--. 1 root root 20M 2023-05-18 04:33 file1.bz2
-rw-r--r--. 1 root root 95M 2023-05-18 04:33 file2
-rw-r--r--. 1 root root 95M 2023-05-18 04:34 file3


#bunzip2 file1.bz2 // 압축 해제
 (== #bzip2 -d file1.bz2)
#ls -lh // 확인 


#bzip2 file1 file2 file3 // 복수의 인자 사용가능
#ls -lh

#bzip2 file1.bz2 file2.bz2 file3.bz2
#ls -lh

#bzip2 file* // 메타 문자 사용가능
#ls -lh

#bunzip2 file*
#ls -lh


③ xz
[ 사용법 ]
#xz [파일명] // 압축결과 : [파일명].xz
#unxz [파일명].xz // 압축해제
#xz -d [파일명].xz


( 최소버전에는 설치가 안되어있기때문에 설치를 해야 한다. )
  
#yum install -y xz

 
[root@Server-A compress]# time xz file1 // 95M -> 3.0M

real 0m26.875s
user 0m26.671s
sys 0m0.151s
[root@Server-A compress]# ls -lh
합계 193M
-rw-r--r--. 1 root root 3.0M 2023-05-18 04:33 file1.xz
-rw-r--r--. 1 root root  95M 2023-05-18 04:33 file2
-rw-r--r--. 1 root root  95M 2023-05-18 04:34 file3


#unxz file1.xz // 압축 해제
 (== #xz -d file1.xz )
#ls -lh // 확인


#xz file1 file2 file3 // 복수의 인자 사용가능
#ls -lh

#xz file1.xz file2.xz file3.xz
#ls -lh

#xz file* // 메타 문자 사용가능
#ls -lh

#xz file*
#ls -lh

 

아카이브 ( Archive ) 

- 파일 , 디렉터리의 묶음
- tar ( Tape ARchive ) , 확장자는 .tar를 사용
- 아카이브에서 옵션에 ' - ' 을 생략할 수 있다.


[ 옵션 ]
-c : 아카이브 파일 생성
-x : 아카이브 파일 해제

-v : 진행 과정 출력
-f : 아카이브 파일을 지정

-r : 기존 아카이브에 새로운 파일 추가
-t : 아카이브 파일의 목록을 확인

+@ 자주사용되어지는 옵션 
생성 : cvf
해제 : xvf


1) 아카이브 파일 생성하기 ( cvf )
[ 사용법 ]
#tar cvf [아카이브파일].tar [파일1] [파일2] ...[파일n]

#tar cvf fileA.tar file1 file2 file3
   (file*)

#ls -lh //지정한 파일들을 묶기만 하고
  용량은 줄어 들지 않았다. (284M)
-rw-r--r--. 1 root root 284M 2023-05-18 05:48 fileA.tar

2) 아카이브 해제하기 ( xvf )
[ 사용법 ]
#tar xvf [아카이브].tar

#rm -rf file{1..3} // 압축이 해제되면 기존의 파일과
   중복되기 때문에 실습환경상 삭제
#ls -lh
#tar xvf fileA.tar // 아카이브 해제
#ls -lh


3) 기존 아카이브 파일에 새로운 파일 추가 ( rvf )
[ 사용법 ]
#tar rvf [아카이브파일].tar [추가파일]


#cp file1 file4 // 추가용 테스트파일 복사
#tar rvf fileA.tar file4 // file4를 fileA.tar에 추가
#ls -lh // 증가된 용량 확인 

-rw-r--r--. 1 root root 379M 2023-05-18 06:11 fileA.tar
( 284 + 95 = 379 )


4) 아카이브 파일 목록 확인 ( tvf )
[ 사용법 ]
#tar [아카이브파일].tar


#tar tvf fileA.tar
-rw-r--r-- root/root  99170352 2023-05-18 04:33 file1
-rw-r--r-- root/root  99170352 2023-05-18 04:33 file2
-rw-r--r-- root/root  99170352 2023-05-18 04:34 file3
-rw-r--r-- root/root  99170352 2023-05-18 06:10 file4


5) 특정 디렉터리에 아카이브 해제하기
[ 사용법 ]
#tar xvf [아카이브파일].tar -C [위치]


#mkdir /test // test디렉터리 생성
#tar xvf fileA.tar -C /test     // test디렉터리에 아카이브 해제
#ls -lh /test // 확인

QUIZ

#cd /Practice/compress
#ls
file1 file2 file3 // 그 외 파일이나 디렉터리는 모두 삭제

1. 현재 경로에 있는 file 1 ~ 3파일을 gzip_test.tar로 아카이빙
2. 현재 경로에 있는 file 1 ~ 3파일을 bzip2_test.tar로 아카이빙
3. 현재 경로에 있는 file 1 ~ 3파일을 xz_test.tar로 아카이빙
4. file4 , file5, file6을 생성하여

   file4는 gzip_test.tar에 추가
   file5는 bzip2_test.tar에 추가
   file6는 xz_test.tar에 추가

   추가된 결과 확인
   
5. gzip_test.tar 파일을 gzip로 압축   ( 압축하기 전과 후에 크기 비교 )   
6. bzip2_test.tar 파일을 bzip2로 압축 ( 압축하기 전과 후에 크기 비교 )   
7. xz_test.tar 파일을 xz로 압축       ( 압축하기 전과 후에 크기 비교 )   

8. /Practice/decompress 디렉터리 생성

gzip_test.tar.gz  bzip2_test.tar.bz2   xz_test.tar.xz 파일을
decompress 디렉터리로 이동

9. decompress디렉터리에 bzip2 , gzip , xz 디렉터리 생성
   각 이름에 맞는 파일을 각각의 디렉터리에 복사
   gzip_test.tar.gz => gzip
   bzip2_test.tar.bz2 => bz2
   xz_test.tar.xz => xz
   
10. 각 디렉터리(gzip , bzip2, xz)에서 압축과 아카이브를 해제
   

정답

더보기


1) #tar cvf gzip_test.tar file1 file2 file3
2) #tar cvf bzip2_test.tar file1 file2 file3
3) #tar cvf xz_test.tar file1 file2 file3  
4) #touch file4 file5 file6
   #tar rvf gzip_test.tar file4
   #tar rvf bzip2_test.tar file5
   #tar rvf xz_test.tar file6

   #tar tvf gzip_test.tar
   #tar tvf bzip2_test.tar
   #tar tvf xz_test.tar

5) #gzip gzip_test.tar
6) #bzip2 bzip2_test.tar
7) #xz xz_test.tar

8) #mkdir /Practice/decompress
   #mv gzip_test.tar.gz bzip2_test.tar.bz2 xz_test.tar.xz /Practice/decompress
   #ls /Practice/decompress

9) #cd /Practice/decompress
   #mkdir gzip bzip2 xz
   #cp ./gzip_test.tar.gz ./gzip
   #cp ./bzip2_test.tar.bz2 ./bzip2
   #cp ./xz_test.tar.xz ./xz
   
10) #cd /Practice/decompress/gzip
    #gunzip gzip_test.tar.gz 
#tar xvf gzip_test.tar
   
    #cd /Practice/decompress/bzip2
    #bunzip2 bzip2_test.tar.bz2 
#tar xvf bzip2_test.tar

#cd /Practice/decompress/xz
    #unxz xz_test.tar.xz
#tar xvf xz_test.tar

* 아카이브와 압축을 동시에 하는 방법

- 아래의 옵션을 아카이브 진행중에 추가한다.

-z : gzip
-j : bzip2
-J : xz

#cd /Practice/compress  // compress로 이동
#tar cvfz fileA.tar.gz file{1..3}  // 아카이빙 -> gz압축
#tar cvfj fileB.tar.bz2 file{1..3}  // 아카이빙 -> bz2압축
#tar cvfJ fileC.tar.xz file{1..3}  // 아카이빙 -> xz압축

#ls -lh  // 결과 확인
#file fileA.tar.gz  // 형식확인
#file fileB.tar.bz2  // 형식확인
#file fileC.tar.xz  // 형식확인




* 아카이브와 압축을 동시에 해제하는 방법

- 아카이빙 해제중에 다음과 같은 옵션을 추가한다.
  (원래는 압축해지 -> 아카이빙 해지)

-z : gzip
-j : bzip2
-J : xz

#mkdir ./A ./B ./C // 테스트 디렉터리 생성

#tar xvfz fileA.tar.gz -C ./A // 압축해지 -> 아카이브해지
 (== tar xvf fileA.tar.gz) // 압축을 해제할때는 옵션을 사용하지 않아도
자동으로 압축 유틸리티가 선택된다.
   
#ls ./A // 확인    
   

#tar xvfj fileB.tar.bz2 -C ./B // 압축해지 -> 아카이브해지
 (== tar xvf fileB.tar.bz2) // 압축을 해제할때는 옵션을 사용하지 않아도
        자동으로 압축 유틸리티가 선택된다.
   
#ls ./B // 확인    


#tar xvfJ fileC.tar.xz -C ./C // 압축해지 -> 아카이브해지
 (== tar xvf fileC.tar.xz) // 압축을 해제할때는 옵션을 사용하지 않아도
        자동으로 압축 유틸리티가 선택된다.
   
#ls ./C // 확인

'LINUX(Server)' 카테고리의 다른 글

부팅 프로세스  (0) 2024.04.15
환경 변수  (0) 2024.04.14
VI Editor  (0) 2024.04.12
다중 명령  (0) 2024.04.11
리눅스 기초 명령어  (2) 2024.04.10