TAR 명령어의 모든것

1 tar 소개

주요기능은?

아카이브를 만들거나 푼다.

아카이브란?

아카이브는 여러 파일을 한 파일로 묶은 것을 말한다. tar는 아카이브를 압축하지 않는다. 단지 하나의 파일로 묶을 뿐이다. 아카이브의 압축은 gzip이나 bzip2등을 이용한다.

아카이브를 만드는 목적

파일의 백업이나 배포에 편리하게 이용된다.

확장자

아카이브의 확장자는.tar 이다. 일반적으로 tar로 묶인 아카이브를 gzip으로 압축하여 확장자가 .tar.gz 압축 아카이브를 많이 이용한다.

유래

원래, tar 아카이브는 마그네틱 테이프에 파일을 저장하기 위해 만들어졌다. 그래서 tar는 tape archiver에서 유래한다.

2 미리 알아두면 좋을 것들

2.1 옵션주는 방법

긴 형식 옵션

tar --create --verbose --file=afiles.tar apple angst aspic

짭은 형식 옵션

tar -c -v -f afiles.tar apple angst aspic

또는 붙여서

tar -cvf afiles.tar apple angst aspic

tar 는 반드시 옵션이 필요 해서 옵션에 - 를 붙이지 않아도 된다.

tar cvf afiles.tar apple angst aspic

2.2 왜 -f와 -v옵션이 많이 쓰이는가?

-f --file=

-f 는 아카이브 파일의 이름을 지정해 주는 옵션이다. -f 가 없으면 아카이브의 이름이 없는 샘이다. 따라서, -f 로 아카이브의 이름을 꼭 명시해야 한다. tar는 아카이브 이름이 없으면 디폴트 이름을 취한다. 원래 tar의 목적대로 (디폴트로 엑션) 테입드라이브로 아카이브를 저장하려 들지도 모른다. 요즘은, 컴퓨터에 마그네틱 테입 드라이브가 없으므로 에러가 발생할 것이다.

-v --verbose

-v 옵션이 있으면 아카이브에 추가되거나 풀리고 있는 파일의 이름을 화면에 보여준다. 진행사항을 알 수 있기 때문에 사용하는게 좋다.

"ls -l" 과 같은 형식으로 파일을 보려면 v를 두번 써준다.

tar -cvvf afiles.tar 파일들(디렉토리들)

2.3 가장 많이 사용되는 작업

--create -c 새로운 아카이브를 생성한다.

--list -t 아카이브의 내용(묶인 파일이름)을 보여준다.

--extract -x 아카이브에 묶인 파일이나 디렉토리를 풀어준다.

· 아카이브의 파일 리스트 보기

3 명령어 활용예

3.1 아카이브 풀기

 tar -xvf afiles.tar

afiles.tar 라는 아카이브 파일에 묶인 파일과 디렉토리를 현재 디렉토리에 풀어준다.

3.2 아카이브 만들기

 tar -cvf afiles.tar 묶을파일과디렉토리들

afiles.tar 라는 이름으로 파일과 디렉토리를 묶어준다.

3.3 아카이브 내용보기

 tar -tvf afiles.tar 묶을파일과디렉토리들

afiles.tar 라는 이름으로 묶인 파일과 디렉토리를 보여 준다.

3.4 퍼미션을 유지하며 아카이브 만들기

 tar -cvfp archive.tar 묶을파일과디렉토리들

afiles.tar 라는 이름으로 퍼미션을 유지하며 파일과 디렉토리를 묶어준다.

3.5 tar+gzip 압축하기

tar -czvf afiles.tar.gz 묶을파일과디렉토리들

afiles.tar.gz 라는 이름으로 파일과 디렉토리를 묶어준다.

tar -czvfp afiles.tar.gz 묶을파일과디렉토리들

afiles.tar.gz 라는 이름으로 퍼미션을 유지하며 파일과 디렉토리를 묶어준다.

3.6 tar+bzip2 압축하기

tar -cjvf afiles.tar.bz 묶을파일과디렉토리들

afiles.tar.bz 라는 이름으로 파일과 디렉토리를 묶어준다.

tar -cvjfp afiles.tar.gz 묶을파일과디렉토리들

afiles.tar.gz 라는 이름으로 퍼미션을 유지하며 파일과 디렉토리를 묶어준다.

3.7 gzip으로 압축된 tar 풀기

 tar -xvzf afiles.tar.gz

afiles.tar.gz 라는 tar 로 묶인뒤 gzip 으로 압축된 파일을 먼저 압축을 푼뒤에 묶인 파일까지 풀어준다.

