강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

특정 패턴문자를 원하는 포맷으로 처리하는 awk 실무활용 3편

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

특정 패턴문자를 원하는 포맷으로 처리하는 awk 실무활용 3



ㅇ 제작 : 리눅스포털 수퍼유저코리아(www.superuser.co.kr) 박성수


ㅇ 본 자료의 자세한 모든 정보는 http://www.superuser.co.kr/linuxcommandbible/ 에서 확인하시기 바랍니다.

ㅇ 본 자료의 수정 및 편집은 허용되지않습니다.





6: /home디렉토리의 각 계정별로 압축하는 명령어 만들기


다음은 특정디렉토리(예에서는 /home)내에 존재하는 각각의 계정별로 tar로 압축하는 명령어를 만드는 방법입니다.

, grep명령어와 awk를 활용하면 이와 같은 작업을 굉장히 쉽게 작업을 할 수 있습니다.


, 이번 예에서는 다음과 같은 작업을 하기위한 명령어(쉘스크립트)를 생성하는 것이 목적이됩니다.


목적 : /backup디렉토리내에 /home에 존재하는 각각의 계정들별로 "ID.tar.gz"라는 파일로 tar로 압축을 하고자 함.


이와 같은 작업을 하기위하여 필자는 아래와 같은 명령어를 사용합니다.


ls -l /home | grep "^d" | awk '{print "tar cvfpz " $9".tar.gz" " /home/"$9}'


이 명령어는 모두 "|"(파이프명령어)로 구분되는 3개의 명령어가 한번에 실행이 됩니다.


먼저 "ls -l /home"/home에 있는 모든 파일리스트들이 출력이 될 것입니다.


그리고 "grep "^d" "/home내의 디렉토리 목록만 출력이 됩니다. 이것은 각각의 계정들은 모두 /home내의 디렉토리를 가지고 있기 때문입니다.


그리고 이런 결과는 그 뒤에 나오는 awk의 입력으로 들어가게 됩니다. 그뒤의 awk명령어는 넘어온 각각의 행들에서 'tar cvfpz ID.tar.gz /home/ID"라는 결과를 각각 만들어 출력합니다. 만약 필자가 사용한 awk명령어가 이해되지 않는다면 그대로 복사해서 사용하셔도 무방합니다.


, 필자가 사용한 awk명령어들은 외우는 것이 아니라 목적한 조건에 맞도록 적절히 생성하여 사용하는 것이므로 외우는 것은 올바른 공부가 아닙니다. 필자와 같이 awk명령어를 마음대로 사용하는 것이 어렵다면 그대로 복사해서 사용하셔도 되겠지만 그 의미는 정확하게 이해하고있어야 합니다.


이와 같은 awk명령어의 결과로 다음과 같은 결과를 얻었습니다.


[root@file backup]# ls -l /home | grep "^d" | awk '{print "tar cvfpz " $9".tar.gz" " /home/"$9}'

tar cvfpz bible.tar.gz /home/bible

tar cvfpz jinious.tar.gz /home/jinious

tar cvfpz locli.tar.gz /home/locli

tar cvfpz lost+found.tar.gz /home/lost+found

tar cvfpz mysql.tar.gz /home/mysql

tar cvfpz public.tar.gz /home/public

tar cvfpz samba.tar.gz /home/samba

tar cvfpz sspark.tar.gz /home/sspark

tar cvfpz test01.tar.gz /home/test01

tar cvfpz test02.tar.gz /home/test02

tar cvfpz test03.tar.gz /home/test03

tar cvfpz working.tar.gz /home/working

[root@file backup]#


이제 앞의 예에서 보았듯이 이 결과를 실행하는 간단한 쉘파일(backup.sh)을 생성합니다. 이때, 한가지 주의하실 것은 위의 결과에서 "lost+found"라는 행은 제외해 주시기 바랍니다.

이 행은 있어도 상관없지만 백업할 의미가 없는 것이므로 제외하였습니다.


아래와 같이 필자는 이 쉘파일을 backup.sh라는 이름으로 아래와 같이 vi를 이용하여 생성하였습니다. vi를 이용하여 생성할 때에는 맨 첫번째 행에는 반드시 "#!/bin/bash"를 넣어 주시기 바랍니다.


[root@file backup]# vi backup.sh


#!/bin/bash

tar cvfpz bible.tar.gz /home/bible

tar cvfpz jinious.tar.gz /home/jinious

tar cvfpz locli.tar.gz /home/locli

