본문 바로가기

Linux/Commands Part

tar

[압축 관리]
시스템을 관리하면서 백업은 상당히 중요하다. 각 사용자들의 디렉토리나, 각종 설정파일들, 데이터베이스 등 백업해야 하는 파일들이 상당히 많다. 이것들을 어떻게 백업하고 복구하는지 알아보자.
리눅스 시스템 관리자라면 압축관리 유틸리티 중 가장 많이 사용되고 있는 tar 와 gzip, bzip2 에 대하여 알고 있어야 한다. 압축 유틸리티에 대한 더 많은 정보가 필요하면 항상 man 페이지를 이용하여 많은 옵션들을 찾아볼 수 있다.
01. 여러 개의 파일을 하나로 묶고 압축할 수 있는 tar 실무 개론
tar 는 여러개의 파일을 하나로 묶는 명령어이다. 압축 명령어라고 잘못 알고 계시는 분들이 있는데, tar 는 분명 여러 개의 파일을 하나로 묶어주는 일종의 유틸리티라고 할 수 있다.
하지만, 거의 대부분 tar 는 gzip 이나 compress 등과 같은 압축 유틸리티와 함께 사용을 하는 것이 일반적이다.
또한 tar 옵션에는 z 라는 옵션이 있기 때문에 tar 명령어만으로 압축하고 풀 수 이으며, 또한 tar 만으로도 효율적인 파일 관리를 할 수 있다.
◆ 파일을 하나로 묶고 압축하는 이유는 무엇일까요?
파일을 전송하고 받아올 때에 전송 속도를 높이기 위하여 압축을 하게 된다.
그리고 여러 개의 파일을 하나로 묶는 것은 전송시에 편리하게 송수신하기 위함이다.
※ 명령어 위치 : /bin/tar
<사용형식>
파일묶기
tar cvf 파일명.tar 파일(디렉토리)
묶은파일보기
tar tvf 파일명.tar
묶은파일풀기
tar xvf 파일명.tar
묶고압축하기
tar cvfz 파일명.tar.gz 파일(디렉토리)
묶고압축된 파일 보기
tar tvfz 파일명.tar.gz
묶고압축된 파일 풀기
tar xvfz 파일명.tar.gz
피미션유지묶고 압축하기
tar cvfpz 파일명.tar.gz 파일(디렉토리)
퍼미션유지묶고 압축된 파일 보기
tar tvfpz 파일명.tar.gz
퍼미션유지묶고 압축된 파일 풀기
tar xvfpz 파일명.tar.gz
<옵션>
-c : tar 파일을 생성할 때(여러개의 파일을 하나의 파일로 묶을 때) 반드시 사용
-d : tar 파일과 해당 파일시스템간의 차이점을 확인 하고자 할 때 사용
-r : tar 파일에 다른 파일들을 추가하고자 할 경우에 사용
-t : tar 파일의 내용을 확인하고자 할 때 반드시 사용
-f : tar 파일을 사용할 때에는 반드시 사용
-p : tar 파일을 생성할(풀 때에도) 때 원본 파일퍼미션을 그대로 유지함
-v : 묶을 때나 풀 때 그 과정을 자세하게 보려고 할 때 사용
-Z : compress로 압축 파일을 사요할 때 압축이나 해제까지 한번에 할 때 사용
-z : gzip 과 관련하여 압축이나 해제를 한꺼번에 하려고 할 때 사용
이들 옵션들은 하나로만 사용되는 것이 아니라 위의 <사용형식>에서 보시는 바와 같이 용도에 따라서 몇개가 함께 사용된다.
02. tar로 파일 묶는 가장 기본적인 사용법
[root@localhost /]# cd /
[root@localhost /]# mkdir dir1
[root@localhost /]# cd dir1
[root@localhost dir1]# ls
[root@localhost dir1]# touch textfile
[root@localhost dir1]# touch textfile2
[root@localhost dir1]# ls -l
합계 0
-rw-r--r-- 1 root root 0 11월 14 15:43 textfile
-rw-r--r-- 1 root root 0 11월 14 15:43 textfile2
[root@localhost dir1]# pwd
/dir1
먼저 위의 디렉토리 dir1 에 있는 모든 파일들을 하나의 파일로 묶어보자.
파일을 압축할 때에는 “cvf” 라는 옵션을 사용한다.
[root@localhost dir1]# tar cvf dir1.tar dir1
tar: dir1: Cannot stat: 그런 파일이나 디렉토리가 없음
tar: Error exit delayed from previous errors
[root@localhost dir1]# pwd
/dir1
내가 dir1 디렉토리를 압축하려고 하니 에러를 발생하였다. 이는 내가 디렉토리를 압축 할 때에는 그 상위 디렉토리에 가서 작업을 해야 한다.
[root@localhost dir1]# cd ..
[root@localhost /]# ls -F
apm_pds/ dev/ home/ mc/ mnt/ proc/ selinux/ sys/ var/
bin/ dir1/ lib/ media/ net/ root/ share/ tmp/
boot/ etc/ lost+found/ misc/ opt/ sbin/ srv/ usr/
[root@localhost /]# tar cvf dir1.tar dir1
dir1/
dir1/dir1.tar
dir1/textfile2
dir1/textfile
[root@localhost /]# ls
apm_pds dev etc lost+found misc opt sbin srv usr
bin dir1 home mc mnt proc selinux sys var
boot dir1.tar lib media net root share tmp
위의 tar 예에서 tar cvf dir1.tar dir1
tar 는 tar 명령어이며,
cvf 는 파일을 하나로 묶기 위한 tar의 옵션이며,
dir1.tar 는 하나의 파일로 묶여진 후에 생성될 파일명이며(tar 의 결과파일),
dir1 은 tar 의 대상파일(즉, 묶여질 파일들) 이다.
03. tar 로 묶여진 파일내의 파일리스트 확인하기
이번에는 위의 예에서 생성한 dir1.tar 파일의 내용을 확인해 보자. tar 파일의 내용을 확인할 때에는 “tvf”라는 옵션을 사용한다.
[root@localhost /]# tar tvf dir1.tar
drwxr-xr-x root/root 0 2008-11-14 15:44:31 dir1/
-rw-r--r-- root/root 10240 2008-11-14 15:44:31 dir1/dir1.tar
-rw-r--r-- root/root 0 2008-11-14 15:43:18 dir1/textfile2
-rw-r--r-- root/root 0 2008-11-14 15:43:17 dir1/textfile
예상했던 바와같이 dir1.tar 에는 dir1 에 있던 내용과 동일한 파일들이 들어 있음을 알 수 있다.
04. tar 로 묶여진 파일 풀기
앞의 예에서 tar로 묶은 dir1.tar 파일을 다시 원래대로 풀어보도록 하자.
이런 작업을 하기 위해서 dir1 은 삭제하고 dir1.tr 만 남겨두도록 하자.
[root@localhost /]# rm -rf dir1
[root@localhost /]# ls
apm_pds dev home mc mnt proc selinux sys var
bin dir1.tar lib media net root share tmp
boot etc lost+found misc opt sbin srv usr
이제 dir1.tar 를 풀어보자.
[root@localhost /]# tar xvf dir1.tar
dir1/
dir1/dir1.tar
dir1/textfile2
dir1/textfile
[root@localhost /]# ls -F
apm_pds/ dev/ etc/ lost+found/ misc/ opt/ sbin/ srv/ usr/
bin/ dir1/ home/ mc/ mnt/ proc/ selinux/ sys/ var/
boot/ dir1.tar lib/ media/ net/ root/ share/ tmp/
[root@localhost /]# cd /dir1
[root@localhost dir1]# ls -al
합계 24
drwxr-xr-x 2 root root 4096 11월 14 15:44 .
drwxr-xr-x 27 root root 4096 11월 14 15:49 ..
-rw-r--r-- 1 root root 10240 11월 14 15:44 dir1.tar
-rw-r--r-- 1 root root 0 11월 14 15:43 textfile
-rw-r--r-- 1 root root 0 11월 14 15:43 textfile2
[root@localhost dir1]# ls -al /dir1.tar
-rw-r--r-- 1 root root 20480 11월 14 15:45 /dir1.tar
원본파일과 풀려진 파일들의 날짜와 시간을 자세하 비교해 보면 파일의 생성날짜와 시간이 원본파일과 동일함을 알 수 있다.
05. tar 로 파일묶기와 압축하기를 동시에 하기
이 작업을 하려면 z 옵션을 추가해서 “cvfz” 라는 옵션을 사용하면 간단하게 묶음과 압축을 동시에 할 수 있다.
[root@localhost /]# cd /
[root@localhost /]# mkdir dir2
[root@localhost /]# cd dir2
[root@localhost dir2]# touch textfile1
[root@localhost dir2]# touch textfile3
[root@localhost dir2]# ls
textfile1 textfile3
[root@localhost dir2]# cd ..
[root@localhost /]#
위 사전 작업은 끝났으니, 이제 묶음과 압축을 동시에 해보자.
[root@localhost /]# tar cvfz dir2.tar.gz dir2
dir2/
dir2/textfile1
dir2/textfile3
[root@localhost /]# ls -F
apm_pds/ dir1/ etc/ mc/ net/ sbin/ sys/
bin/ dir1.tar home/ media/ opt/ selinux/ tmp/
boot/ dir2/ lib/ misc/ proc/ share/ usr/
dev/ dir2.tar.gz lost+found/ mnt/ root/ srv/ var/
cvfz 라느ㄴ 옵션을 사용하고 새로 생성되는 파일명을 dir2.tar.gz 로 하였다. 묶음과 압축의 결과를 dir2.tar.gz 파일이 생성되었음을 알 수 있다.
그리고 이렇게 묶음과 압축이 한번에 된 파일의 내용을 확인하고자 한다면 “tvfz” 옵션을 사용한다.
[root@localhost /]# tar tvfz dir2.tar.gz
drwxr-xr-x root/root 0 2008-11-14 15:52:52 dir2/
-rw-r--r-- root/root 0 2008-11-14 15:52:50 dir2/textfile1
-rw-r--r-- root/root 0 2008-11-14 15:52:52 dir2/textfile3
06. tar 로 묶고 압축된 파일 풀기
위의 예에서 묶음과 압축을 동시에 했던 tar 로 압축저장된 파일을 풀어보도록 하자.
묶음과 압축이 동시에 된 파일을 한번에 풀 때에는 z 옵션을 추가해서 “xvfz” 옵션을 사용하면 된다.
[root@localhost /]# rm -rf dir2
[root@localhost /]# ls -F
apm_pds/ dir1/ home/ media/ opt/ selinux/ tmp/
bin/ dir1.tar lib/ misc/ proc/ share/ usr/
boot/ dir2.tar.gz lost+found/ mnt/ root/ srv/ var/
dev/ etc/ mc/ net/ sbin/ sys/
원본 파일이 삭제된 것을 확인하고 압축된 dir2.tar.gz 파일을 확인하라.
[root@localhost /]# tar xvfz dir2.tar.gz
dir2/
dir2/textfile1
dir2/textfile3
[root@localhost /]# ls -F
apm_pds/ dir1/ etc/ mc/ net/ sbin/ sys/
bin/ dir1.tar home/ media/ opt/ selinux/ tmp/
boot/ dir2/ lib/ misc/ proc/ share/ usr/
dev/ dir2.tar.gz lost+found/ mnt/ root/ srv/ var/
[root@localhost /]# cd dir2
[root@localhost dir2]# ls
textfile1 textfile3
압축이 잘 풀렸으므로 이를 확인하면 위와 같다. dir2.tar.gz 를 푼 결과 dir2 라는 디렉토리와 그 안에 있던 파일들이 새로 생성된 것을 확인할 수 있을 것이다.
07. tar 로 원본파일의 퍼미션을 그대로 유지한채로 묶고 압축하기
퍼미션에 대해서 잘 모르겠으면, 퍼미션 부분을 다시 공부하도록 하자!
이 퍼미션은 리눅스에서 정말 중요한 부분이니 확실히 이해하고 사용할 수 있어야 한다!
02. gzip 이용하기
# tar –cvzf home.tar.gz /home
/home 디렉토리에 gzip을 이용하여 home.tar.gz 라는 이름으로 압축한다.
# tar –xvzf home.tar.gz
현재 디렉토리에 home.tar.gz 파일의 압축을 해제한다.
03. bzip2 이용하기
# tar –cvjf home.tar.bz2 /home
/home 디렉토리를 bzip2를 이용하여 home.tar.bz2 라는 이름으로 압축한다.
# tar –xvjf home.tar.bz2
현재 디렉토리에 home.tar.bz2 파일의 압축을 해제한다.