여행을 개발하다
[Linux] tar 명령어 (파일 하나로 묶기) 본문
오늘은 리눅스의 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 명령어에 대해 알아보았다.
감사합니다 : )
'운영체제 > Linux' 카테고리의 다른 글
[Linux] chage 명령어 (사용자 패스워드 만기 정보 관리) (0) | 2020.05.21 |
---|---|
[Linux] 리눅스의 log & 명령어 (0) | 2020.05.07 |
[Linux] useradd (adduser) 명령어 - 사용자 추가 (0) | 2020.04.17 |
[Linux] 압축 파일 관리 명령어 (gzip, gunzip, bzip2, bunzip2, xz, unxz) (0) | 2020.03.17 |