웹&컴퓨팅

[ LINUX ] tar 압축

x2chi 2008. 5. 24. 18:12
반응형
tar command files
옵션  - c 지정파일또는 디렉토리를 tar로 묶는다(압축효과 없음:오히려 용량증가)
        - x tar의 파일의 묶음을 푼다. (묶음과 압축의 차이점 이해해야함)
        - v 묶음의 대상파일을 보여준다.
        - r 기존의 tar파일에 파일을 추가한다.
        - p 파일의 생성되었을 때의 권한을 그대로 유지하게 해준다.
        - z tar.gz의 파일로 압축할때 쓰이는 옵션
        - f 작업대상이 되는 tar파일의 이름을 지정한다.
사용예
        tar xvfz gnu3.tgz  : 압축해제와 묶여짐을 동시에 푼다.  
        tar cvfzp gnu3.tgz  *.php  : 현재디렉토리에 있는 *.php로 끝나는 파일을 모두 퍼미션을 유지한 상태에서 묶어서 gnu3.tgz라는 파일로 압축한다.
 
이밖에도 여러가지 gzip gunzip등의 압축관련명령어가 쓰이지만
sir에서 사용되는 파일들은 tar의 명령어로 사용가능하다.

참고) tar 명령어는 - 를 쓰지 않아도 옵션이 사용가능하다.


tar

여러개의 파일을 하나로 묶는 명령어이다.
압축명령어라고 잘못알고 계시는 분들이 있는데, tar는 분명 여러개의 파일을 하나로 묶어주는 일종의 유틸리티라고 할 수 있다.
하지만, 거의 대부분 tar는 gzip이나 compress등과 같은 압축유틸리티와 함께 사용을 하는 것이 일반적이다.

또한 tar옵션에는 z라는 옵션이 있기 때문에 tar명령어만으로 압축하고 풀 수 있기때문에 tar만으로도 효율적인 파일관리를 할 수있다.

※ 사용형식

파일묶기       : tar cvf 파일명.tar 파일(디렉토리)
묶은파일보기   : tar cvf 파일명.tar
파일풀기       : tar xvf 파일명.tar

묶고압축하기     : tar cvfz 파일명.tar.gz 파일(디렉토리)
묶고압축된 파일 보기 : tar tvfz 파일명.tar.gz
묶고압축된파일 풀기 : tar xvfz 파일명.tar.gz


사용예 #1

다음과 같이 dir1이라는 디렉토리에는 파일두개가 존재하고 있다.
이를 대상으로 tar의 사용법을 설명하도록 하겠다.

[root@host3 command]# ls -l ./dir1
합계 8
-rw-r--r--    1 root     root          120  9월 18 14:11 textfile
-rw-r--r--    1 root     root           68  9월 18 15:26 textfile2
[root@host3 command]#

먼저 위의 디렉토리 dir1에 있는 모든 파일들을 하나의 파일로 묶어보자.
파일을 압축할 때에는 "cvf"라는 옵션을 사용한다.

[root@host3 command]# tar cvf dir1.tar dir1
dir1/
dir1/textfile
dir1/textfile2
[root@host3 command]#

위의 tar예에서
tar는 tar명령어이며,
cvf는 파일을 하나로 묶기 위한 tar의 옵션이며,
dir1.tar는 하나의 파일로 묶여진후에 생성될 파일명이며(tar의 결과파일),
dir1은 tar의 대상파일(즉, 묶여질 파일들)이다.

아무런 메시지없이 끝났다면 위의 tar작업이 성공적으로 끝났다는 것을 의미한다.
아래의 결과를 확인해 보자.

[root@host3 command]# ls -l
합계 16
-rw-r--r--    1 root     root        10240  9월 20 12:56 dir1.tar
drwxr-xr-x    2 root     root         4096  9월 20 12:55 dir1
[root@host3 command]#

dir1.tar이라는 파일이 새로 생성된 것을 확인할 수 있다.
이 dir1.tar파일에는 dir1디렉토리의 모든 내용이 하나로 묶여져 새로 생성된 파일이다.


사용예 #2

이번에는 위의 예에서 생성한 dir1.tar파일의 내용을 확인해 보도록 하자.
tar파일의 내용을 확인할때에는 "tvf"라는 옵션을 사용한다.
아래의 예를 보자.

[root@host3 command]# tar tvf dir1.tar
drwxr-xr-x root/root         0 2003-09-20 12:55:03 dir1/
-rw-r--r-- root/root       120 2003-09-18 14:11:35 dir1/textfile
-rw-r--r-- root/root        68 2003-09-18 15:26:39 dir1/textfile2
[root@host3 command]#

예상했던 결과와 동일하게 dir1.tar에는 dir1에 있던 내용과 동일한 파일들이 들어있음을 알 수 있다.


사용예 #3

이번에는 앞의 예에서 tar로 묶은 dir1.tar 파일을 다시 원래대로 풀어보도록 하자.

이런 작업을 위해서 dir1은 삭제를 하고 dir1.tar만 남겨두도록 하자.

[root@host3 command]# rm -rf dir1
[root@host3 command]#

위에서 원본파일 dir1을 모두 삭제하였다.


이제 아래와 같이 dir1.tar파일만 남아있음을 알 수 있다.

[root@host3 command]# ls -l          
합계 12
-rw-r--r--    1 root     root        10240  9월 20 12:56 dir1.tar
[root@host3 command]#

이제 이 파일(dir1.tar)을 풀어보자.
tar로 묶여진 파일을 풀때에는 "xvf"라는 옵션을 사용한다.

