OS/Linux - Ubuntu

[Linux - 리눅스 / Ubuntu - 우분투] 파일 아카이브와 압축 - tar, xvf, tvf, uvf, rvf

주누다 2015. 4. 23. 00:05
반응형

아카이브

- 아카이브는 '보관소', '저장소' 라는 뜻으로,

  리눅스에서는 '파일을 묶어서 하나로 만든 것'이라는 의미로 사용



파일 아카이브

- tar(tape archive)은 원래 여러 파일이나 디렉터리를 묶어서 마그네틱 테이프와 같은

  이동식 저장장치에 보관하기 위해 사용하는 명령

- 여러 파일이나 디렉터리를 하나의 아카이브 파일로 생성하거나, 기존 아카이브에서 파일을 추출하는데 사용

tar

- 기능 :  파일과 디렉터리를 묶어 하나의 아카이브 파일을 생성

- 형식 : tar 명령[옵션] [아카이브 파일] 파일 이름

- 명령 :

 * 'c' : 새로운 tar 파일을 생성

 * 't' : tar 파일의 내용을 출력

 * 'x' : tar 파일에서 원본 파일을 추출

 * 'r' : 새로운 파일을 추가

 * 'u' : 수정된 파일을 업데이트

- 옵션 :

 * 'f' : 아카이브 파일이나 테이프 장치를 지정.

        파일 이름을 -로 지정하면 tar 파일 대시 표준입력에서 읽어들임

 * 'v' : 처리하고 있는 파일의 정보를 출력

 * 'h' : 심벌릭 링크의 원본 파일을 포함함.

 * 'p' : 파일 복구 시 원래의 접근 권한을 유지

 * 'j' : bzip2로 압축하거나 해제함

 * 'z' : gzip으로 압축하너가 해제함

- 사용 예 : tar cvf unix.tar Unix, tar xvf unix.tar

1) 아카이브 생성하기 : cvf

- tar 명령을 이용하여 여러 파일이나 디렉터리를 묶어 아카이브 파일을 생성

- 아카이브를 생성하려면 c(create) 기능을 사용

- 'v 옵션'은 처리 중인 파일의 이름을 화면에 출력. 없어도 괜찮지만 올바로 처리되는지 확인하려면 사용한느 것이 좋음

- 'f 옵션'에는 생성될 아카이브의 이름을 지정. f 다음에 오는 이름을 아카이브 이름으로 간주

- 파일 이름에는 특별한 제약이 없지만 확장자를 .tar로 지정하면 나중에 파일 관리를 쉽게 할 수 있음

- f 가 지정되어 있으면 tar 은 첫 번째 이름을 아카이브 이름으로, 두번째부터 마지막 이름을 묶을 파일 이름으로 간주

====================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex$ tar cvf ch7.tar ch7
ch7/
ch7/t6
ch7/t3
ch7/t5
ch7/t2
ch7/bad.out
ch7/t4
ch7/t1
ch7/t7
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex$ ls
ch7  ch7.tar  ch9
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex$
====================================================================



2) 아카이브 내용 보기 : tvf

- 아카이브의 내용을 확인할 때는 t(table of contents) 기능을 사용

- 'v 옵션' 은 파일의 상세 정보를 보기 위해 지정하는 것(이 옵션을 지정하지 않으면 tar 파일에 저장된 파일의 이름만 출력)

====================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex$ tar tvf ch7.tar
drwxrwxr-x sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t6
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t3
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t5
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t2
-rw-r--r-- root/root             0 2015-04-13 22:31 ch7/bad.out
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t4
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t1
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t7
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex$

====================================================================


- 아카이브에 포함된 파일의 상세 정보 확인 가능('ls -l' 과 비슷)

 * '-' : 파일 종류(b, c, d, l, s, p 등)

 * 'rw-r--r--' : 접근 권한

 * 'sjw-lenovo/sjw-lenovo' : 파일 소유자와 파일의 소속 그룹

 * '숫자' : 파일 크기

 * '날짜' : 파일을 마지막으로 수정한 일시

 * '이름'  : 파일명



3) 아카이브 풀기 : xvf

- 아카이브를 풀 때는 x(extract) 기능을 사용

