여행을 개발하다

[Linux] tar 명령어 (파일 하나로 묶기) 본문

운영체제/Linux

[Linux] tar 명령어 (파일 하나로 묶기)

yhtragramming 2020. 3. 16. 21:29

 

오늘은 리눅스의 tar 명령어에 대해 포스팅하고자 한다.

 

tar 명령어?

Tape ARchive(tar)의 약자로 여러 파일이나 디렉터리들을 하나의 새로운 파일로 묶을 때 사용하는 명령어이다.

- 사용하기가 상대적으로 쉽다.

- 기존 파일을 그대로 남겨둔다.

 

Window에서의 작업과 비교해보면 대략 다음과 같다.

1. 새 폴더를 만든다.
2. 여러 개의 파일을 새 폴더에 넣는다. (새 폴더에 다른 폴더를 넣을 수도 있다.)

이 2개의 작업을 한 번에 진행하는 명령어라고 생각하면 된다.

단, 리눅스는 폴더(디렉터리)가 아닌 하나의 파일로 만들어진다는 것이 차이점이라고 할 수 있겠다.

 

 

tar 명령어의 옵션

옵션

설명

-c 

지정한 파일이나 디렉터리를 하나로 묶어 새로운 tar 파일을 생성한다.

-x 

생성된 tar 파일을 푼다.

-v 

어떤 명령을 실행할 때, 대상이 되고 있는 파일들을 보여준다.

-f 

작업 대상이 되는 tar 파일의 이름을 지정한다. 파일명 대신 '-'를 쓰면 표준 입출력이 된다.

-r 

기존의 tar 파일 뒤에 파일을 추가한다.

-t 

tar 파일 안에 묶여 있는 파일의 목록을 출력한다.

-h 

심볼릭 링크가 가리키고 있는 원본 파일을 저장한다.

-C

디렉터리를 변경할 때 사용한다. (--directory=디렉터리명)

-p

파일이 생성되었을 때의 권한을 그대로 유지하게 해준다.

-Z 

Compress 관련 옵션으로 예전 UNIX 계열 표준 압축 파일인 tar.Z에 사용한다.

-z 

gzip 관련 옵션으로 압축 파일인 tar.gz에 사용한다.

-j 

bzip2 관련 옵션으로 압축 파일인 tar.bz2에 사용한다.

-J 

xz 관련 옵션으로 압축 파일인 tar.xz에 사용한다.

* tar 옵션들의 대부분은 단독으로 쓰이기 보다, 다른 옵션들과 동시에 함께 사용된다.

참고서적 : 리눅스 마스터 1급 정복하기, 북스홀릭 (정성재, 배유미 공저)

 

 

1. -c[v]f (새로운 파일 만들기)

- tar -c[v]f 파일명 첨부파일1 첨부파일 2 ... 첨부파일N

- 새로운 tar 파일을 만드는 명령어이다.

- 반드시 파일명을 지정해야 한다. (-f 옵션)

- 여러 개의 파일(디렉터리)을 한 번에 지정할 수 있다.

 

'-c' 옵션이 새로운 파일을 만드는 명령어지만, 파일명을 반드시 지정해야 하므로 -f 옵션과 반드시 같이 사용해야 한다. 새로운 tar 파일이 만들어지는 과정을 보고 싶으면 -v 옵션도 같이 사용할 수 있다.

 

현재 로그인한 사용자는 user1, 사용자의 홈 디렉터리를 살펴본다.

user1@ubuntu:~$ ls -trl
total 8
-rwxr-xr-x 1 user1 user1    0 Mar 15 22:14 text3.txt
-rwxr-xr-x 1 user1 user1    0 Mar 15 22:14 text2.txt
-rwxr-xr-x 1 user1 user1    0 Mar 15 22:14 text1.txt
drwxr-xr-x 2 user1 user1 4096 Mar 15 22:14 test1
drwxr-xr-x 2 user1 user1 4096 Mar 15 22:14 test

 

3개의 text 파일과 2개의 디렉터리가 있다. 이 중, text 파일들(text1.txt, text2.txt, text3.txt)만 묶어 'newFile.tar'라는 tar 파일을 만들어본다.

