/home디렉토리의 각 계정별로 압축하는 명령어 만들기
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 2,580 조회
- 0 추천
- 목록
본문
/home디렉토리의 각 계정별로 압축하는 명령어 만들기
다음은 특정디렉토리(예에서는 /home)내에 존재하는 각각의 디렉토리 별로 tar로 압축하는 명령어를 만드는 방법입니다.
즉, grep명령어와 awk를 활용하면 이와 같은 작업을 굉장히 쉽게 할 수 있습니다.
즉, 이번 예에서는 다음과 같은 작업을 하기 위한 명령어(쉘스크립트)를 생성하는 것이 목적입니다.
목적 : /backup디렉토리내에 /home에 존재하는 각각의 계정들별로 "ID.tar.gz"라는 파일로 tar로 압축을 하고자 함.
이와 같은 작업을 하기 위하여 필자는 아래와 같은 명령어를 사용합니다.
ls -l /home | grep "^d" | awk '{print "tar cvfpz " "/backup/"$8".tar.gz" " /home/"$8}'
|
이 명령어는 모두 "|"(파이프명령어)로 구분되는 3개의 명령어가 한번에 실행이 됩니다.
먼저 "ls -l /home"는 /home에 있는 모든 파일리스트들이 출력이 될 것입니다.
그리고 "grep "^d" "는 /home내의 디렉토리 목록만 출력이 됩니다.
이것은 각각의 계정들은 모두 /home내의 디렉토리를 가지고 있기 때문입니다.
그리고 이런 결과는 그 뒤에 나오는 awk의 입력으로 들어가게 됩니다.
그 뒤의 awk명령어는 넘어온 각각의 행들에서 'tar cvfpz ID.tar.gz /home/ID"라는 결과를 각각 만들어 출력합니다.
만약 필자가 사용한 awk명령어가 이해되지 않는다면 그대로 복사해서 사용하셔도 무방합니다.
단, 필자가 사용한 awk명령어들은 외우는 것이 아니라 목적한 조건에 맞도록 적절히 생성하여 사용하는 것이므로 외우는 것은 올바른 공부가 아닙니다.
필자와 같이 awk명령어를 적절히 사용하는 것이 어렵다면 그대로 복사해서 사용하셔도 되겠지만 그 의미는 정확하게 이해하고 있어야 합니다.
이와 같은 awk명령어의 결과로 다음과 같은 결과를 얻었습니다.
[root@su250 ~]# ls -l /home | grep "^d" | awk '{print "tar cvfpz " "/backup/"$8".tar.gz" " /home/"$8}' tar cvfpz /backup/bible.tar.gz /home/bible tar cvfpz /backup/sspark.tar.gz /home/sspark tar cvfpz /backup/sulinux.tar.gz /home/sulinux [root@su250 ~]# |
이제 앞의 예에서 보았듯이 이 결과를 실행하는 간단한 쉘파일(backup.sh)을 생성합니다.
아래와 같이 필자는 이 쉘파일을 backup.sh라는 이름으로 vi를 이용하여 생성하였습니다.
vi를 이용하여 생성할 때에는 맨 첫번째 행에는 반드시 "#!/bin/bash"를 넣어 주시기 바랍니다.
[root@su250 ~]# cat backup.sh #!/bin/bash
tar cvfpz /backup/bible.tar.gz /home/bible tar cvfpz /backup/sspark.tar.gz /home/sspark tar cvfpz /backup/sulinux.tar.gz /home/sulinux [root@su250 ~]# |
그리고 생성한 backup.sh 쉘파일에 아래와 같이 실행퍼미션(700)을 설정한 다음 /backup위치에서 실행(./backup.sh)을 하였습니다.
아래 실행결과를 보시는 바와 같이 실행결과의 길이가 너무 길어지므로 중간에서 생략하였습니다.
[root@su250 ~]# chmod 700 backup.sh [root@su250 ~]# [root@su250 ~]# ls -l backup.sh -rwx------ 1 root root 148 2009-01-21 15:48 backup.sh [root@su250 ~]# [root@su250 ~]# ./backup.sh tar: Removing leading `/' from member names /home/bible/ /home/bible/.mozilla/ /home/bible/.mozilla/plugins/ /home/bible/.mozilla/extensions/ /home/bible/.bashrc /home/bible/ssl.conf /home/bible/squid.conf /home/bible/.gnome2/ /home/bible/.bash_logout /home/bible/.bash_history /home/bible/www/ /home/bible/www/welcome.conf /home/bible/www/webalizer.conf /home/bible/www/ssl.conf /home/bible/www/su/ /home/bible/www/su/testfile /home/bible/www/su/system_line /home/bible/www/su/etc_line /home/bible/www/su/README /home/bible/www/su/imsi /home/bible/www/su/httpd.conf /home/bible/www/squid.conf /home/bible/www/conf/ /home/bible/www/conf/magic2 /home/bible/www/conf/httpd.conf /home/bible/www/proxy_ajp.conf /home/bible/www/python.conf /home/bible/www/php.conf /home/bible/www/perl.conf /home/bible/www/manual.conf /home/bible/.bash_profile /home/bible/manual.conf tar: Removing leading `/' from member names /home/sspark/ /home/sspark/.mozilla/ /home/sspark/.mozilla/plugins/ /home/sspark/.mozilla/extensions/ /home/sspark/.bashrc /home/sspark/newdir2/ /home/sspark/.gnome2/ /home/sspark/newfile2 /home/sspark/.ssh/ /home/sspark/.ssh/known_hosts /home/sspark/.bash_logout /home/sspark/.bash_history /home/sspark/.rhosts /home/sspark/.bash_profile tar: Removing leading `/' from member names /home/sulinux/ /home/sulinux/.mozilla/ /home/sulinux/.mozilla/plugins/ /home/sulinux/.mozilla/extensions/ /home/sulinux/.bashrc /home/sulinux/.gnome2/ /home/sulinux/.bash_logout /home/sulinux/.bash_history /home/sulinux/.bash_profile [root@su250 ~]# |
그리고 다음은 위와 같이 backup.sh스크립트를 실행한 후에 /backup디렉토리에 백업파일이 저장된 내용을 ls로 확인하였습니다.
[root@su250 ~]# ls -l /backup 합계 244 -rw-r--r-- 1 root root 237374 2009-01-21 15:50 bible.tar.gz -rw-r--r-- 1 root root 1506 2009-01-21 15:50 sspark.tar.gz -rw-r--r-- 1 root root 557 2009-01-21 15:50 sulinux.tar.gz [root@su250 ~]# |
참고로 앞에서 backup.sh실행 후에 모니터로 뿌려지는 메시지들을 콘솔(모니터 화면)로 출력하지 않으려면 다음과 같이 하시면 됩니다.
[root@su250 ~]# ./backup.sh >& /dev/null
[root@su250 ~]# |
이 의미는 실행과정에서 출력되는 메시지들을 모두 "/dev/null"("널 장치파일", 일종의 쓰레기통)로 버리라는 의미이므로 실행과정 중 출력되는 메시지들은 나타나지 않고 정상적인 실행만하게 됩니다.
위와 같이 /home내에 존재하는 각각의 계정 별로 모두 압축되어 저장된 것을 확인할 수 있을 것입니다.
물론, /home을 통째로 압축하는 방법이 보다 간단하지만 반드시 각각의 계정 별로 압축저장을 해야 하는 경우도 종종 발생합니다.
이런 경우에 요긴하게 사용하시기 바랍니다.
관련자료
-
이전
-
다음