su Password: adduser그리고 난 후 test라고 불리는 유저를 만들기 위해 프롬프트가 나타난다.
cp -r /usr/ports/www/ ~test/나는 이 파일들의 소유를 변경하여 테스트 사용자에 속하게 했다.
chown -R test ~test/www/*현재 실습을 할 수 있는 파일들이 테스트 디렉토리에 많이 있다. test 유저로 로긴하여 내 홈 디렉토리 내용을 점검했다.
ls -l total 16 drwxr-xr-x 375 test wheel 9728 May 11 09:53 www/ du -h | tail -2 28M ./www 28M .
한권으로 끝내는 유닉스 | ||
tar c .여기서 c는 "하나의 아카이브를 생성하라"는 것을 의미하고 "."는 "현재 디렉토리"를 의미한다. 그러나 만약 이를 시도하려 한다면 아마도 내가 했던 것과 같은 에러 메시지가 뜰 것이다.
tar c . tar: can"t open /dev/sa0 : Permission denied아하, 이제 여러분은 다음과 같이 생각할 수도 있다. 내가 슈퍼유저로 시도해 봐야겠다.
su Password: tar c . tar: can"t open /dev/sa0 : Device not configured지난번 기사에서 내가 테잎 디바이스에 대해 얘기했던 것을 기억하는가? 기본적으로 tar 유틸리티는 여러분 PC에 붙어있는 드라이브를 가지게 될 경우 큰 첫번째 SCSI 테잎 드라이브(/dev/sa0)로 백업하기를 원할 것이라고 생각할 것이다. 그렇지만 여러분이 원치 않을 경우 잃어버리는 것은 없다. 유닉스에서 테잎 디바이스는 아주 간단한 파일일 뿐이다. 따라서 그 파일이 다른 형태의 테잎 디바이스, 플로피나 다른 하드 드라이브, 또는 네트워크상의 다른 PC, 그것도 아니면 시스템 어딘가에 있는 실제 파일인지 아닌지에 상관없이 다른 파일로 백업을 생성하라고 tar에게 지시하기는 쉽다.
tar cf backup.tar .내가 이 명령을 수행하면 잠시동안 프롬프트가 사라지고 하드 드라이브가 열심히 돌아가는 소리가 난다. 프롬프트가 다시 나타나면 홈 디렉토리에 backup.tar라 명명된 파일이 나타날 것이다. 만약 기다리는 것이 싫다면 v 스위치를 사용해보자. tar는 동작하는 동안 무슨 일을 하고 있는지 보여줄 것이다. 그 백업파일을 지우고 v스위치로 다시 시도해 볼 것이다.
rm backup.tar tar cvf backup.tar .이것을 시도해보면 그 차이를 이해할 수 있을 것이다. 지금 생성된 tar파일이 무슨 형태인지 살펴보도록 하자.
file backup.tar backup.tar: GNU tar archiveASCII 텍스트 파일이 아니기 때문에 페이저(pager)나 에디터로 그 내용들을 볼 수 없다. 그러나 tar 명령이 이 파일을 이해하고 있기 때문에 t 스위치를 사용하여 그 파일을 읽어달라고 요청할 수는 있다.
tar t backup.tar tar: can"t open /dev/sa0 : Device not configured아니 이런… 어디를 봐야 하는지를 말해주지 않으면tar는 SCSI 테잎 디바이스를 읽어버린다는 사실을 깜빡 잊어버렸다. 그래서 다시 시도해 볼 것이다. 이번에는 f 스위치를 포함하여 시도할 것이다.
tar tf backup.tar이번에는 파일 묶음과 디렉토리들이 너무 빨리 지나가 버렸다. 그래서 백업이 성공적으로 된 것처럼 보인다. 만약 파일리스트를 확인하고 싶다면 한번에 한 페이지씩 읽을 수 있도록 pager로 결과를 보내자.
tar tf backup.tar |moretar를 사용할 때 z나 Z중 하나를 포함하여 압축된 백업을 생성하는 것도 가능하다. 방금 생성한 그 백업파일의 크기를 살펴보자.
ls -l backup.tar -rw-r--r-- 1 root wheel 25722880 May 11 16:41 backup.tar지금 그 백업파일을 지우고 gzip 유틸리티를 사용하여 압축된 백업을 생성하도록 tar 명령을 내리면 크기와 형태상의 차이점이 보인다.
rm backup.tar tar cvzf backup.tar.gz . ls backup.tar.gz -rw-r--r-- 1 root wheel 5899840 May 11 16:45 backup.tar.gz file backup.tar.gz backup.tar.gz: gzip compressed data, deflated, last modified: Sat May 11 16:45:47 2002, os: Unixcompress 유틸리티를 사용하지 않고 압축하기위해 tar에게 명령을 내리는 때를 제외하고는 위의 작업을 반복할 것이다.
rm backup.tar.gz tar cvZf backup.tar.Z ls backup.tar.Z -rw-r--r-- 1 root wheel 9444468 May 11 16:50 backup.tar.Z file backup.tar.Z backup.tar.Z: compress"d data 16 bits압축된 아카이브로 파일들을 목록화하기 위해 z (또는 Z) 스위치를 사용해야 한다는 사실을 꼭 기억하기 바란다. 예를 들어 만약 필자가 다음과 같이 실행할 경우
tar tf backup.tar.Z아래와 같은 이상한 에러를 보게 될 것이다.
tar: Hmm, this doesn"t look like a tar archive. tar: Skipping to next file header... cZ\333\300\021\207\335v\333J\235\212\335H\335<\270\377\203\025\323}\333\220\016 \215\335h*d\335?\320\223\333\225\335\206\333\224\335\234\020\007\334\324]m\312D s.\017\214\256\374\251H\320\016\252\031\332YE\316\304\360\301\003\242\362\301\2 35\327\241\260\261\030\377\t3\256S\320H\t\327\270\204\302\246\335\030\207/\242( \251 tar: Skipping to next file header... tar: only read 3188 bytes from archive backup.tar.Z이 파일이 Z 스위치로 생성되었기 때문에 이 파일로 작업할 때마다 z 스위치를 사용해야 된다는 사실을 잊지 말아야 한다.
tar tZf backup.tar.Z위의 명령으로 컨텐츠 목록을 얻을 수 있을 것이다. 여러분은 내가 백업을 했을 때 z 스위치로 생성한 아카이브에는 tar.gz 확장자를 부여하고 Z 스위치로 생성한 파일들에는 tar.z 확장자를 부여한다는 사실을 알게 될 것이다. 내가 원하는 것이 무엇이든지 내 아카이브를 호출할 수 있다. 단지 내가 그 파일을 생성할 때 사용한 압축 형태가 무엇인지, tar 아카이브 파일을 어떻게 다루었는지를 기억할 수 있도록 그러한 규약을 사용했다. 이것은 압축되었는지 아닌지, 만약 압축되었다면 z 스위치로 압축되었는지 아니면 Z 스위치로 압축되었는지를 알게끔 해준다. 따라서 아카이브와 관련하여 file 유틸리티를 사용하는 것은 정말 좋은 생각이라고 할 수 있다.
tar tzf backup.tar.gz | tail -2 www/mod_tsunami/pkg-plist www/Makefile이제는 v 스위치로
tar tzvf backup.tar.gz | tail -2 -rw-r--r-- test/wheel 116 May 11 09:53 2002 www/mod_tsunami/pkg-plist -rw-r--r-- test/wheel 9713 May 11 09:53 2002 www/Makefile백업에서 파일들의 긴 목록을 주의하고 백업파일 자체 긴 목록과 비교해보자.
ls -l backup.tar.gz -rw-r--r-- 1 root wheel 15098016 May 11 17:31 backup.tar.gz그 백업파일은 17:31분에 슈퍼유저에 의해 생성되었으나 아직 백업 파일 내에 있는 파일들은 테스트유저에 속한다. 그리고 이 파일들은 9:53분(내가 테스트 디렉토리를 셋업 했을 때)에 생성된 상태 그대로 있다. 이것이 바로 백업된 파일들 소유와 권한을 아카이브가 가지고 있다는 내용으로 지난번 기사에서 전달하고자 했던 사항이다. 또한 tar 명령으로 다중 디렉토리를 백업하라고 지시하는 것도 가능하다.
tar cvzf partial.tar.gz www/apache2 www/chimera www/zope위의 명령은 생성 (c)에 partial.tar.gz라고 이름 붙은 gzip (z) 파일 (f)를 생성할 것이다. 이는 apache2, chimera, zope 디렉토리의 내용을 아카이브함으로써 가능하다. 일단 백업하기 원하는 파일을 tar 명령에 알려주어야 한다. 그리고 그 이름 뒤에 모든 것들은 tar가 백업할 것이다.
tar cvMf /dev/fd0 .플로피 드라이브에 플로피디스크를 넣고 백업하고자 하는 디렉토리에 있는지부터 확인해야 한다. 백업 명을 주기위해 f스위치를 사용하지 않고 플로피 디바이스(/dev/fd0)명을 사용했다.
tar tvf /dev/fd0백업을 생성한 후에 이 명령을 수행해야 한다. 그래야 백업 내의 파일들을 확인할 수 있다.
mount /dev/fd0 /floppy아래와 같은 에러 메시지를 받게 된다.
mount: /dev/fd0 on /floppy: incorrect super blocktar: tar로 아카이브를 생성하는 것과 관련된 마지막 사항은 지정된 디렉토리 내의 모든 것을 백업하도록 설계되었다. 이것은 지정된 디렉토리 아래 존재하는 모든 파일과 하부 디렉토리가 백업될 것임을 의미한다. x 스위치를 사용하여 백업하기를 원치 않는 파일을 지정할 수는 있다.
echo apache2 > exclude echo zope >> exclude여기에서 필자는 apache2라는 단어를 새로운 파일인 exclude로 전송(>)하기위해 echo 명령을 사용했다. 그리고 같은 파일에 zope라는 단어를 붙이도록(>>) 요청했다. 만약 두 개의 >를 사용해야 하는 것을 잊었다면 apache2를 zope로 덮어 썼을 것이다.
tar cvfX backup.tar exclude www이것은 스위치 순서가 중요하다는 것을 실험한 첫번째 백업이다. f 스위치가 backup.tar와 관련 있고 x스위치가 exclude와 관련 있다는 것을 tar 명령에 알려줘야 한다. 그래서 x 스위치 앞에 f 스위치를 두기로 했다면 exclude 앞에 backup.tar가 와야 한다. 이 명령은 적절한 스위치가 적절한 단어와 연관되는 것처럼 동작할 것이다.
tar cvXf exclude backup.tar www그러나 이 명령은 내가 원하는 대로 동작하지 않는다.
tar cvfX exclude backup.tar www tar: can"t open backup.tar : No such file or directory여기서 x 스위치를 사용하여 내가 tar 명령에 알려줄 것이 아닌 제외 해야 할 파일이 어느 것인지를 알려주기 위해 backup.tar라는 파일을 찾으라고 tar에게 알려야 함을 알게 될 것이다.
tar tf backup.tar | grep apache2다시 프롬프트를 막 받았기 때문에 exclude 파일이 작동되었다는 것을 알고 있다. apache2가 www의 하부디렉토리이기 때문에 apache2 하부 디렉토리 내에 있는 모든 파일들은 백업 대상에서 제외된다. 다음으로는 zope 하부디렉토리가 백업에서 배제되었는지를 확인하기위해 다음과 같이 테스트를 하였다.
tar tf backup.tar | grep zope www/zope-zpt/ www/zope-zpt/Makefile www/zope-zpt/distinfo www/zope-zpt/pkg-comment이 때 "zope"로 시작되는 다른 하부디렉토리들이 있다는 정보를 얻었으나 zope라 불리는 하부디렉토리들은 백업에서 제외되었다.
tar tf backup.tar | head www/ www/mod_trigger/ www/mod_trigger/Makefile www/mod_trigger/distinfo www/mod_trigger/pkg-comment www/mod_trigger/pkg-descr www/mod_trigger/pkg-plist www/Mosaic/ www/Mosaic/files/ www/Mosaic/files/patch-ai"/"로 시작하는 파일들이 없기 때문에 이 백업파일을 어디라도 재저장 할 수 있다. testing 디렉토리를 만들어서 재저장을 연습해 볼 것이다. 그리고 그 디렉토리에 전체 백업을 재저장 할 것이다.
mkdir testing cd testing tar xvf ~test/backup.tar내가 재저장된 파일을 가지고 있는 디렉토리로 이동하여 x 스위치를 사용해 backup.tar 파일을 재저장하거나 풀도록 tar 명령에게 지시해야 한다는 사실을 알게 될 것이다. 일단 재저장이 종료되면 필자는 testing 디렉토리 내의 내용을 목록화 할 것이다.
ls www그리고 난 후 새로운 www 디렉토리 내용을 목록화하고 하부디렉토리들과 파일들 모두를 포함하는 www 디렉토리 구조가 성공적으로 재저장된 것을 보게 될 것이다.
tar tf backup.tar | grep chimera www/chimera/ www/chimera/files/ www/chimera/files/patch-aa www/chimera/scripts/ www/chimera/scripts/configure www/chimera/pkg-comment www/chimera/Makefile나는 www/chimera/Makefile 파일만을 재저장하고 이 파일을 genisis라는 사용자 홈 디렉토리로 재저장 하고 싶다. 우선 그 파일이 재저장되기 원하는 디렉토리로 이동한 후 tar 명령에게 파일을 재저장하라고 지시할 것이다.
cd ~genisis tar xvf ~test/backup.tar www/chimera/Makefile홈에서 이러한 작업을 시도한다면 몇 가지 재미난 현상을 볼 수 있을 것이다. genisis 홈 디렉토리를 목록화 해보았을 때 Makefile이라는 파일이 아니라 www 디렉토리를 보게 되었다. 이 디렉토리는 chimera라는 하부디렉토리를 가지고 있으며 Makefile 파일을 가지고 있다. 여러분이 하나의 아카이브를 만들 때 하나의 디렉토리 구조를 포함하고 있으며 하나의 아카이브를 재저장할 때 그 디렉토리 구조를 재생성해야 함을 기억해야 한다.
ls -l ~genisis/www/chimera/Makefile -rw-r--r-- 1 test wheel 406 May 11 09:52 www/chimera/Makefiletar 유틸리티를 사용하여 시작하도록 해야 한다. 다음번 기사에서는 tar로 사용 할 수 있는 기타 몇몇 흥미로운 옵션들에 대해 살펴보고 cpio 아카이버도 소개할 것이다.
이전 글 : Jakarta Ant로 소프트웨어 설치하기
다음 글 : JBoss 탐험기(하): 예제 프로그램들
최신 콘텐츠