user1@ubuntu:~$ tar -cvf newFile.tar text1.txt text2.txt text3.txt 
text1.txt
text2.txt
text3.txt

묶을 파일들의 이름에 공통점이 있다면, 다음과 같이 asterisk 마크(*)를 사용할 수도 있다.

user1@ubuntu:~$ tar -cvf newFile.tar text*

 

그 결과 newFile.tar라는 파일이 생성되었음을 확인할 수 있다.

user1@ubuntu:~$ ls -trl
total 20
-rwxr-xr-x 1 user1 user1     0 Mar 15 22:14 text3.txt
-rwxr-xr-x 1 user1 user1     0 Mar 15 22:14 text2.txt
-rwxr-xr-x 1 user1 user1     0 Mar 15 22:14 text1.txt
drwxr-xr-x 2 user1 user1  4096 Mar 15 22:14 test1
drwxr-xr-x 2 user1 user1  4096 Mar 15 22:14 test
-rw-rw-r-- 1 user1 user1 10240 Mar 15 22:21 newFile.tar

 

2. -x[v]f (tar 파일을 묶음 해제하기)

tar -x[v]f 파일명

- tar 파일로 묶여 있는 파일을 묶음 해제한다.

 

여러 파일을 하나로 묶었다면 반대로 해제도 가능하다. 해제도 마찬가지로 파일명을 지정해야 하므로, 반드시 -f 옵션과 함께 사용해야 한다. user1의 홈 디렉터리에 다음과 같은 디렉터리, 파일 리스트가 있다.

user1@ubuntu:~$ ls -trl
total 28
drwxr-xr-x 2 user1 user1  4096 Mar 16 00:10 test1
drwxr-xr-x 2 user1 user1  4096 Mar 16 00:25 test
-rw-rw-r-- 1 user1 user1 20480 Mar 16 00:31 newFile.tar

 

여기서 newFile.tar 파일에 포함된 파일을 현재 디렉터리에 풀고자 한다.

user1@ubuntu:~$ tar -xvf newFile.tar 
text1.txt
text2.txt
text3.txt
text4.txt

 

명령 완료 후 다시 디렉터리를 조회해본 결과, 다음과 같이 묶음 해제된 파일 리스트를 확인해볼 수 있다.

user1@ubuntu:~$ ls -trl
total 40
-rwxr-xr-x 1 user1 user1     0 Mar 15 22:14 text3.txt
-rwxr-xr-x 1 user1 user1     0 Mar 15 22:14 text2.txt
-rwxr-xr-x 1 user1 user1     0 Mar 15 22:40 text4.txt
-rwxr-xr-x 1 user1 user1 10240 Mar 15 23:57 text1.txt
drwxr-xr-x 2 user1 user1  4096 Mar 16 00:10 test1
drwxr-xr-x 2 user1 user1  4096 Mar 16 00:25 test
-rw-rw-r-- 1 user1 user1 20480 Mar 16 00:31 newFile.tar

 

3. -C (디렉터리를 변경하기)

C (대문자) 디렉터리명

- Change Directory의 약자로, 디렉터리를 변경하여 작업할 때 사용한다.

 

특정 디렉터리를 지정해서 tar 파일을 해제할 수도 있다.

user1@ubuntu:~$ ls -trl
total 28
drwxr-xr-x 2 user1 user1  4096 Mar 16 00:10 test1
drwxr-xr-x 2 user1 user1  4096 Mar 16 00:25 test
-rw-rw-r-- 1 user1 user1 20480 Mar 16 00:31 newFile.tar

예를 들어, 'newFile.tar'에 포함된 파일을 test1 디렉터리 안에 푸는 작업을 진행해본다.

user1@ubuntu:~$ tar -xvf newFile.tar -C test1
text1.txt
text2.txt
text3.txt
text4.txt

test1 디렉터리의 내용을 확인해본 결과, newFile.tar에 묶여있던 파일 리스트가 나타난다.

user1@ubuntu:~$ ls -trl test1
total 0
-rwxr-xr-x 1 user1 user1 0 Mar 16 04:58 text4.txt
-rwxr-xr-x 1 user1 user1 0 Mar 16 04:58 text3.txt
-rwxr-xr-x 1 user1 user1 0 Mar 16 04:58 text2.txt
-rwxr-xr-x 1 user1 user1 0 Mar 16 04:58 text1.txt

 

