2011. 8. 11. 02:27

 

 

 

 

 

 

 

 

 

 

tar(tape archiver)는 초기 유닉스 시스템에서부터 사용.

지금은 마그네틱 테이프가 일반적이지 않지만, tar는 여전히

아카이브 파일을 생성하고 여러 미디어를 통해 배포하는데

선호되는 명령어이다.

 

 

◈ [ 기능 옵션 ] - 반드시 아래 옵션들 중 하나가 들어가야 함

옵 션 [ ,긴 옵션 ]

설 명

-c, --create

새로운 아카이브를 만든다

-x, --extract

아카이브 파일을 풀어준다

-d, --diff

아카이브 파일을 비교하여 다른 점을 찾는다

-u, --update

아카이브 파일에 저장된 사본보다 새로운 파일만 덧붙여 업데이트

-A, --catenate

하나의 tar 파일에 다른 파일을 병합

-r, --append

아카이브 파일 끝에 파일을 덧붙여 추가

-t, --list

아카이브 파일 내용목록을 보여준다

--delete

기존 아카이브 파일에서 삭제 (자기 테이프에 쓰면 안됨X)

 

[ 부가적인 옵션 ]

옵 션 [ ,긴 옵션 ]

설 명

-f, --file ARCHIVE

지정한 아카이브파일에 읽기 ∙ 쓰기를 실행. (필수)

" - " 는 표준입력에서 데이터를 받거나 표준출력으로 데이터를 쓴다.

-v, --verbose

처리중인 과정을 자세히 출력

-p

모든 퍼미션 정보를 유지.

-j, --bzip2

bzip2 사용하여 파일 압축/풀기

-z, --[un]gzip

gzip 사용하여 파일 압축/풀기

-Z, --[un]compress

compress 사용하여 파일 압축/풀기

--use-compress-program PROG

PROG 로 지정된 압축툴로 아카이브 파일을 다시 처리

( PROG는 반드시 -d(압축 해제)를 처리해야 함)

 

 

tar는 명령어에 옵션을 넣어주는 표준적인 방법이 정해지기 전에 만들어진 명령이다.

지금은 tar에서도 대시(-)로 시작하는 옵션을 사용할 수 있지만 항상 필요한 것은 아니다.

때문에 옵션을 의미하는 문자가 없는 tar xvf와 같은 명령어도 볼 수 있다.

 

 

tar [ .tar ] - 기본 사용 예

tar는 기본적으로 압축은 하지 않고 단순히 하나의 파일(.tar)로 묶음.

 

▶ tar 아카이브 파일 생성(묶기) : (c옵션)

$ tar cvf archive.tar *.txt

aaa.txt

bbb.txt

ccc.txt

 

▶ tar 아카이브 파일 풀기 : (x옵션)

$ tar xvf archive.tar

aaa.txt

bbb.txt

ccc.txt

 

▶ tar 아카이브 파일 목록 보기 : (t옵션)

$ tar tvf archive.tar

-rw-r--r-- devanix/devanix 19 2011-08-10 22:42 aaa.txt

-rw-r--r-- devanix/devanix 16 2011-08-10 22:42 bbb.txt

-rw-r--r-- devanix/devanix 19 2011-08-10 22:42 ccc.txt

 

▶ tar 아카이브 파일에 다른 파일을 병합 : (A 옵션)

$ tar -Af archive1.tar archive2.tar

$ tar tvf archive1.tar

-rw-r--r-- devanix/devanix 19 2011-08-10 22:42 aaa.txt

-rw-r--r-- devanix/devanix 16 2011-08-10 22:42 bbb.txt

-rw-r--r-- devanix/devanix 19 2011-08-10 22:42 ccc.txt

-rw-r--r-- devanix/devanix 40 2011-08-10 23:55 ddd.txt

-rw-r--r-- devanix/devanix 35 2011-08-10 23:55 eee.txt

archive2.tar 파일이 archive1.tar 아카이브에 추가된다.

 

▶ tar 아카이브에서 파일 삭제 : (--delete)

$ tar --delete ddd.txt eee.txt -f archive1.tar

$ tar tvf archive1.tar

-rw-r--r-- devanix/devanix 19 2011-08-10 22:42 aaa.txt

-rw-r--r-- devanix/devanix 16 2011-08-10 22:42 bbb.txt

-rw-r--r-- devanix/devanix 19 2011-08-10 22:42 ccc.txt

 

▶ tar 아카이브에 하나 이상의 파일 추가 : (r 옵션)

$ tar rvf archive1.tar ddd.txt eee.txt

ddd.txt

eee.txt

ddd.txt, eee.txtarchive1.tar 아카이브 파일에 추가 된다.

 

 

 

 

tar + 타 압축 필터(gzip, bzip2, ...)

♧ tar + gzip (z 옵션)

tar로 하나의 파일로 묶고 gzip으로 압축하는 과정을 한번에 수행.

tar+gzip확장자 : [ .tar.gz | .tar.z | .tgz ]

 

▶ tar + gzip 아카이브 파일 압축 생성 : (.tar.gz)

