- Published on
2025.11.14
[모두의 리눅스] - 18. 아카이브와 압축
18.1. 아카이브와 압축
아카이브: 여러 개의 파일이나 디렉터리를 모아 파일 하나로 만드는 것
윈도와 macOS의 zip은 아카이브와 압축을 동시에 실행하고, 리눅스에서는 아카이브와 압축을 구분해 다룸.
- 아카이브: tar
- 압축: gzip, bzip2
18.2. tar 명령어: 파일 아카이브하기
tar는 아카이브 명령어로, 복수의 파일이나 디렉터리를 아카이브 파일로 모으거나 복원할 때 사용.
tar cf <아카이브 파일 이름> <아카이브로 묶을 파일 경로>로 아카이브를 만들 수 있고, tar xf ...로 복원할 수 있다. 아카이브 해제 위치에 동일한 이름의 파일이 있으면 덮어쓰므로 주의한다.
| 옵션 | 의미 |
|---|---|
| c | 새 아카이브 생성 |
| f | 새 아카이브 이름 지정 |
| t | 아카이브 파일 내용 확인 |
| x | 아카이브 복원 |
| v | 대상 파일의 목록 출력 |
| z | 압축(gzip 기능) |
| j | 압축(bzip2 기능) |
| J | 압축(xz 기능) |
tar는 기존의 권한, 속성 등을 유지한 채로 아카이브하는데, 권한이 부족하면 속성을 유지하지 못할 수 있으므로 슈퍼 사용자 권한으로 실행.
- 괄호 확장
{<시작 숫자>..<끝 숫자>}
18.3. gzip 명령어: 파일 압축하기
gzip은 파일 압축/해제 명령어로 .gz 확장자를 붙임.
gzip <압축할 파일>로 압축하고 -d 옵션을 지정해 복원할 수 있음. 압축 해제시 압축 파일은 삭제되며 해제된 파일만 남는다. gunzip 명령어는 셸 스크립트로 gzip -d를 수행하므로 동일하게 동작한다.
gzip은 파일을 하나만 압축할 수 있는데, tar로 파일 여러 개를 아카이브한 뒤 gzip을 사용해 여러 개를 묶어 압축할 수 있음. 이런 경우 tar.gz나 .tgz의 확장자가 붙음.
최근 tar는 gzip의 기능을 포함해 각각 사용하지 않아도 tar에 z옵션을 사용해 압축까지 수행할 수 있음.
$ tar czf dir1.tar.gz dir1 # z옵션으로 압축
$ tar xzf dir1.tar.gz # x, z옵션으로 복원
기능을 지원하기 이전에는 파이프를 통해 기능을 연결하여 사용
$ tar cf - dir1 | gzip -c > dir1.tar.gz
# 혹은 임시파일을 만들어 사용
$ tar cf dir1.tar dir1
$ gzip dir1.tar #임시 파일 용량이 필요한 단점 존재
# 복원
$ gzip -d-c dir1.tar.gz | tar xf -
18.4. bzip2 명령어: 파일 압축하기
bzip2도 파일 압축/해제 명령어로 gzip보다 압축률이 높음. gzip과 동일한 옵션으로 동작한다.
최근 tar에 j 옵션으로 기능을 사용할 수 있음.
xz
bzip2보다 압축률이 좋은 xz명령어도 있으며, 동일한 방식으로 동작하고, tar에서는 J로 사용할 수 있음.
xz는 시간이 오래 걸리는 만큼 압축률이 높음. 리눅스 커널은 xz형식으로 압축 및 배포.
18.5. zip 명령어: 파일 아카이브와 압축하기
zip은 tar나 gzip과 달리 아카이브와 압축을 동시에 수행하는 명령어.
리눅스에서는 zip과 unzip을 설치해야 함.
zip -r <압축 파일 이름> <압축 대상 경로>-r은 지정한 디렉터리 하위 모든 파일을 포함하는 옵션으로, 늘 지정한다고 생각하고 사용하면 된다.
| 명령어/옵션 | 의미 |
|---|---|
| -r | 지정한 디렉터리 하위 모든 파일을 포함 |
| zipinfo | 압축된 zip 파일 확인 |
| unzip | zip 파일 복원 |
| -q | 대상 파일 이름을 출력하지 않고 zip 파일 생성 |
| -e | 암호 지정 |