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

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

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

/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-2115: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-2115:50 bible.tar.gz

-rw-r--r-- 1 root root   1506 2009-01-2115:50 sspark.tar.gz

-rw-r--r-- 1 root root    557 2009-01-2115:50 sulinux.tar.gz

[root@su250 ~]#

 

참고로 앞에서 backup.sh실행 후에 모니터로 뿌려지는 메시지들을 콘솔(모니터 화면)로 출력하지 않으려면 다음과 같이 하시면 됩니다.

 

 

 

 

 

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

[root@su250 ~]#

 

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

 

 

 

 

 

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

 

 

 

 

 

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

 

 

 

  이런 경우에 요긴하게 사용하시기 바랍니다.

 

 

 

 

 

 

관련자료

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

공지사항


뉴스광장


  • 현재 회원수 :  60,038 명
  • 현재 강좌수 :  35,813 개
  • 현재 접속자 :  138 명