tar cvfpz mysql.tar.gz /home/mysql

tar cvfpz public.tar.gz /home/public

tar cvfpz samba.tar.gz /home/samba

tar cvfpz sspark.tar.gz /home/sspark

tar cvfpz test01.tar.gz /home/test01

tar cvfpz test02.tar.gz /home/test02

tar cvfpz test03.tar.gz /home/test03

tar cvfpz working.tar.gz /home/working

~

~

~

~

~

~

~

~

~

~

~

~

~

"backup.sh" 12L, 415C written

[root@file backup]#


그리고 생성한 backup.sh 쉘파일에 아래와 같이 실행퍼미션(700)을 설정한 다음 /backup위치에서 실행(./backup.sh)을 하였습니다. 아래 실행결과를 보시는 바와같이 실행결과의 길이가 너무 길어지므로 중간에서 생략하였습니다.


[root@file backup]# chmod 700 backup.sh

[root@file backup]#

[root@file backup]# ./backup.sh

tar: Removing leading `/' from member names

home/bible/

home/bible/.bash_logout

home/bible/.bash_profile

home/bible/.bashrc

home/bible/.emacs

home/bible/.gtkrc

home/bible/.bash_history

home/bible/.viminfo

home/bible/www/

home/bible/www/index.html

tar: Removing leading `/' from member names

home/jinious/

home/jinious/.bash_logout

home/jinious/.bash_profile

home/jinious/.bashrc

home/jinious/.emacs

home/jinious/.gtkrc

home/jinious/www/

tar: Removing leading `/' from member names

home/locli/

home/locli/.bash_logout

home/locli/.bash_profile

home/locli/.bashrc

home/locli/.emacs

home/locli/.gtkrc

home/locli/www/

home/locli/www/1.php

home/locli/www/phpm/

home/locli/www/phpm/css/

home/locli/www/phpm/css/phpmyadmin.css.php

home/locli/www/phpm/images/

home/locli/www/phpm/images/arrow_ltr.gif

home/locli/www/phpm/images/arrow_rtl.gif

home/locli/www/phpm/images/asc_order.png

home/locli/www/phpm/images/browse.png

home/locli/www/phpm/images/button_browse.png

home/locli/www/phpm/images/button_drop.png

....

중략


참고로 이런 실행결과 메시지들을 콘솔(모니터 화면)로 출력하지 않으려면 다음과 같이 하시면 됩니다.


[root@file backup]# ./backup.sh >& /dev/null


이 의미는 실행과정에서 출력되는 메시지들을 모두 "/dev/null"("널터미널", 일종의 쓰레기통)로 버리라는 의미이므로 실행과정 중 출력되는 메시지들은 나타나지 않고 정상적인 실행만하게 됩니다.


이렇게하여 압축된 결과를 확인해 보시면 다음과 같습니다.


[root@file backup]# ls -l

total 2888440

-rwx------ 1 root root 415 Nov 13 23:46 backup.sh

-rw-r--r-- 1 root root 1591 Nov 13 23:47 bible.tar.gz

-rw-r--r-- 1 root root 1006 Nov 13 23:47 jinious.tar.gz

-rw-r--r-- 1 root root 1807845 Nov 13 23:47 locli.tar.gz

-rw-r--r-- 1 root root 970 Nov 13 23:47 mysql.tar.gz

-rw-r--r-- 1 root root 967 Nov 13 23:47 public.tar.gz

-rw-r--r-- 1 root root 2749180960 Nov 14 00:20 samba.tar.gz

-rw-r--r-- 1 root root 1008 Nov 14 00:20 sspark.tar.gz

-rw-r--r-- 1 root root 1040 Nov 14 00:20 test01.tar.gz

-rw-r--r-- 1 root root 1045 Nov 14 00:20 test02.tar.gz

-rw-r--r-- 1 root root 1042 Nov 14 00:20 test03.tar.gz

-rw-r--r-- 1 root root 203830279 Nov 14 00:23 working.tar.gz

[root@file backup]#


위와 같이 /home내에 존재하는 각각의 계정별로 모두 압축되어 저장된 것을 확인할 수 있을 것입니다.


물론, /home을 통째로 압축하는 방법이 보다 간단하지만 반드시 각각의 계정별로 압축저장을 해야하는 경우도 종종 발생합니다. 이런 경우에 요긴하게 사용하시기 바랍니다.





 

리눅스포털 –수퍼유저코리아- www.superuser.co.kr


관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,850 개
  • 현재 접속자 :  111 명