프로그래밍/Unix

[유닉스] 파일 아카이브 - tar 파일, .Z 파일

미냐님 2020. 4. 9. 10:18
728x90

파일 아카이브

  • 아카이브 : 보관소, 저장소
  • 파일 아카이브 : 파일을 묶어 하나로 만든 것
  • 과거 : 여러 파일이나 디렉토리를 묶어 이동식 저장 장치에 보관하기 위해 사용되었음
  • 다른 시스템과 파일을 주고받거나, 백업을 하기 위해 아카이브 파일 생성
  • 기존 아카이브에서 파일을 추출

tar(tape archive)

  • 파일과 디렉토리를 묶어 하나의 아카이브 파일 생성
  • 형식 : tar 기능[옵션] [아카이브 파일] 파일명
  • 기능 키
    • 기능 키 앞에는 ‘–’ 기호를 사용하지 않아도 됨

  • 옵션
    • 옵션 사용시 기능키와 결합하여 사용하며, ‘–’ 기호를 사용하지 않아도 되지만, 인자값이 있는 옵션을 여러 개 지정하는 경우에는 – 기호를 사용해야 함

  • 사용 예
    • tar cvf unix.tar Unix
    • tar xvf unix.tar

아카이브 생성하기 : cvf

  • 예제 파일 만들기
$ mkdir ~/ch9
$ cd ch9
$ cp /etc/hosts test1.txt
$ cp test1.txt test2.txt
$ cp test2.txt test3.txt
$ mkdir tmp
$ cp *.txt tmp
$
  • tar로 아카이브 생성
$ tar cvf txt.tar *.txt
test1.txt
test2.txt
test3.txt
$ ls txt.tar
txt.tar
$
  • c (create) : 아카이브 생성
  • v (verbose) : 처리 중인 파일의 이름을 화면에 출력
  • f (file)
    • 생성될 아카이브의 이름 지정
    • f 다음에 오는 이름이 아카이브 이름
    • 파일 이름에는 제약이 없으나 .tar로 지정하는 것이 좋음
    • f가 지정되어 있으면 tar는 첫 번째 이름을 아카이브 이름으로, 두 번째부터 마지막 이름까지를 묶을 파일 이름으로 간주
  • f 다음에 이름을 쓰지 않은 경우
    • 쉘은 파일 이름에 사용된 특수 문자를 해석하여 tar에 전달
    • tar는 “tar cvf test1.txt test2.txt test3.txt”를 전달받아 test1.txt를 아카이브 이름으로, 2.txt와 3.txt를 묶을 대상 파일로 이해하고 처리
$ tar cvf *.txt
test2.txt
test3.txt
$
  • 디렉토리를 묶은 아카이브
$ tar cvf tmp.tar tmp
tmp/
tmp/test1.txt
tmp/test2.txt
tmp/test3.txt
$
  • tar 명령으로 파일을 묶어 아카이브 파일을 만들어도 원본 파일은 그대로 유지됨
  • 디스크 용량을 두 배로 차지

아카이브 생성 확인하기 : tvf

  • t (table of contents) : 생성된 아카이브 확인
$ tar tvf txt.tar
-rw-r--r-- ksshin/ksshin 221 2015-07-04 22:18 test1.txt
-rw-r--r-- ksshin/ksshin 221 2015-07-04 22:18 test2.txt
-rw-r--r-- ksshin/ksshin 221 2015-07-04 22:18 test3.txt
$
  • 파일의 상세 정보 : ls –l 명령의 결과와 비슷
  •    - : 파일 종류 (b, c, d, l, s, p 등)
       rw-r--r-- : 접근 권한
       ksshin/ksshin : 파일 소유자와 파일의 소속 그룹.
       숫자 : 파일 크기
       날짜 : 파일을 마지막으로 수정한 일시
       이름 : 파일명
    <br>
    <br>
    

아카이브 풀기 : xvf

  • x (extract) : 아카이브 풀기
$ mkdir temp
$ cp txt.tar temp
$ cd temp
$ tar xvf txt.tar
test1.txt
test2.txt
test3.txt
$ ls
test1.txt test2.txt test3.txt txt.tar
$
  • 아카이브 생성할 때 파일들은 저장한 원래의 경로에 복사됨
  • 아카이브를 풀기 전에 t (tvf) 기능을 이용해 아카이브의 경로를 확인한 후 작업을 수행하는 것이 바람직
  • 아카이브 생성할 때 절대경로를 지정하면, 아카이브 풀 때 현재 위치에 상관없이 원래 위치에 파일이 복사됨

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

  • u (update) : 아카이브 만든 이후, 일부 파일 내용이 바뀌었을 경우 사용
  • 아카이브에 없는 파일이거나, 아카이브에 있는 파일이지만 수정된 파일일 경우 아카이브의 마지막에 추가됨
  • 파일에 변경 사항이 없을 경우 u 기능을 지정하여 아카이브 수정해도 변동 사항 없음
$ tar uvf txt.tar test2.txt
$ touch test2.txt
$ tar uvf txt.tar test2.txt
test2.txt
$ tar tvf txt.tar
-rw-r--r-- ksshin/ksshin 221 2015-07-04 22:18 test1.txt
-rw-r--r-- ksshin/ksshin 221 2015-07-04 22:18 test2.txt
-rw-r--r-- ksshin/ksshin 221 2015-07-04 22:18 test3.txt
-rw-r--r-- ksshin/ksshin 221 2015-07-05 06:08 test2.txt
$
  • 기존 파일에 변경 사항 없이 u 기능을 지정하여 아카이브를 수정하면 변동이 없음
  • touch 명령으로 test2.txt의 수정 시간 변경 후 u 기능을 사용하면 아카이브의 마지막에 파일이 추가됨
  • 아카이브를 추출할 때 앞에서부터 순서대로 추출되므로 나중에 추가된 파일이 먼저 추출된 파일을 덮어쓰게 됨

파일 추가하기 : rvf

  • r (replace) : 지정한 파일을 무조건 아카이브의 마지막에 추가
$ cp /etc/services test.txt
$ tar rvf txt.tar test.txt
test.txt
$ tar tvf txt.tar
-rw-r--r-- ksshin/ksshin 221 2015-07-04 22:18 test1.txt
-rw-r--r-- ksshin/ksshin 221 2015-07-04 22:18 test2.txt
-rw-r--r-- ksshin/ksshin 221 2015-07-04 22:18 test3.txt
-rw-r--r-- ksshin/ksshin 221 2015-07-05 06:08 test2.txt
-rw-r--r-- ksshin/ksshin 19558 2015-07-05 06:14 test.txt
$
728x90