컴퓨터/운영체제(주로 리눅스)

[리눅스] tar 명령어 사용방법 - 파일 합치기와 압축(gzip, bzip2)

REAKWON 2022. 4. 24. 13:56

tar

tar 명령어는 Tape Archiver의 약자로 여러 파일들을 하나의 파일로 묶어주는 명령어입니다. tar 명령어에 대해서 압축 명령어로 오해하시는 분들이 많은데, tar는 단순 파일을 하나로 묶는 명령입니다. 하지만 여러 옵션을 주어서 압축까지하는 것이 가능합니다. 예를 들어서 아래의 그림은 gzip이라는 압축 방식을 사용한 과정입니다. 아래의 그림을 보시면 쉽게 이해가 가능합니다.

file 1부터 file n까지가 있다면 tar 명령어를 통해서 하나의 files.tar 파일(확장자 .tar는 tar로 묶었음을 알리는 확장자입니다.)로 묶을 수 있습니다. 이때 압축한 상태가 되지는 않지요. 만일 압축방식의 하나인 gzip압축을 거치게 된다면 files.tar.gz(확장자 .gz은 gzip으로 압축이 되었다는 것을 알려주는 확장자입니다.)이라는 하나의 압축파일이 나올 수 있습니다. 그러니 ~.tar.gz은 tar로 파일들을 일단 하나의 파일로 묶고 나서 gzip 방식으로 압축을 한 파일이라는 것을 알 수 있겠죠.

그리고 압축을 해제할때는 이 과정의 역순을 거치게 됩니다. 

tar의 명령어 옵션은 너무 많아 포스팅에 전부 담을 수 없습니다. 주요한 옵션 몇가지만 보고 사용해도 문제없습니다. 

option 설명
-c(create) 파일 합치기
-v(verbose) tar의 과정을 보여주기, 굳이 사용하지 않아도 무방합니다.
-f(file) tar 아카이브 지정, 즉 압축 파일명을 지정합니다.
-x(extract) 파일 추출
-z(gzip) gzip 압축. 확장자 gz
-j(bzip2) bzip2 압축. 확장자 bz2
-t(list) 파일의 리스트 확인

 

위의 옵션들을 이용해서 tar로 파일들을 묶고 압축, 혹은 해제하는 방법을 아래의 명령을 통해서 보실 수 있습니다.

 

1. 파일 묶기

$ ls -l
합계 8
-rw-rw-r-- 1 ubuntu ubuntu 6  4월 24 12:33 file1.txt
-rw-rw-r-- 1 ubuntu ubuntu 6  4월 24 12:33 file2.txt
$ tar -cvf files.tar file1.txt file2.txt   <-- files.tar로 묶기
file1.txt
file2.txt
$ ls -l
합계 20
-rw-rw-r-- 1 ubuntu ubuntu     6  4월 24 12:33 file1.txt
-rw-rw-r-- 1 ubuntu ubuntu     6  4월 24 12:33 file2.txt
-rw-rw-r-- 1 ubuntu ubuntu 10240  4월 24 12:46 files.tar

 

 

2. 파일 풀기

$ ls -l
합계 12
-rw-rw-r-- 1 ubuntu ubuntu 10240  4월 24 12:46 files.tar
$ tar -xvf files.tar  <-- files.tar 파일 풀기
file1.txt
file2.txt
$ ls -l
합계 20
-rw-rw-r-- 1 ubuntu ubuntu     6  4월 24 12:33 file1.txt
-rw-rw-r-- 1 ubuntu ubuntu     6  4월 24 12:33 file2.txt
-rw-rw-r-- 1 ubuntu ubuntu 10240  4월 24 12:46 files.tar

 

3. gzip으로 압축

$ ls -l files/
합계 8
-rw-rw-r-- 1 ubuntu ubuntu 6  4월 24 12:33 file1.txt
-rw-rw-r-- 1 ubuntu ubuntu 6  4월 24 12:33 file2.txt
$ tar -cvzf files.tar.gz files <-- gzip 압축
files/
files/file1.txt
files/file2.txt
$ ls -l
합계 8
drwxrwxr-x 2 ubuntu ubuntu 4096  4월 24 12:55 files
-rw-rw-r-- 1 ubuntu ubuntu  185  4월 24 12:56 files.tar.gz

 

그런데 이렇게 명령어 옵션을 섞어서 쓸때 간과하는 점이 있는데 f는 아카이브 파일의 이름을 지정해야하는 옵션입니다. 그러니 -f 뒤에는 파일명이 나와야합니다. 이런 사실을 모르면 아래와 같은 에러 메시지를 볼 수 있게 됩니다.

$ tar -cvfz files.tar.gz files
tar: files.tar.gz: stat할 수 없습니다: 그런 파일이나 디렉터리가 없습니다
files/
files/file1.txt
files/file2.txt
tar: 앞서 발생한 오류로 실패 코드를 반환하며 빠져나감

 

만약 무슨 소리가 뭔지 모르겠다면 f를 항상 마지막에 써주고 파일명을 입력하시면 됩니다. tar -cvzf files.tar.gz files 이렇게요.

 

4. gzip 압축 해제

 

$ ls -l
합계 4
-rw-rw-r-- 1 ubuntu ubuntu 185  4월 24 12:56 files.tar.gz
$ tar -xvzf files.tar.gz <-- gzip 압축 해제
files/
files/file1.txt
files/file2.txt
$ ls -l
합계 8
drwxrwxr-x 2 ubuntu ubuntu 4096  4월 24 12:55 files
-rw-rw-r-- 1 ubuntu ubuntu  185  4월 24 12:56 files.tar.gz
$ ls -l files
합계 8
-rw-rw-r-- 1 ubuntu ubuntu 6  4월 24 12:33 file1.txt
-rw-rw-r-- 1 ubuntu ubuntu 6  4월 24 12:33 file2.txt

 

5. bzip2 압축

$ ls -l files
합계 8
-rw-rw-r-- 1 ubuntu ubuntu 6  4월 24 12:33 file1.txt
-rw-rw-r-- 1 ubuntu ubuntu 6  4월 24 12:33 file2.txt
$ tar -cvjf files.tar.bz2 files <-- bzip2 압축
files/
files/file1.txt
files/file2.txt
$ ls -l
합계 8
drwxrwxr-x 2 ubuntu ubuntu 4096  4월 24 12:55 files
-rw-rw-r-- 1 ubuntu ubuntu  191  4월 24 13:07 files.tar.bz2

 

6. bzip2 압축 해제

$ ls -l
합계 4
-rw-rw-r-- 1 ubuntu ubuntu 191  4월 24 13:07 files.tar.bz2
$ tar -xvjf files.tar.bz2
files/
files/file1.txt
files/file2.txt

 

7. 파일의 contents(list) 확인

$ ls
files.tar.bz2
$ tar -tf files.tar.bz2 <-- files.ar.bz2 안의 파일 확인, 압축 해제한것이 아님
files/
files/file1.txt
files/file2.txt
$ ls  
files.tar.bz2

 

여기까지만 알아도 tar을 통해서 압축하고 해제하는 데에는 아무 문제없습니다. 너무 쉽죠?

반응형