====================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex$ ls
ch7  ch7.tar  ch9
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex$ mv ch7.tar ch9
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex$ cd ch9
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ ls
ch7.tar  hello  hello.c  makefile  one  one.c  one.o  two.c  two.o
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ tar xvf ch7.tar
ch7/
ch7/t6
ch7/t3
ch7/t5
ch7/t2
ch7/bad.out
ch7/t4
ch7/t1
ch7/t7
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ ls
ch7  ch7.tar  hello  hello.c  makefile  one  one.c  one.o  two.c  two.o
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$
====================================================================


- 아카이브를 풀기전 tvf 를 이용하여 아카이브의 파일 경로를 확인한 후 적당한 위치에 수행하는 것이 좋음



4) 아카이브 업데이트하기 : uvf

- 아카이브를 만든 다음 일부 파일 내용이 바뀌었다면 u(update)  기능을 사용하여 수정된 파일을 추가할 수 있음

- 'u' 기능은 지정한 파일이 아카이브에 없거나,

  아카이브에 있지만 수정된 파일일 경우 아카이브의 마지막에 추가

- 기존 파일에 변경 사항이 없을 경우, 'u' 기능을 지정하여 아카이브를 수정해도 바뀌는 것이 없음

- 간단하게 touch 명령을 사용하여 수정 시간을 변경한 뒤 'u' 기능을 사용하면 아카이브에 추가됨

- 아카이브에서 파일을 추출할 때 앞부터 순서대로 추출되므로 나중에 추가된 파일이 최종적으로 추출

====================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ tar uvf ch7.tar ch7
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ touch ch7/data
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ tar uvf ch7.tar ch7
ch7/data
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ tar tvf ch7.tar
drwxrwxr-x sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t6
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t3
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t5
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t2
-rw-r--r-- root/root             0 2015-04-13 22:31 ch7/bad.out
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t4
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t1
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t7
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-23 23:57 ch7/data
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ 

====================================================================



5) 아카이브에 파일 추가하기 : rvf

- 이미 생성된 아카이브에 파일을 추가하는 기능은 r(replace)

- 아카이브에 파일이 이미 있는지 확인하고 추가하는 'u' 기능과

  달리 'r' 기능은 지정한 파일을 무조건 아카이브의 마지막에 추가

====================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ sudo cp /etc/hosts .
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ tar rvf ch7.tar hosts
hosts
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ tar tvf ch7.tar
drwxrwxr-x sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t6
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t3
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t5
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t2
-rw-r--r-- root/root             0 2015-04-13 22:31 ch7/bad.out
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t4
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t1
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-22 21:26 ch7/t7
-rw-rw-r-- sjw-lenovo/sjw-lenovo 0 2015-04-23 23:57 ch7/data
-rw-r--r-- root/root           236 2015-04-24 00:00 hosts
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$
====================================================================



6) 파일 압축과 아카이브

- 아카이브를 생성하면서 동시에 압축 가능

- 보통 tar로 아카이브를 만든 다음 gzip 같은 압축 명령으로 압축

- 동시에 처리할 수 있도록 옵션이 추가됨

- gzip 로 압축할 때는 'z' 옵션을 사용. 아카이브의 이름에 .gz를 붙여서 gzip로 압축했음을 표시하는 것이 좋음

====================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ tar cvzf ch7.tar.gz ch7
ch7/
ch7/t6
ch7/t3
ch7/t5
ch7/t2
ch7/bad.out
ch7/t4
ch7/t1
ch7/t7
ch7/data
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ ls
ch7      ch7.tar.gz  hello.c  makefile  one.c  two.c
ch7.tar  hello       hosts    one       one.o  two.o
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$

====================================================================


- bzip2로 압축할 때는 'j' 옵션을 사용. 아카이브의 일므에 .bz2를 붙여서 bzip2로 압축했음을 표시

====================================================================

sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ ls
ch7      ch7.tar.gz  hello.c  makefile  one.c  two.c
ch7.tar  hello       hosts    one       one.o  two.o
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ tar cvjf ch7.tar.bz2 ch7
ch7/
ch7/t6
ch7/t3
ch7/t5
ch7/t2
ch7/bad.out
ch7/t4
ch7/t1
ch7/t7
ch7/data
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$ ls
ch7      ch7.tar.bz2  hello    hosts     one    one.o  two.o
ch7.tar  ch7.tar.gz   hello.c  makefile  one.c  two.c
sjw-lenovo@sjwlenovo-Lenovo-U310:~/linux_ex/ch9$

====================================================================


- 압축한 아카이브 파일의 내용은 tvf 로 확인이 가능하고, xvf로 추출 가능




반응형