[root@host3 command]# tar xvf dir1.tar
dir1/
dir1/textfile
dir1/textfile2
[root@host3 command]#

자, 이렇게 풀어진 결과를 확인해보자.

[root@host3 command]# ls -l
합계 16
-rw-r--r--    1 root     root        10240  9월 20 12:56 dir1.tar
drwxr-xr-x    2 root     root         4096  9월 20 12:55 dir1
[root@host3 command]#
[root@host3 command]# ls -l dir1
합계 8
-rw-r--r--    1 root     root          120  9월 18 14:11 textfile
-rw-r--r--    1 root     root           68  9월 18 15:26 textfile2
[root@host3 command]#

원본파일인 dir1과 동일한 디렉토리와 파일들이 생성되어 있음을 확인할 수 있을 것이다.

원본파일과 풀여진 파일들의 날짜와 시간을 자세히 비교해 보면 파일의 생성날짜와 시간이 원본파일과 동일함을 알 수 있다.
즉, tar로 묶여질때에는 묶여지는 파일들의 생성날짜와 시간정보까지 함께 저장이 되어지며, tar로 풀때에는 이 시간정보를 그대로 적용하여 풀어진다는 것을 알 수있다.



사용예 #4

이번에는 파일을 묶는 작업과 압축을 하는 작업을 동시에 해보도록 하자.
이 작업을 하려면 z라는 옵션을 추가해서 "cvfz"라는 옵션을 사용하면 간단히 묶음과 압축을 동시에 할 수있다.

설명의 편의를 위하여 dir2라는 디렉토리를 작업대상으로 하며 dir2에는 다음과 같은 파일 2개가 들어있다.

[root@host3 command]# ls -al dir2
합계 16
drwxr-xr-x    2 root     root         4096  9월 20 13:42 .
drwxr-xr-x    3 root     root         4096  9월 20 13:41 ..
-rw-r--r--    1 root     root          120  9월 18 14:11 textfile1
-rw-r--r--    1 root     root           68  9월 18 15:26 textfile3
[root@host3 command]#

자, 그렇다면 묶음과 압축을 동시에 해보도록 하자.

[root@host3 command]# tar cvfz dir2.tar.gz dir2
dir2/
dir2/textfile1
dir2/textfile3
[root@host3 command]#
[root@host3 command]# ls -l
합계 8
drwxr-xr-x    2 root     root         4096  9월 20 13:42 dir2
-rw-r--r--    1 root     root          284  9월 20 13:43 dir2.tar.gz
[root@host3 command]#

cvfz라는 옵션을 사용하고 새로 생성되는 파일명을 dir2.tar.gz로 하였다.
묶음과 압축의 결과로 dir2.tar.gz파일이 생성되었음을 알수가 있다.

간단한 명령이므로 어렵지는 않으리라 생각한다.

그리고 이렇게 묶음과 압축이 한번에 된 파일의 내용을 확인하고자 한다면 다음과 같이  "tvfz"옵션을 사용한다.

[root@host3 command]# tar tvfz dir2.tar.gz
drwxr-xr-x root/root         0 2003-09-20 13:42:08 dir2/
-rw-r--r-- root/root       120 2003-09-18 14:11:35 dir2/textfile1
-rw-r--r-- root/root        68 2003-09-18 15:26:39 dir2/textfile3
[root@host3 command]#

사용예 #5

위의 예에서 묶음과 압축을 동시에 했던 tar로 압축저장된 파일을 풀어보도록 하자.
묶음과 압축이 동시에 된 파일을 한번에 풀때에는 z옵션을 추가해서 "xvfz"옵션을 사용하면된다.

아래와 같이 dir2라는 원본파일을 모두 삭제한다.

[root@host3 command]# ls -l
합계 8
drwxr-xr-x    2 root     root         4096  9월 20 13:42 dir2
-rw-r--r--    1 root     root          284  9월 20 13:43 dir2.tar.gz
[root@host3 command]#
[root@host3 command]# rm -rf dir2
[root@host3 command]#

원본파일이 삭제된 것을 확인하고 압축된 tar파일만이 남아있다.
[root@host3 command]# ls -l
합계 4
-rw-r--r--    1 root     root          284  9월 20 13:43 dir2.tar.gz
[root@host3 command]#

여기서 아래와 같이 이 파일을 푸는 작업을 한다.

[root@host3 command]# tar xvfz dir2.tar.gz
dir2/
dir2/textfile1
dir2/textfile3
[root@host3 command]#

압축이 잘 풀렸으므로 이를 확인한다.
dir2.tar.gz를 푼 결과 dir2라는 디렉토리와 그 안에 있던 파일들이 새로 생성이 되었다.
아래는 그 결과를 확인한 것이다.

[root@host3 command]# ls -l
합계 8
drwxr-xr-x    2 root     root         4096  9월 20 13:42 dir2
-rw-r--r--    1 root     root          284  9월 20 13:43 dir2.tar.gz
[root@host3 command]#
[root@host3 command]# ls -l dir2
합계 8
-rw-r--r--    1 root     root          120  9월 18 14:11 textfile1
-rw-r--r--    1 root     root           68  9월 18 15:26 textfile3
[root@host3 command]#


특정 파일 또는 특정 디렉토리 제외 압축하기

[root@hosr]$ tar cvzf dirs.tar.gz --exclude dir1 *


추가 

tar 압축시 error 무시하고 압축하기.

--ignore-failed-read


반응형