$ tar czvf archive.tar.gz *.txt

aaa.txt

bbb.txt

ccc.txt

▷ z옵션이 지원하지 않는 경우 :

$ tar cvf - *.txt | gzip -c > archive.tar.gz

tar로 하나의 아카이브 파일로 묶고(.tar) gzip로 압축(.gz) 한다.

 

▶ tar + gzip 아카이브 압축 파일 풀기 : (.tar.gz)

$ tar xzvf archive.tar.gz

aaa.txt

bbb.txt

ccc.txt

▷ z옵션이 지원하지 않는 경우 :

$ gunzip -c archive.tar.gz | tar xvf -

gunzip으로 압축 파일을 풀고(.gz) tar로 나머지 아카이브 파일 풀기(.tar)

 

 

♧ tar + bzip2 (j 옵션)

tar로 하나의 파일로 묶고 bzip2으로 압축하는 과정을 한번에 수행.

tar+bzip2확장자 : [ .tar.bz2 ]

 

▶ 압축 생성 & 해제 역시 위의 예와 동일하나 해당 압축 필터 사용 옵션으로 변경 한다.

/* 아카이브 압축 생성 */

$ tar cjvf archive.tar.bz2 *.txt

/* 아카이브 압축 풀기 */

$ tar xjvf archive.tar.bz2

 

♧ tar + lzop (--use-compress-progarm 옵션)

--use-compress-program옵션 사용하여 lzop 압축 툴 사용.

⇒ 해당 lzop 압축 유틸은 조금 덜 통합된 tar이다.

lzop를 사용하기 전에 lzop 패키지를 먼저 인스톨 해야 한다.

tar+lzop확장자 : [ .tar.lzo ]

 

▶ tar+lzop 압축 & 해제 사용

/* 아카이브 압축 생성 */

$ tar --use-compress-program=lzop -cf archive.tar.lzo *.txt

/* 아카이브 압축 풀기 */

$ tar --use-compress-program=lzop -xf archive.tar.lzo

 

 

※ 다른 압축 파일 역시 사용 방법은 다 비슷하므로 file 명령을 사용하여 압축 파일의 종류를 먼저 구분한다.

$ file archive.tgz

archive.tgz: gzip compressed data, from Unix, …

$ file archive.tar.bz2

archi.tar.bz2: bzip2 compressed data, block size = 900k

$ file archive.tar.lzo

archive.tar.lzo: lzop compressed data - version 1.020, LZO1X-1, os: Unix

 

 

 

Posted by devanix
2011. 7. 4. 02:04

♧ 사실 ar 명령으로 생성한 아카이브는 정적 라이브러리에 국한되지 않고

tar(1) 등과 마찬가지로 범용적인 비압축 아카이브로 사용할 수 있다.

그러나 일반적으로는 정적 라이브러리를 다루기 위해 사용된다.

   

   

▶ 아카이브를 생성할 경우 :: ar rcus [라이브러리 이름] [오브젝트 파일들]

r 옵션 :: 새로운 오브젝트 파일이면 추가, 기존 파일이면 치환함.

c 옵션 :: libhoge.a 파일이 존재하지 않아도 경고 메시지를 출력하지 않음.

u 옵션 :: 오브젝트 파일의 타임스탬프를 비교해 새로운 파일일 경우에만 치환함.

s 옵션 :: ranlib(1)과 마찬가지로 아카이브 인덱스를 생성.

→ 아카이브 인덱스를 생성하지 않으면 링크 속도가 느려지고, 시스템 환경에 따라서는 에러가 발생.

(※ 아카이브 인덱스는 nm -s로 조회할 수 있다.)

   

▶ 기존 아카이브 파일에 오브젝트 제거 :: ar ds [라이브러리 이름] [오브젝트 파일들]

d 옵션 :: 아카이브 모듈을 삭제

→ 삭제할 파일이 없다면 아카이브를 건들지 않음.

   

▶ 아카이브의 내용을 조회 :: ar tv [라이브러리 이름]

t 옵션 :: 아카이브에 있는 파일 리스트 출력

v 옵션 :: 자세한 내용을 보여주는 verbose 모드.

→ 이 옵션을 이용하면 파일크기나 갱신시각 등의 정보도 출력.

   

▶ 아카이브에서 파일을 추출하려면 :: ar xv [라이브러리 이름]

x 옵션 :: 아카이브에서 오브젝트 파일 추출

→ v옵션을 지정하면 추출한 파일에 대한 파일명 출력.

   

 

▷ ar 명령은 정적 라이브러리를 생성할 때뿐만 아니라,

정적 라이브러리의 기능을 부분적으로 변경하고자 할 경우에도 사용할 수 있다.

라이브러리가 모두 오픈 소스로 구성되어 있지 않은 이유 등으로

정적 라이브러리를 처음부터 다시 작성할 수 없는 경우에 편리하게 이용될 수 있다.

   

그 밖에도 아카이브 냉의 이동, 제거 등 아카이브를 다루는 옵션이 더 있지만,

대부분의 경우 위에서 설명한 옵션만으로도 문제가 없을 것이다.

   

Posted by devanix