4. -t[v]f (파일의 내용 확인하기)

- tar -t[v]f 파일명

- 파일의 내용을 확인한다.

 

tar 파일이 생성되었다면, 해당 파일에 어떤 파일들이 함께 묶여 있는지 확인할 수 있다. 파일의 내용을 확인할 때도 확인할 파일명을 반드시 지정해야 하므로, -t와 -f 옵션은 함께 쓰여야 할 불가분의 관계이다.

 

예를 들어, 방금 생성한 newFile.tar라는 파일에 포함되어 있는 파일 리스트를 출력해본다.

user1@ubuntu:~$ tar -tvf newFile.tar 
-rwxr-xr-x user1/user1       0 2020-03-15 22:14 text1.txt
-rwxr-xr-x user1/user1       0 2020-03-15 22:14 text2.txt
-rwxr-xr-x user1/user1       0 2020-03-15 22:14 text3.txt

하나로 만들었던 tar 파일에 포함된 파일 리스트를 확인할 수 있다.

 

 

5. -r[v]f (기존 tar 파일에 신규 파일 추가하기)

- tar -t[v]f 파일명 추가할 파일들

- 이미 생성되어 있는 tar 파일에 신규 파일을 추가한다.

 

신규로 생성한 파일을 기존의 tar 파일에 추가할 수도 있다 . 여기서의 핵심은 -t 옵션으로, 역시나 추가할 tar 파일을 지정해야 한다는 점에서 -f 옵션을 함께 사용해 준다.

 

다음과 같이 'text4.txt'라는 파일이 추가되었고, 이를 기존의 newFile.tar 파일에 추가로 묶고자 한다.

user1@ubuntu:~$ ls -trl
total 20
-rwxr-xr-x 1 user1 user1     0 Mar 15 22:14 text3.txt
-rwxr-xr-x 1 user1 user1     0 Mar 15 22:14 text2.txt
-rwxr-xr-x 1 user1 user1     0 Mar 15 22:14 text1.txt
drwxr-xr-x 2 user1 user1  4096 Mar 15 22:14 test1
drwxr-xr-x 2 user1 user1  4096 Mar 15 22:14 test
-rw-rw-r-- 1 user1 user1 10240 Mar 15 22:21 newFile.tar
-rwxr-xr-x 1 user1 user1     0 Mar 15 22:40 text4.txt

 

다음 명령어로 'text4.txt' 파일을 추가했으면, 실질적으로 tar 파일에 추가되었는지 확인해본다.

user1@ubuntu:~$ tar -rvf newFile.tar text4.txt 
text4.txt
user1@ubuntu:~$ tar -tvf newFile.tar 
-rwxr-xr-x user1/user1       0 2020-03-15 22:14 text1.txt
-rwxr-xr-x user1/user1       0 2020-03-15 22:14 text2.txt
-rwxr-xr-x user1/user1       0 2020-03-15 22:14 text3.txt
-rwxr-xr-x user1/user1       0 2020-03-15 22:40 text4.txt

 

6. -h (심볼릭 링크의 원본 파일을 찾아서 묶기)

tar -c[v]hf 파일명 심볼릭링크파일

- 묶고자 하는 대상 파일이 심볼릭 링크 파일일 경우, 심볼릭 링크 파일이 가리키는 원본 파일을 묶어준다.

 

user1의 홈 디렉터리의 내용이 다음과 같다.

user1@ubuntu:~$ ls -trl
total 4
drwxr-xr-x 2 user1 user1 4096 Mar 16 00:40 test
lrwxrwxrwx 1 user1 user1    4 Mar 16 00:41 link -> test

 

이 중 심볼릭 링크 파일 'link'가 가리키는 대상은 test 디렉터리이다.

user1@ubuntu:~$ ls -trl test
total 0
-rwxr-xr-x 1 user1 user1 0 Mar 16 00:40 sample.txt
-rwxr-xr-x 1 user1 user1 0 Mar 16 00:40 sample1.txt

 

