'tar'에 해당되는 글 2건

  1. 2015.04.09 간단한 bash쉘 스크립트 작성 요령
  2. 2015.03.28 [15] gzip, bzip2, tar, man

간단한 bash쉘 스크립트 작성 요령

|


- 2015.02.04


출처 : http://koreahojin.egloos.com/1249277




#!/bin/bash로 시작하기.

- 스크립트 파일은 첫라인에서 #!/bin/bash 로 시작

- vi 편접기에서 # 기호는 주석을 의미하지만 첫라인에서는 주석 표시가 아님

- 첫라인을 안써 줘도 스크립트 파일이 실행되는 경우가 있는데 현재 사용자의 기본적으로 배쉬 쉘을 사용한다면  

  가능하다.

- #!/bin/bash 대신에 #!/bin/sh 로 써도 된다. sh는 bash 의 심볼릭 링크 이기 ㅤㄸㅒㅤ문이다.


스크립트 파일의 실행방법.

- sh 명령어 사용 ( # sh 파일 이름 )

- 퍼미션 변경 후 실행 ( 실행 권한을 부여 )

-------------참고--------------

.bash_profile 파일에 PATH를 적어 주면 현재 있는 디렉토리의 위치와 상과없이 파일을 실행 시킬수 있음

----------------------------------------



[echo 기본 출력]


- echo 는 화면에 원하는 문자열을 출력시킨다.

- 출력 하고자 하는 문자열 공백이 있다면 전체를 "   " 묶어 주면 된다.

- 예 : echo " bye bye "


변수를 만들고 사용하기

- 형식 :  변수명=변수값

- 사용예 : korea="GOOD"

- 적용예 : echo $korea

- 주의점 : 변수명 다음에 오는 '=' 의 좌우로 공백이 있으면 안된다.

- 변수를 지정할 때는 $를 사용하지 않지만, 변수를 사용할 때는 $ 기호를 변수 앞에 붙여서 사용합니다.

-  C언어 에서 전역변수라고 불리는 것을 쉘 스크립트에서는 환경 변수라고 한다. 환경변수는 export 명령을 사용하여 만든다. 사용자가 로그인을 할때 읽어 들이는 파일중에 /etc/profile 파일이 있다. 이곳을 보면 export로 환경 변수를 만드는 것을 찾을 수 있다.


- example

[root@localhost ~]# cat > example

#!/bin/bash

color=red

korea="good"

echo $color

echo "$color is red"

echo $korea

You have new mail in /var/spool/mail/root

[root@localhost ~]# sh example

red

red is red

good




[read의 사용]


- read 문은 사용자의 표준입력을 받아들여 변수로 저장하는 역할을 한다. 먼저 아래의 예제를 실행해보자

[root@localhost ~]# cat > readsh

#!/bin/bash

echo -n "age: "

read x

echo "Your are $x years old"

[root@localhost ~]# sh readsh

age: 22

Your are 22 years old


- 스크립트 파일을 실행할 때. read문을 만나면 화면상에 커서가 깜박이면 대기상태로 있다.

입력한 값을 read 다음에 오는 변수명(x)에 대입한다.

echo -n 에서 옵션 -n은  줄바꿈을 하지 않도록.




[argument (인자값)]


- 스크립트 파일을 실행하기전에 특수한 값을 동시에 입력하여 결과를 얻을수 있게 할수있다.

- C언어에서 main() 함수의 전달값으로 생각하면된다.

- 예를 들어 # /etc/rc.d/init.d/network start 여기서 netwrok는 스크립트 파일이다. 이파일을 실행하면서 뒷부분에 restart라는 argumnet를 주었다.

- 아직도 먼 말인지 모르겠다면 예제를 만들어 실행해 보자.

[root@localhost ~]# cat > argumentsh

#!/bin/bash


echo "argumnet1 : $1"

echo "argument2 : $2"

echo "argument3 : $3"

echo "Total argument number : $#"

echo "File name : $0"

[root@localhost ~]# sh argumentsh 1arg 2arg 3arg

argumnet1 : 1arg

argument2 : 2arg

argument3 : 3arg

Total argument number : 3

File name : argumentsh

[root@localhost ~]#     


$1 은 첫번째 argument를 나타내며 $2는 두번째, $3은 세번째 argument를 나타낸다.

argument를 입력하지 않을경우, 오류가 나는 것이 아니라 값이 대입되지 않는다.

$#은 전체 argument의 개수를 나타내며 $0은 스크립트 파일의 이름을 나타낸다.




* 현재 디렉터리의 모든 파일 압축


출처 : https://kldp.org/node/69623

현재 디렉터리의 모든 파일을 지정할떄는 보통 * 와일드카드 문자로 가능하지만 히든파일까지는 선택이 안된다.

tar cf test.tar . 명령어로 가능하지만 ls 와 묶어서 사용하는 방법도 있다.


ls -1A | tar cvjf bak.tbz2 -X exclude -T -


1은 한줄에 파일 하나 출력, A는 a와 같지만 . , .. 를 제외.

-T는 묶을 목록을 파일에서 받기 - 는 표준 입력.




And


[15] gzip, bzip2, tar, man

|


- 2014.11.26


/backup/ 에 있는 grub.conf, inittab, login.defs 파일을 현재 위치로 복사한 뒤 실습을 시작한다.




1. gzip


gzip option source

: 압축

-d : 압축 해제


gzip 압축

# gzip ./grub.conf

# ll

합계 12

-rw------- 1 root root  476 2014-11-26 12:58 grub.conf.gz

-rw-r--r-- 1 root root  884 2014-11-26 12:58 inittab

-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs

=> 원본 파일이 없어진 것 확인 할 수 있다.


gzip 압축해제

# gzip -d ./grub.conf.gz

           -- decompress

# ll

합계 12

-rw------- 1 root root  739 2014-11-26 12:58 grub.conf

-rw-r--r-- 1 root root  884 2014-11-26 12:58 inittab

-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs

=> 역시 원본 압축 파일 없어짐


여러 파일 압축

# gzip ./*

# ll

합계 12

-rw------- 1 root root  476 2014-11-26 12:58 grub.conf.gz

-rw-r--r-- 1 root root  884 2014-11-26 12:58 inittab.gz

-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs.gz

=> 동시에 묶이진 않고 각자 개별 파일로만 압축이 된다.





2. bzip2


# bzip2 option source

: 압축

-d : 압축 해제



bzip2 압축

# bzip2 ./grub.conf

# ll

합계 12

-rw------- 1 root root  542 2014-11-26 12:58 grub.conf.bz2

-rw-r--r-- 1 root root  884 2014-11-26 12:58 inittab

-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs

=> 원본 파일 없어짐


bzip2 압축 해제

# bzip2 -d ./grub.conf.bz2

# ll

합계 12

-rw------- 1 root root  739 2014-11-26 12:58 grub.conf

-rw-r--r-- 1 root root  884 2014-11-26 12:58 inittab

-rw-r--r-- 1 root root 1816 2014-11-26 12:58 login.defs

=> 원본 압축 파일 없어짐


* bzip2 역시 gzip과 마찬가지로 동시에 여러개 압축이 되지 않는다.





3. tar = tape Archive


tar option Archiving_file_name source

c - 보관하겠다.

x - 보관을 풀겠다.

v - verboss(보여주세요)

f - file

z - gzip 으로 압축 또는 해제

j - bzip2 으로 압축 또는 해제

-C path : path 에다 해당 작업 진행



cvf(생성), xvf(해제) 이 2가지 방식만 기억하면 된다



*Tip

tar 로 압축할 때엔 뒤에 .tar 를 붙여 tar 파일인 것을 남기는 습관이 좋다.



# tar cvf ./gc ./grub.conf

./grub.conf

# ll

합계 24

-rw-r--r-- 1 root root 10240 2014-11-26 13:33 gc

-rw------- 1 root root   739 2014-11-26 12:58 grub.conf

-rw-r--r-- 1 root root   884 2014-11-26 12:58 inittab

-rw-r--r-- 1 root root  1816 2014-11-26 12:58 login.defs

=> 이렇게 되면 gc라는 파일이 tar 파일인지 육안으로 확인하기 쉽지 않음

=> 카세트 테잎이나 CD처럼 안에 내용물이 얼마 들어가든 상관 없이 일정 공간이 생성된다.



# tar cvf ./gc.tar ./grub.conf

./grub.conf

# ll

합계 36

-rw-r--r-- 1 root root 10240 2014-11-26 13:33 gc

-rw-r--r-- 1 root root 10240 2014-11-26 13:34 gc.tar

-rw------- 1 root root   739 2014-11-26 12:58 grub.conf

-rw-r--r-- 1 root root   884 2014-11-26 12:58 inittab

-rw-r--r-- 1 root root  1816 2014-11-26 12:58 login.defs

=> tar 파일 확인 쉬움




[실습]


grub.conf 를 일단 지우고 tar 풀어보자


# rm ./grub.conf

# tar xvf ./gc.tar

./grub.conf

# ll

합계 36

-rw-r--r-- 1 root root 10240 2014-11-26 13:33 gc

-rw-r--r-- 1 root root 10240 2014-11-26 13:34 gc.tar

-rw------- 1 root root   739 2014-11-26 12:58 grub.conf

-rw-r--r-- 1 root root   884 2014-11-26 12:58 inittab

-rw-r--r-- 1 root root  1816 2014-11-26 12:58 login.defs

=> 압축 명령어들과 다르게 tar는 파일이 그대로 있는 것을 확인할 수 있다.




[문제]


현재 디렉터리에 있는 파일(grub.conf, inittab, login.defs)을 gil.tar 로 보관시켜보세요


# tar cvf gil.tar ./grub.conf ./inittab ./login.defs


tar 파일을 gzip 으로 압축

# gzip ./gil.tar

# ll

합계 4

-rw-r--r-- 1 root root 1953 2014-11-26 13:37 gil.tar.gz


이 압축된 파일을 /backup/ 에 압축 푸세요

# gzip -d ./gil.tar.gz

# tar xvf ./gil.tar

# mv ./grub.conf ./inittab ./login.defs /backup/



* Tip

tar 로 해제할 떄엔 현재 자신이 위치한 곳에 풀린다.




[실습 - 교재]


# tar cvf ./xinetd.tar /etc/xinetd.d/

tar: Removing leading `/' from member names

/etc/xinetd.d/

/etc/xinetd.d/rsync

# ll

합계 12

-rw-r--r-- 1 root root 10240 2014-11-26 13:53 xinetd.tar


# tar xvf ./xinetd.tar

etc/xinetd.d/

etc/xinetd.d/rsync


# ll

합계 16

drwxr-xr-x 3 root root  4096 2014-11-26 13:54 etc

-rw-r--r-- 1 root root 10240 2014-11-26 13:53 xinetd.tar

# ll ./etc/

합계 4

drwxr-xr-x 2 root root 4096 2014-10-30 01:57 xinetd.d

# ll ./etc/xinetd.d/

합계 4

-rw-r--r-- 1 root root 332 2014-03-28 19:54 rsync


=> tar는 내가 지정해준 디렉터리 까지, 경로 자체를 보관한다.

=> 또한 풀 때에는 내가 있는 경로 기준으로 풀린다.




[문제]


/bin 디렉터리의 모든 파일을 gzip 압축 및 tar 로 묶어서

/home 디렉터리 안에 binlist.tar.gz 라는 파일로 생성


# tar cvf /home/binlist.tar /bin/

tar: Removing leading `/' from member names

/bin

        ...

/bin/zcat

# ll

합계 8696

-rw-r--r-- 1 root root 8888320 2014-11-26 13:58 binlist.tar

drwxr-xr-x 3 root root    4096 2014-11-26 13:54 etc

-rw-r--r-- 1 root root   10240 2014-11-26 13:53 xinetd.tar


# gzip /home/binlist.tar

# ll /home

합계 4019

drwx------  4 badnom badnom    1024 2014-11-25 15:01 badnom

-rw-r--r--  1 root   root   4100186 2014-11-26 13:58 binlist.tar.gz

drwx------. 2 root   root     12288 2014-10-30 01:51 lost+found



* # gzip /bin/* 해서 /bin/ 것이 다 날라간 경우

백업 해놓은 gzip 명령 파일을 일반 계정으로 ftp 통해 업로드한다.

하지만 업로드 한 압축파일은 실행파일이 아니기 때문에 GUI 환경 통해 해당 파일을 실행파일로 속성 변경이 필요하다.

만약 GUI로 고칠 수 없는 상황이면 복구가 불가능하다. (가장 기초적인 명령어들이 bin 에 있기 때문)

# ./gzip -d /bin/*

=> /bin 에 .gz 로 개별적으로 묶여있던 파일들이 압축 해제된다. */



위의 문제를 bzip2 로 똑같이 진행

# tar cvf /home/binlist.tar /bin/

tar: Removing leading `/' from member names

/bin/

...

/bin/rnano

# bzip2 /home/binlist.tar

# ll /home/

합계 7611

drwx------  4 badnom badnom    1024 2014-11-25 15:01 badnom

-rw-r--r--  1 root   root   3677201 2014-11-26 14:22 binlist.tar.bz2

-rw-r--r--  1 root   root   4100186 2014-11-26 13:58 binlist.tar.gz

drwx------. 2 root   root     12288 2014-10-30 01:51 lost+found




[정리]


- gzip, bzip2 (압축)

1. 용량 작아짐

2. 원본 삭제

3. 단일 파일만 가능

4. 큰 파일의 압축 효율은 bzip2가 더 좋다.


- tar (보관)

1. 용량 커짐

2. 원본 유지

3. 다중파일 가능




4. tar + 압축


tar로 묶으면서 동시에 압축하기

# tar cvfz filename.tar.gz source

# tar cvfj filename.tar.bz2 source


압축 해제까지 한꺼번에 하기

# tar xvfz filename.tar.gz

# tar xvfj filename.tar.bz2



2가지 방법으로 /bin/ 디렉터리를 압축하세요


# tar cvfz ./binlist.tar.gz /bin/

# tar cvfj ./binlist.tar.bz2 /bin/


# ll

합계 7688

-rw-r--r-- 1 root    root    3677201 2014-11-26 14:38 binlist.tar.bz2

-rw-r--r-- 1 root    root    4103268 2014-11-26 14:37 binlist.tar.gz

drwxr-xr-x 3 root    root       4096 2014-11-26 13:54 etc

-rwxr-xr-x 1 samadal samadal   67500 2014-11-26 14:11 gzip

-rw-r--r-- 1 root    root      10240 2014-11-26 13:53 xinetd.tar




[문제]


현재 디렉터리에 있는 binlist.tar.xx 파일을 경로이동 하지 말고

/home/ 디렉터리에 풀어보세요



# tar xvfzC ./binlist.tar.gz /home/

# tar xvfj ./binlist.tar.bz2 -C /home/

아래 방식이 햇갈리지 않고 편리한 것 같다.


* 도움말 보기

# tar --help

# man tar




'Study > CentOS' 카테고리의 다른 글

[17] rpm(2), yum  (0) 2015.03.28
[16] rpm(1)  (0) 2015.03.28
[14] SETUID, SETGID, Stickybit, UMASK  (0) 2015.03.28
[13] 계정 복구, 계정 관련 Trouble Shooting, chown -R  (0) 2015.03.28
[12] 소유권, 허가권 실습, ftp 관련 권한  (0) 2015.03.28
And


prev | 1 | next