Linux File Backup Script
#!/bin/bash
today=`date +%F`
day=`date +%A`
hour=`date +%H`
min=`date +%M`
tar cvzf /home/backup/ruony-$today-$day-$hour:$min.tar.gz ./*
결과물 형태는 대략
ruony-2007-06-19-화요일-22:24.tar.gz
이런형태로 나옴...
예 A-4. encryptedpw: 로컬에 암호화 되어 있는 비밀번호로 ftp 사이트에 파일을 업로드하는 스크립트
#!/bin/bash # "ex72.sh" 예제를 암호화된 비밀번호를 사용하도록 수정함. # 하지만 복호화된 비밀번호가 그대로 전송되기 때문에 #+ 아직도 안전하지는 않습니다. 주의하세요. # 이 점이 걱정된다면 "ssh" 같은 것을 써보세요. E_BADARGS=65 if [ -z "$1" ] then echo "사용법: `basename $0` filename" exit $E_BADARGS fi Username=bozo # 알맞게 고치세요. pword=/home/bozo/secret/password_encrypted.file # 암호화된 비밀번호가 들어있는 파일. Filename=`basename $1` # 파일이름에서 경로이름을 떼어 냅니다. Server="XXX" Directory="YYY" # 실제 서버이름과 디렉토리로 바꾸세요. Password=`cruft <$pword` # 비밀번호 복호화. # 저자가 만든 고전적인 1회용 암호표(onetime pad) 알고리즘에 기반한 #+ "cruft" 파일 암호화 패키지를 씁니다. #+ "cruft"는 다음에서 얻을 수 있습니다. #+ Primary-site: ftp://metalab.unc.edu /pub/Linux/utils/file #+ cruft-0.2.tar.gz [16k] ftp -n $Server <<End-Of-Session user $Username $Password binary bell cd $Directory put $Filename bye End-Of-Session # "ftp"의 -n 옵션은 자동 로그인을 막아줍니다. # "bell"은 파일 전송이 일어날 때마다 '벨'을 울려줍니다. exit 0 |
예 A-7. behead: 메일과 뉴스 메세지 헤더를 제거해 주는 스크립트
#! /bin/sh # 메일이나 뉴스 메세지에서 첫번째 빈 줄이 나올 때까지의 # 헤더를 떼어 내 주는 스크립트. # 토론토 대학의 Mark Moraes 작성 # --> 이 주석은 HOWTO 저자가 붙인 것입니다. if [ $# -eq 0 ]; then # --> 명령어 줄 인자가 없다면 표준입력에서 재지향되어 들어오는 파일에 대해서 동작함. sed -e '1,/^$/d' -e '/^[ ]*$/d' # --> 공백 문자로 시작하는 첫번째 줄이 나올 때까지 # --> 빈 줄과 모든 줄을 지웁니다. else # --> 명령어 줄 인자가 있다면 그 주어진 파일에 대해서 동작함 for i do sed -e '1,/^$/d' -e '/^[ ]*$/d' $i # --> 위와 같습니다. done fi # --> 독자를 위한 연습문제: 에러 체크와 다른 옵션을 추가해 보세요. # --> # --> 작은 sed 스크립트가 인자를 넘기는 것만 빼고 반복되는것을 유심히 살펴 보세요. # --> 이 부분을 함수로 빼는게 이치에 맞을까요? 그 대답에 대해서 설명해 보세요. |
예 A-8. ftpget: ftp에서 파일을 다운로드 해 주는 스크립트
#! /bin/sh # $Id: ftpget,v 1.2 91/05/07 21:15:43 moraes Exp $ # 익명 ftp에 배치 작업을 실행하는 스크립트. 기본적으로 명령어 라인 인자들을 # ftp의 입력으로 바꿔주는 일을 합니다. # 간단하고 빠릅니다 - ftplist와 한 쌍이 되도록 작성됐습니다. # -h 는 접속할 호스트를 나타냅니다(기본값은 prep.ai.mit.edu) # -d 는 접속후 cd 로 옮겨갈 디렉토리를 나타냅니다. -d 를 여러번 쓸 수도 # 있는데, 이렇게 하면 주어진 순서대로 디렉토리를 옮겨갈 것입니다. # 만약에 해당 디렉토리가 상대 경로라면 순서를 잘 매겨야 합니다. # 요즘엔 너무 많은 심볼릭 링크가 존재하기 때문에 아주 조심해서 사용해야 합니다. # (기본값은 ftp 로그인 디렉토리) # -v 는 ftp의 verbose모드를 켜서, ftp 서버의 모든 응답을 보여줍니다. # -f remotefile[:localfile] 은 remote 파일을 local 파일로 이름을 바꿔 # 가져옵니다. # -m pattern 은 주어진 패턴에 해당하는 파일들을 mget으로 가져옵니다. # 쉘 문자들을 인용(quote)해야 하는 것을 기억하세요. # -c 는 현재 자신의 시스템에서 주어진 디렉토리로 cd 를 실행합니다. # 예를 들면, # ftpget -h expo.lcs.mit.edu -d contrib -f xplaces.shar:xplaces.sh \ # -d ../pub/R3/fixes -c ~/fixes -m 'fix*' # 는 expo.lcs.mit.edu 의 ~ftp/contrib 에서 xplaces.shar 를 현재 디렉토리에 # xplaces.sh 로 가져오고, ~ftp/pub/R3/fixes 에서 모든 수정 파일('fix*')들을 # 자기 시스템의 ~/fixes 디렉토리로 가져옵니다. # ftp 에서 해당 명령어가 주어진 순서대로 실행되기 때문에 옵션 순서가 # 중요하다는 것은 아주 확실합니다. # # Mark Moraes (moraes@csri.toronto.edu), Feb 1, 1989 # ==> Docbook에서 처리할 수 있도록 부등호 괄호를 소괄호로 바꾸었습니다. # # ==> 이런 주석은 HOWTO 저자가 덧붙인 주석입니다. # PATH=/local/bin:/usr/ucb:/usr/bin:/bin # export PATH # ==> 원래 스크립트에 있던 위 두 줄은 쓸데없어 보입니다. TMPFILE=/tmp/ftp.$$ # ==> 스크립트의 프로세스 ID($$)로 임시 파일을 만듦. SITE=`domainname`.toronto.edu # ==> 'domainname'은 'hostname'과 비슷합니다. # ==> 좀 더 일반적으로 쓰려면 매개변수로 처리하도록 재작성 할 수도 있습니다. usage="사용법: $0 [-h remotehost] [-d remotedirectory]... [-f remfile:localfile]... \ [-c localdirectory] [-m filepattern] [-v]" ftpflags="-i -n" verbflag= set -f # -m 옵션에서 globbing을 쓰기 위해서 set x `getopt vh:d:c:m:f: $*` if [ $? != 0 ]; then echo $usage exit 65 fi shift trap 'rm -f ${TMPFILE} ; exit' 0 1 2 3 15 echo "user anonymous ${USER-gnu}@${SITE} > ${TMPFILE}" # ==> 쿼우트 추가(복잡한 echo 문에서는 이렇게 하기 바랍니다). echo binary >> ${TMPFILE} for i in $* # ==> 명령어줄 인자를 파싱. do case $i in -v) verbflag=-v; echo hash >> ${TMPFILE}; shift;; -h) remhost=$2; shift 2;; -d) echo cd $2 >> ${TMPFILE}; if [ x${verbflag} != x ]; then echo pwd >> ${TMPFILE}; fi; shift 2;; -c) echo lcd $2 >> ${TMPFILE}; shift 2;; -m) echo mget "$2" >> ${TMPFILE}; shift 2;; -f) f1=`expr "$2" : "\([^:]*\).*"`; f2=`expr "$2" : "[^:]*:\(.*\)"`; echo get ${f1} ${f2} >> ${TMPFILE}; shift 2;; --) shift; break;; esac done if [ $# -ne 0 ]; then echo $usage exit 65 # ==> 표준을 따르기 위해 "exit 2"였던 것을 수정. fi if [ x${verbflag} != x ]; then ftpflags="${ftpflags} -v" fi if [ x${remhost} = x ]; then remhost=prep.ai.mit.edu # ==> 여러분이 좋아하는 ftp 싸이트로 바꾸세요. fi echo quit >> ${TMPFILE} # ==> 모든 명령어는 임시 파일로 저장됩니다. ftp ${ftpflags} ${remhost} < ${TMPFILE} # ==> 이제 임시 파일에 저장됐던 명령어들이 ftp 에 의해 한 번에 처리됩니다. rm -f ${TMPFILE} # ==> 끝으로, 임시 파일 삭제(지우지 않고 로그 파일로 복사할 수도 있습니다). # ==> 독자들을 위한 연습문제: # ==> 1) 에러 체크를 추가하세요. # ==> 2) 다른 편리한 기능들(bells & whistles)을 넣어보세요. |