그리고 test 디렉터리의 모습이 위와 같다고 할 때, 이 링크 파일을 대상 파일로 지정하여 tar 파일을 생성해본다.

user1@ubuntu:~$ tar -cvhf newFile.tar link
link/
link/sample.txt
link/sample1.txt

 

만들어진 newFile.tar 파일의 상세내역을 조회해본다. 그 결과, link 파일이 가리키는 test 디렉터리의 하위 파일들이 하나로 묶였음을 확인할 수 있다.

user1@ubuntu:~$ tar -tvf newFile.tar 
drwxr-xr-x user1/user1       0 2020-03-16 00:40 link/
-rwxr-xr-x user1/user1       0 2020-03-16 00:40 link/sample.txt
-rwxr-xr-x user1/user1       0 2020-03-16 00:40 link/sample1.txt

 

 

7. -j, -J, -z, -Z (특정 압축 형식을 지정하기)

- 리눅스에서 지원하는 압축방식을 지정해서 묶음과 동시 압축하는 옵션

- c 혹은 x 옵션과 같이 사용되며, 압축 및 압축 해제가 가능하다. ex) -cjvf, -cJvf...

- 압축방식에 매칭되는 확장자를 반드시 적어줘야 한다.

 

이 글을 시작할 때 윈도에서의 동작 방식과 비교한 내용이 있다. 리눅스는 파일을 묶는 것과 압축이 별개의 단계로 나뉜다는 것. 하지만 j, J, z, Z 옵션을 함께 사용하면, 윈도에서처럼 파일 묶음과 압축을 동시에 할 수 있다.

 

옵션에 따른 확장자 및 작업할 디렉터리의 파일 리스트는 아래 표를 참고한다. 하지만, -Z 옵션을 통해 생성되는 Compress 방식의 tar.Z 확장자는 거의 사용되지 않기 때문에 예제에서 제외한다.

 

옵션

확장자

-Z 

tar.Z

-z 

tar.gz

-j 

tar.bz2

-J 

tar.xz

user1@ubuntu:~$ ls -trl
total 0
-rwxr-xr-x 1 user1 user1 0 Mar 16 00:40 sample.txt
-rwxr-xr-x 1 user1 user1 0 Mar 16 00:40 sample1.txt

 

7-1. -z 옵션

user1@ubuntu:~$ tar -czvf newFile.tar.gz *
sample1.txt
sample.txt

 

user1@ubuntu:~$ ls -trl
total 4
-rwxr-xr-x 1 user1 user1   0 Mar 16 00:40 sample.txt
-rwxr-xr-x 1 user1 user1   0 Mar 16 00:40 sample1.txt
-rw-rw-r-- 1 user1 user1 132 Mar 16 01:42 newFile.tar.gz

gz 확장자의 경우 압축 파일에 대한 상세 정보를 확인해보기 위해 다음의 명령어를 사용한다.

user1@ubuntu:~$ gzip -l newFile.tar.gz 
         compressed        uncompressed  ratio uncompressed_name
                132               10240  98.9% newFile.tar

 

7-2. -j 옵션

user1@ubuntu:~$ tar -cjvf newFile.tar.bz2 *
sample1.txt
sample.txt
user1@ubuntu:~$ ls -trl 
total 4
-rwxr-xr-x 1 user1 user1   0 Mar 16 00:40 sample.txt
-rwxr-xr-x 1 user1 user1   0 Mar 16 00:40 sample1.txt
-rw-rw-r-- 1 user1 user1 138 Mar 16 01:56 newFile.tar.bz2

 

7-3. -J 옵션

user1@ubuntu:~$ tar -cJvf newFile.tar.xz *
sample1.txt
sample.txt
user1@ubuntu:~$ ls -trl
total 4
-rwxr-xr-x 1 user1 user1   0 Mar 16 00:40 sample.txt
-rwxr-xr-x 1 user1 user1   0 Mar 16 00:40 sample1.txt
-rw-rw-r-- 1 user1 user1 184 Mar 16 01:57 newFile.tar.xz

 

지금까지 리눅스의 tar 명령어에 대해 알아보았다.

 

감사합니다 : )

Comments