3.8 bzip2로 압축된 tar 풀기

 tar -xvjf afiles.tar.bz

afiles.tar.bz 라는 tar 로 묶인뒤 bzip2로 압축된 파일을 먼저 압축을 푼뒤에 묶인 파일까지 풀어준다.

3.9 허가권(Permission) 유지하며 풀기

 tar -xpf afiles.tar

파일을 묶을 당시의 각 파일의 허가권을 유지하며 풀어준다.

4 백업에 활용하기

4.1 아카이브에 새 파일 추가하기

 tar --append --file=collection.tar rock

또는

 tar -rvf collection.tar rock

collection.tar 라는 기존 아카이브 파일에 rock라는 파일을 추가한다. 옵션은 --append (-r) 이다.

똑같은 이름의 파일이 아카이브에 추가되면 기존의 오래된 파일은 지워지지 않고 아카이브에 남아 있는다.

따라서 같은 이름의 파일을 여러번 추가하면(append) 추가된 시간별로 여러 버전의 파일이 존재한다. 그러나, 아카이브를 풀때는 가장 최신 파일이 풀린다.

4.2 아카이브에 파일 업데이트하기

 tar -uvf collection.tar blues folk rock classical

collection.tar 라는 기존 아카이브에 blues folk rock classical등 4 개의 파일을 업데이트 한다. 업데이트는 날자와 시간을 기준으로 실행한다. 아카이브에 있는 파일과 업데이트할 파일이 수정된 날자가 같으면 아카이브에 추가하지 않는다.

만약 아카이브에 있는 파일보다 최근에 수정이 되었으면 아카아브에 추가한다. 기존의 오래된 파일은 지워지지 않고 남아 있는다.

따라서, 업데이트를 여러번 하면, 같은 이름의 파일이 수정된 시간별로 여러가지 버전이 존재할 수 있다. 그러나, 아카이브를 풀때는 가장 최신 파일이 풀린다.

아카이브를 풀때 옵션은--update(-r)이다.

4.3 아카이브에 파일 삭제하기

 tar --delete --file=collection.tar blues

collection.tar 라는 기존 아카이브에서 blues라는 파일을 삭제한다. 주의할 것은 모든 blues파일을 삭제한다는 것이다. 모든 디렉토리내의 blues파일과 여러 버전의 blues가 모두 삭제된다. 다른 옵션과 달리 삭제 옵션인 --delete는 짧은 형식의 옵션이 없다.

3.4 아카이브에서 특정 디렉토리 또는 파일만 풀기

명시된 파일 풀기: collection.tar 라는 아카이브에서 blues라는 파일만 현재 디렉토리에 푼다.

tar --extract --file=collection.tar blues

디렉토리까지 명시: music.tar 에서 practice/folk와 practice/jazz파일만 푼다.

tar -xvf music.tar practice/folk practice/jazz

 

*** 실제 활용 예 ***

tar xzvfp /backup/20050107/20050107.tar.gz /home/ home/yc1500

tar [옵션] [아카이브파일명] [압축을풀어놓을 대상디렉터리] [압축파일내의 특정파일(폴더)]

p 옵션: 허가권 유지 옵션

 

4.5 옛버전 파일 풀기

 tar --extract --file archive.tar --occurrence=2 myfile 

archive.tar 라는 아카이브에서 2번째 버전의 myfile을 푼다.

 tar --extract --file archive.tar --occurrence 

archive.tar 라는 아카이브에서 첫번째 버전의 모든 파일을 푼다.

4.6 아카이브 파일과 실제 파일 비교하기

 tar -d -f archive.tar *.c

archive.tar라는 아카이브에 모든 c파일들과 현재 디렉토리의 c파일을 비교한다. 수정 날자와 내용을 비교하고 내용이나 날자가 다르면 화면에 보여준다.

5 기타

5.1 모든 하위 디렉토리의 특정 소스만 묶고 싶을 때는?

쉘 컴멘드와 조합하여 특정 소스를 찾아서 아카이브에 추가 할 수 있다.

먼저 아카이브를 하나 만든다.

 tar -cvf test.tar prog1.c

for 문과 find 명령을 이용해서 하위 디렉토리의 묶고 싶은 파일을 찾고, tar의 -r 옵션으로 test.tar에 하나씩 추가한다.

 for i in $(find . -name '*.c'); do tar -rvf test.tar $i; done

find 의 다양한 검색능력을 100%활용할 수 있다. 

 

 


Posted by 영웅기삼
,