티스토리 뷰
사전적 의미
- Archiving: 파일로 보관, 보존, 백업 (Archive: 보관소)
- Compression: 압축
리눅스에서 Archiving이란 '원본의 속성을 그대로 보존하면서' 여러 개의 파일(디렉토리)를 묶어서 보존(백업)하는 것을 의미한다. Compression은 큰 사이즈의 파일을 작은 사이즈로 압축하는 것을 의미한다.
왜 하는가?
- 여러 개의 파일들을 묶은 뒤(Archiving) 하나로 압축하여 다른 곳으로 전송하거나 보관하기 위함이다.
- 보통 하나의 디렉토리와 그 하위 디렉토리를 함께 묶을 때 사용한다. 또는 묶어 보존할 때 사용한다.
Archiving, Compression 종류
[Archiving util]
- tar, cpio
[Compression util]
- gzip, bz2, xz
- 위 3가지 압축 유틸은 파일 단위로 압축하는 역할만 진행함
- 따라서 압축된 여러 개의 파일들을 묶어주는 역할인 'Archiving'이 필요함
cf. 각 파일을 압축한 뒤 아카이빙하는 것도 가능하지만 'Archiving -> Compress -> 전달 또는 보존' 하는 순서가 더 적은 용량의 파일을 만들 수 있다.
Archiving (tar, Tape Archive)
- 리눅스에서 '아카이브 파일을 만든다'는 하나의 파일로 묶어 보관(백업)한다는 의미이다.
- 만약 /home을 tar로 아카이브 하면 home.tar가 생성되고 해당 백업 파일은 원본 파일의 상태(permission, 생성시기 등)를 그대로 보존하는 상태로 생성된다.
- home.tar를 압축하는 것도 가능하다.
- 묶은 파일을 원래대로 복원(restore)할 수 있다. (x 옵션)
사용법
사용법: tar [options] [file(directory)]
Options
-c, —create : create a new archive(기존 아카이브는 덮어 쓰임, 명령어 뒤에 명시한 파일을 기준으로 아카이빙함)
-v, —verbose : verbosely list files processed(자세하게 나열)
-f, —file=ARCHIVE : use archive file or device ARCHIVE(필수옵션)
-t, —list : list the contents of an archive
-x, —extract, —get : extract files from an archive(원복 시 사용)
-r : 기존의 tar 파일에 추가할 파일을 지정할 때 사용
-z, —gzip, —gunzip, —ungzip : filter the archive through 'gzip'
-j, —bzip2 : filter the archive through 'bzip2'
-J, —xz : filter the archive through 'xz'
cf. x, j, J는 tar + 압축을 한 번에 할 때 사용함. 글 아래에서 설명할 것.
cf. tar 명령어 뒤에 파일을 명시할 때에는(결국 모든 경우에서) f 옵션을 필수로 넣어줘야 함.
실습
1) 실습 환경 구성
실습 진행을 위해 /etc에서 h로 시작하는 파일과 /usr/bin에서 a로 시작하는 파일을 복사해 임시파일로 사용할 것이다. 그리고 datadir을 만들고 해당 디렉토리로 모든 파일들을 옮긴다.
mkdir lfcs-exam
cd lfcs-exam/
cp /etc/h* .
cp /usr/bin/a* .
ls
mkdir datadir
mv * datadir/
2) datadir 파일을 아카이브 하기 (== datadir 파일을 tar파일로 백업한다)
tar -cf datadir.tar ./datadir/
- cf : c는 생성한다는 옵션, f는 datadir.tar라는 파일명으로 만들겠다고 지정하는 옵션
- datadir.tar : 아카이브(백업)할 파일명을 명시
- ./datadir/ : 현재 디렉토리의 datadir이라는 디렉토리 안에 있는 모든 파일들을 대상으로 함 (뒤에 공백을 기준으로 여러 파일들을 나열할 수도 있음)
cf. 옵션 사용 시 - 는 생략 가능하지만 "-옵션1 [옵션 값1] -옵션2 [옵션 값2]"와 같이 사용할 때에는 -를 붙여줘야 한다. 헷갈리지 않게 사용하기 위해 -를 사용하는 걸 추천한다.
[생성된 datadir.tar 파일 확인]
아카이브 된 파일은 원본 파일보다 더 큰 용량을 가지고 있음을 확인할 수 있다.
[백업 파일(tar파일) 컨텐츠 확인하기]
tar -tvf datadir.tar
확인 결과 파일의 소유자, Permission, 수정된 날짜 등 속성정보를 그대로 보존하면서 보관하고 있음을 알 수 있다.
5) 원본 파일 삭제하고 datadir.tar를 이용하여 원래대로 복원하기(restore)
명령어 rm -rf datadir로 기존 원본 파일을 삭제한 뒤, x 옵션 활용하여 복원하면 삭제한 datadir이 다시 생성되었음을 확인할 수 있다. 또한 원래 datadir을 생성한 날짜 등과 같은 상태 정보도 기존의 아카이빙한 상태정보 그대로 복원되었음을 확인할 수 있다.
Compression
압축과 관련된 잘 알려진 utility는 gzip(GNU zip), bzip2, xz 3가지 있으며 약간 다른 성격을 보이는 zip 유틸도 있다. 이중에서도 gzip은 가장 많이 사용되어 거의 표준에 가까운 압축 유틸이다.
사용법
공통된 특징
- file 단위로 압축할 수 있다.
- 압축을 하면 원본 파일은 삭제되고 압축파일만 남겨진다.
실습
1) gzip으로 압축하기
압축 결과, 원본 파일은 삭제되고 압축파일만 남게 됨을 확인할 수 있다.
2) 압축률 확인
cp /etc/passwd .
cp /etc/hosts .
bzip2 hosts
xz passwd
3가지 압축 유틸의 압축률을 확인하기 위해 bzip2, xz도 압축을 진행한다. 그리고 각 압축파일의 용량을 확인해보면 xz는 압축률이 가장 큰 것을 확인할 수 있다.
(압축률 비교 xz > bzio2 > gzip)
cf. 압축은 텍스트에서 해당 글자가 어느 위치에 존재했는지를 기록하는 식으로 이루어진다. (위치정보를 기록하는 방식)
3) 압축 풀고 내용 보기
아스키 텍스트 파일 내용 보기
xzcat [압축파일명].xz
bzcat [압축파일명].bz2
zcat [압축파일명].gz
4) 압축 해제하기
gunzip [파일명].gz (또는 gzip -d [파일명].gz)
bunzip [파일명].bz2 (또는 bzip2 -d [파일명].bz2)
unxz [파일명].xz (또는 xz -d [파일명].xz)
* 압축할 때와 마찬가지로 압축을 해제하면 압축파일은 삭제되고 원본 파일만 남게 된다!
* d옵션을 통해 압축할 때와 같은 명령어로 압축 해제할 수 있다.
참고) zip 명령어
- zip은 gzip, bzip2, xz와 다르게 원본을 삭제하지 않고 압축한다.
- 디렉토리도 압축 가능하다.
- zip은 압축 시, unzip은 압축해제 시 사용한다.
실습
확인 결과 원본 파일도 삭제되지 않고 남아있음을 확인할 수 있다.
ZIp으로 디렉토리 통째로 압축하기
zip -r datadir.zip datadir
-r 옵션 : recursive 하게 하위 디렉토리까지 모두를 포함한다는 옵션이다.
unzip으로 압축 풀기
unzip datadir.zip
압축을 풀어도 기존 파일에 대한 속성(만든 시간, 권한 등)도 그대로 보존된다.
Archiving과 Compression 한 번에 하기
아카이브(백업) 명령어인 tar는 압축 utility 명령어와 한번에 사용할 수 있도록 옵션을 지원한다. 위 tar 명령의 Option 설명에서 가장 아래 있던 3가지 옵션이 이에 해당한다.
Option
-z: 아카이브 후 gzip으로 압축
-j: 아카이브 후 bz2로 압축
-J: 아카이브 후 xz로 압축
실습: /home 디렉토리를 백업하고 압축하기
1) tar + gzip 활용
sudo tar -czvf /home.tar.gz /home
- czvf: '생성, 압축까지(단 gzip으로), 자세하게 보여줘라, 파일명을 명시하겠다' 순
- /home.tar.gz: 생성할 아카이브와 압축된 파일의 절대 경로와 이름
- /home: 아카이브와 압축할 디렉토리
cf. .tar.gz를 .tgz로 압축할 수 있음.
* 위 명령어를 수행하면 최상위 디렉토리(/) 아래 home.tar.gz 파일이 생성된다.
생성된 파일 정보 확인
아카이브+압축 파일 내용 확인
tar -tvf /home.tar.gz
- t 옵션은 아카이브 파일의 contents를 보여주는 옵션이다. 압축파일이지만 tar로 아카이빙 되었기 때문이다.
- f 옵션은 뒤에 파일을 명시할 경우 필수로 넣어줘야 한다.
2) tar + bz2 활용
sudo tar -cjvf /home.tar.bz2 /home
gzip으로 압축과정을 포함한다는 j 옵션을 넣어주면 된다. (소문자 j)
3) tar + xz 활용
sudo tar -cJvf /home.tar.bz2 /home
대문자 J옵션은 xz 압축 과정을 아카이빙에 포함한다.
tar + 압축 정리
1) tar + gzip (z옵션)
sudo tar -czvf /file.tar.gz /dir
file /file.tar.gz
tar -ztvf /file.tar.gz
2) tar + bzip2 (j옵션)
sudo tar -cjvf /file.tar.bz2 /dir
ls -l /file.tar.bz2
tar -jtvf /file.tar.bz2
3) tar + xz (J옵션)
sudo tar -cJvf /file.tar.xz /dir
ls -l /file*
tar -Jtvf /file.tar.xz
비교해보기
1) 성능 비교
대략적인 성능 비교는 다음과 같다. tar와 xz를 같이 사용했을 때 가장 오랜 시간이 걸리고 tar와 gzip을 사용했을 때 가장 빠른 처리를 보여줌을 확인할 수 있다.
cf. time 커맨드
- real: 실제 경과 시간으로 I/O 작업 중에 프로세스가 블락된 시간까지 모두 포함된다.
- user: 프로세스 코드에서 user mode 코드가 실행되는데 걸린 CPU 시간이다.
- sys: 프로세스 코드에서 kernel mode 코드가 실행되는데 걸린 CPU 시간이다.
* 압축할 파일에 따라 성능 차이는 달라질 수 있음
2) 압축률(용량) 비교
xz < bzip2 < gzip 순으로 용량을 나타냈다. 즉, 압축률은 xz가 가장 좋다.
결론적으로 xz의 압축률이 가장 좋지만 성능적인 측면에서는 가장 느리다는 것을 알 수 있다.
* tar + zip에 대한 고찰
tar 커맨드에서 zip 명령어와 함께 사용할 수 없다. tar할 파일들을 하나씩 zip한 뒤 tar를 해본 결과 가장 큰 용량을 가지게 되었음을 알 수 있었다. 결국 아카이브 할 파일들을 압축한 뒤 아카이브하는 것보다 각 파일들을 아카이브 한 뒤 압축하는 것이 더 효율적일 것이라는 잠정적인 결론을 낼 수 있다. 단, 아카이브 후 압축한 결과에서는 일부 파일만을 압축 해제할 수 없다는 단점이 있다.
복원(restore) 하기
sudo tar -zxf /home.tar.gz
-z 옵션: gzip으로 압축된 것을 풀어라
-x 옵션: 아카이브를 해제해라 (원복 해라)
즉, 아카이브를 해제하는데 압축까지 풀어서 진행하라는 옵션이다.
Restore 정리
1) tar + gzip 파일 복원하기 (z, x옵션)
sudo tar -xzvf /file.tar.gz
2) tar + bzip2 파일 복원하기 (j, x옵션)
sudo tar -xjvf /file.tar.bz2
3) tar + xz 파일 복원하기 (J, x옵션)
sudo tar -xJvf /file.tar.xz
Reference
- https://youtu.be/dAmxwX0LyZ0
- https://mamu2830.blogspot.com/p/blog-page_23.html
'[ 자격증 ] > [ LFCS ]' 카테고리의 다른 글
[LFCS] Redirection, Pipe, File Descriptor (0) | 2022.08.01 |
---|---|
[LFCS] User 및 Group 관리(2): Password Administration (0) | 2022.07.25 |
[LFCS] User 및 Group 관리(1) (0) | 2022.07.25 |
- Total
- Today
- Yesterday
- helm
- 컨트롤러
- Controller
- ci/cd
- ubuntu
- GitOps
- argocd
- rolling update
- container
- K8s
- 우분투
- RDB
- Kubernetes
- kafka
- db
- Stream
- 코틀린
- CICD
- spring
- LFCS
- golang
- Java
- Linux
- 쿠버네티스
- go
- docker
- Non-Blocking
- github actions
- 카프카
- jvm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |