특정 패턴문자를 원하는 포맷으로 처리하는 awk 실무활용 3편
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 7,889 조회
- 0 추천
- 목록
본문
특정 패턴문자를 원하는 포맷으로 처리하는 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
관련자료
-
이전
-
다음