"Bash"의 두 판 사이의 차이
둘러보기로 가기
검색하러 가기
잔글 |
잔글 |
||
(같은 사용자의 중간 판 21개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
Linux에서 많이 사용하는 Shell Script인 bash(Bourne Again Shell)를 정리 한다. | Linux에서 많이 사용하는 Shell Script인 bash(Bourne Again Shell)를 정리 한다. | ||
− | |||
− | ==사용자 가이드== | + | == 사용자 가이드 == |
− | ===Bash 실행 순서=== | + | |
+ | === Bash 실행 순서 === | ||
+ | |||
*첫 로그인 시 | *첫 로그인 시 | ||
+ | |||
/etc/profile | /etc/profile | ||
~/.bash_profile, ~/.bash_login, ~/.profile | ~/.bash_profile, ~/.bash_login, ~/.profile | ||
*Shell 실행시 마다 | *Shell 실행시 마다 | ||
+ | |||
~/.bashrc | ~/.bashrc | ||
*.bashrc 샘플 | *.bashrc 샘플 | ||
+ | |||
alias showinfo='~/bin/showinfo.bash' | alias showinfo='~/bin/showinfo.bash' | ||
alias dir='/bin/ls -alF' | alias dir='/bin/ls -alF' | ||
alias dird='/bin/ls -alF | grep /' | alias dird='/bin/ls -alF | grep /' | ||
− | ===Bash 인수=== | + | === Bash 인수 === |
− | *$# : 인수의 갯수 | + | |
+ | *$# : 인수의 갯수 | ||
+ | |||
:*$1, $2, $3, ... | :*$1, $2, $3, ... | ||
:*shift | :*shift | ||
+ | |||
for thing in "$@"; do | for thing in "$@"; do | ||
− | + | echo $thing | |
done | done | ||
*bash -c 실행할_문자열 | *bash -c 실행할_문자열 | ||
− | *~ 2> /dev/null : 표준 에러를 표시하지 않음 | + | *~ 2> /dev/null : 표준 에러를 표시하지 않음 |
− | *~ 1>&2 /dev/null : 표준 출력과 표준 에러를 표시하지 않음 | + | *~ 1>&2 /dev/null : 표준 출력과 표준 에러를 표시하지 않음 |
− | *${변수=값} : 변수에 값 지정 | + | *${변수=값} : 변수에 값 지정 |
− | *${HADOOP_HOME:-${HADOOP_PREFIX}} : ${HADOOP_HOME}에 값이 없을 경우 ${HADOOP_PREFIX} 값을 사용 | + | *${HADOOP_HOME:-${HADOOP_PREFIX}} : ${HADOOP_HOME}에 값이 없을 경우 ${HADOOP_PREFIX} 값을 사용 |
=== 표준 입출력 === | === 표준 입출력 === | ||
50번째 줄: | 57번째 줄: | ||
=== 변수 편집 === | === 변수 편집 === | ||
− | |||
− | |||
Replace | Replace | ||
− | ${변수명/aaa/bbb} : 첫 aaa를 bbb로 변경 | + | ${변수명/aaa/bbb} : 첫 aaa를 bbb로 변경 |
− | ${변수명//aaa/bbb} : 모든 aaa를 bbb로 변경 | + | ${변수명//aaa/bbb} : 모든 aaa를 bbb로 변경 |
64번째 줄: | 69번째 줄: | ||
*[https://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/string-manipulation.html https://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/string-manipulation.html] | *[https://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/string-manipulation.html https://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/string-manipulation.html] | ||
+ | |||
+ | === Prompt === | ||
+ | |||
+ | |||
+ | <pre>PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\] '</pre> | ||
+ | |||
=== 기타 정리 === | === 기타 정리 === | ||
73번째 줄: | 84번째 줄: | ||
funcShowinfo() | funcShowinfo() | ||
{ | { | ||
− | + | ~/bin/showinfo_$1.bash | |
− | + | echo '.' | |
} | } | ||
funcShowinfo "test" | funcShowinfo "test" | ||
140번째 줄: | 151번째 줄: | ||
~ | ~ | ||
done<font face="sans-serif, Arial, Verdana, Trebuchet MS"><span style="white-space: normal;"> | done<font face="sans-serif, Arial, Verdana, Trebuchet MS"><span style="white-space: normal;"> | ||
+ | |||
146번째 줄: | 158번째 줄: | ||
== Bash Script 가이드 == | == Bash Script 가이드 == | ||
+ | === Bash Script 시작 표시 === | ||
+ | <pre>#!/usr/bin/env bash</pre> | ||
+ | |||
+ | |||
+ | === Bash Script 실행 === | ||
+ | |||
+ | *chmod Bash_file<br/>Bash_file | ||
+ | *source Bash_file : 스크립트에서 환경 설정한 것이 유지 된다. | ||
+ | *. Bash_file : source Bash_file과 동일 | ||
− | |||
− | {| border="1" | + | === Bash Script Arguments === |
+ | |||
+ | {| cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" | ||
+ | |- | ||
+ | | width="33%" align="center" valign="middle" style="background-color:#eee;" | Item | ||
+ | | width="70%" align="center" valign="middle" style="background-color:#eee;" | Description | ||
|- | |- | ||
− | | # | + | | align="center" valign="middle" | $# |
+ | | align="left" valign="middle" | Argument의 개수 | ||
+ | |- | ||
+ | | align="center" valign="middle" | $1, $2, $3, ... | ||
+ | | align="left" valign="middle" | Argument | ||
+ | |- | ||
+ | | align="center" valign="middle" | shift | ||
+ | | align="left" valign="middle" | $1을 삭제하고 번호를 하나씩 줄인다. | ||
|} | |} | ||
+ | |||
+ | |||
+ | |||
+ | === 종료 코드 === | ||
+ | <pre>exit 종료_코드</pre> | ||
+ | *0 : 정상 종료 | ||
+ | *1 ~ 255 : 비정상 종료 | ||
+ | *$? : 직전에 실행된 명령의 종료 코드 | ||
== 유용한 Tip == | == 유용한 Tip == | ||
173번째 줄: | 213번째 줄: | ||
###--- Command Line에서 입력된 인수를 검사한다. | ###--- Command Line에서 입력된 인수를 검사한다. | ||
if [[$# = 4| $# = 4 ]]; then | if [[$# = 4| $# = 4 ]]; then | ||
− | + | HOST=$1 | |
− | + | DATABASE=$2 | |
− | + | USER=$3 | |
− | + | PASSWORD=$4 | |
elif [[$# = 5| $# = 5 ]]; then | elif [[$# = 5| $# = 5 ]]; then | ||
− | + | HOST=$1 | |
− | + | DATABASE=$2 | |
− | + | USER=$3 | |
− | + | PASSWORD=$4 | |
else | else | ||
− | + | /bin/echo "Using : allowDBConnection HOST DATABASE USER PASSWORD [ROOTPASSWORD]" | |
− | + | /bin/echo " HOST : 접속하려는 client의 host" | |
− | + | /bin/echo " DATABASE : 접속을 허용하려는 Database" | |
− | + | /bin/echo " USER : Database 사용자" | |
− | + | /bin/echo " PASSWORD : Database 사용자의 암호" | |
− | + | /bin/echo " ROOTPASSWORD : Database의 root 사용자의 암호" | |
− | + | /bin/echo " " | |
− | + | exit | |
fi | fi | ||
199번째 줄: | 239번째 줄: | ||
connect mysql; | connect mysql; | ||
insert into db | insert into db | ||
− | + | values ('${HOST}', '${DATABASE}', '${USER}', | |
− | + | 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', | |
− | + | 'Y','Y','Y','Y','Y','Y','Y','Y','Y'); | |
commit; | commit; | ||
flush privileges; | flush privileges; | ||
212번째 줄: | 252번째 줄: | ||
/usr/bin/mysql --user=root --password=${ROOTPASSWORD} mysql <<+ | /usr/bin/mysql --user=root --password=${ROOTPASSWORD} mysql <<+ | ||
insert into db | insert into db | ||
− | + | values ('${HOST}', '${DATABASE}', '${USER}', | |
− | + | 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', | |
− | + | 'Y','Y','Y','Y','Y','Y','Y','Y','Y'); | |
commit; | commit; | ||
flush privileges; | flush privileges; | ||
243번째 줄: | 283번째 줄: | ||
###--- Command Line에서 입력된 인수를 검사한다. | ###--- Command Line에서 입력된 인수를 검사한다. | ||
if [[$# = 4| $# = 4 ]]; then | if [[$# = 4| $# = 4 ]]; then | ||
− | + | INSTANCE=$1 | |
− | + | DATABASE=$2 | |
− | + | USER=$3 | |
− | + | PASSWORD=$4 | |
else | else | ||
− | + | /bin/echo "Using : backupInstance INSTANCE DATABASE USER PASSWORD" | |
− | + | /bin/echo " INSTANCE : Sugar Instance" | |
− | + | /bin/echo " DATABASE : Database" | |
− | + | /bin/echo " USER : Database 사용자" | |
− | + | /bin/echo " PASSWORD : Database 사용자의 암호" | |
− | + | /bin/echo " " | |
− | + | exit | |
fi | fi | ||
299번째 줄: | 339번째 줄: | ||
###--- Process가 죽었을 경우 다시 살린다. | ###--- Process가 죽었을 경우 다시 살린다. | ||
if ("${procPID}" == "") then | if ("${procPID}" == "") then | ||
− | + | ${PROC_STOP} >& /dev/null | |
− | + | ${PROC_START} >& /dev/null | |
− | + | \/bin/echo "----------------------------------------" >> ${JOB_LOG} | |
− | + | \/bin/echo "--- ${PROC_NAME} 재기동" >> ${JOB_LOG} | |
− | + | \/bin/date >> ${JOB_LOG} | |
− | + | \/bin/echo " " >> ${JOB_LOG} | |
endif | endif | ||
315번째 줄: | 355번째 줄: | ||
###--- 환경변수를 설정한다. | ###--- 환경변수를 설정한다. | ||
set PROC_NAME="Apache Tomcat 서버" ### Process 명 | set PROC_NAME="Apache Tomcat 서버" ### Process 명 | ||
− | + | ### Process를 확인할 수 있는 문자열 | |
set PROC_STR="Dcatalina.home=/usr/local/tomcat6" | set PROC_STR="Dcatalina.home=/usr/local/tomcat6" | ||
− | + | ### Process Stop 명령어 | |
set PROC_STOP="service tomcat6 stop" | set PROC_STOP="service tomcat6 stop" | ||
− | + | ### Process Start 명령어 | |
set PROC_START="service tomcat6 start" | set PROC_START="service tomcat6 start" | ||
set JOB_LOG="/root/logs/watchdog.log" ### 현재 프로그램이 처리한 Log 파일 | set JOB_LOG="/root/logs/watchdog.log" ### 현재 프로그램이 처리한 Log 파일 | ||
329번째 줄: | 369번째 줄: | ||
switch ("$argv[1]") | switch ("$argv[1]") | ||
− | + | case "-check": | |
− | + | set flagCheck="true" | |
− | + | shift | |
− | + | breaksw | |
− | + | case "-help": | |
− | + | goto theUsing | |
− | + | case "-time": | |
− | + | shift | |
− | + | if ($#argv < 1) goto theUsing | |
− | + | set timeSecond="$argv[1]" | |
− | + | shift | |
− | + | breaksw | |
− | + | default: | |
− | + | goto theUsing | |
− | + | breaksw | |
endsw | endsw | ||
361번째 줄: | 401번째 줄: | ||
for file in /nas/appl/flume/lib/*.jar | for file in /nas/appl/flume/lib/*.jar | ||
do | do | ||
− | + | CLASSPATHA=${CLASSPATHA}:${file} | |
done | done | ||
370번째 줄: | 410번째 줄: | ||
du -s -m * | du -s -m * | ||
− | ==awk== | + | == awk == |
+ | |||
*명령행 | *명령행 | ||
+ | |||
awk 'pattern {action}' file | awk 'pattern {action}' file | ||
awk -f awkfile file | awk -f awkfile file | ||
*Pattern | *Pattern | ||
+ | |||
BEGIN //--- 시작전 실행 | BEGIN //--- 시작전 실행 | ||
END //--- 종료후 실행 | END //--- 종료후 실행 | ||
/정규식/ //--- 정규식을 만족하면 실행 | /정규식/ //--- 정규식을 만족하면 실행 | ||
− | expression //--- 참일 경우 실행 (not zero, not null), &&(and), ||(or) !(not) | + | expression //--- 참일 경우 실행 (not zero, not null), &&(and), ||(or) !(not) |
pattern1, pattern2 //--- pattern1과 pattern2 사이의 라인에서 실행 | pattern1, pattern2 //--- pattern1과 pattern2 사이의 라인에서 실행 | ||
*Action | *Action | ||
+ | |||
print $1, $2 | print $1, $2 | ||
printf(format, ...) | printf(format, ...) | ||
if (~) ~ else ~ | if (~) ~ else ~ | ||
− | + | var ~pattern : var 변수가 pattern에 일치하면 참 | |
− | + | var !~pattern : var 변수가 pattern에 일치하지 않으면 참 | |
while (~) ~ | while (~) ~ | ||
for (~;~;~) ~ | for (~;~;~) ~ | ||
398번째 줄: | 442번째 줄: | ||
*Variables | *Variables | ||
+ | |||
FILENAME //--- 파일 이름 | FILENAME //--- 파일 이름 | ||
FS //--- 입력 필드 분리자 | FS //--- 입력 필드 분리자 | ||
405번째 줄: | 450번째 줄: | ||
*내장 함수 | *내장 함수 | ||
+ | |||
length(x) //--- 문자의 길이 | length(x) //--- 문자의 길이 | ||
int(x) //--- x의 정수값 | int(x) //--- x의 정수값 | ||
416번째 줄: | 462번째 줄: | ||
*참고 문헌 | *참고 문헌 | ||
− | :*http://www.dreamy.pe.kr/zbxe/CodeClip/6332 | + | |
+ | :*[http://www.dreamy.pe.kr/zbxe/CodeClip/6332 http://www.dreamy.pe.kr/zbxe/CodeClip/6332] | ||
+ | |||
+ | |||
+ | |||
+ | == 파일 편집 == | ||
+ | |||
+ | sed | ||
+ | <pre>echo "NOZEROCONF=yes" >> /etc/sysconfig/network #--- 마지막에 문자열 추가 | ||
+ | sed -i '/source/i\ | ||
+ | new prev content' fileName #--- source 이전줄에 추가 | ||
+ | sed -i '/source/c\ | ||
+ | new prev content' fileName #--- source 줄을 교체 | ||
+ | sed -i '/source/a\ | ||
+ | new next content' fileName #--- source 다음줄에 추가 | ||
+ | sed -i '/source/r textfile' fileName #--- source 다음줄에 textfile을 읽어서 추가 | ||
+ | |||
+ | sed -i 's/source/target/g' fileName #--- 문자열 치환 (Substitute) | ||
+ | sed -i 's/hello/& world/g' fileName #--- &는 패턴 매칭된 부분임 | ||
+ | |||
+ | sed -i '/source/d' fileName #--- 삭제 (Delete) | ||
+ | |||
+ | sed '/source/p' fileName #--- 문자열 출력 (Print) | ||
+ | |||
+ | sed -e script | ||
+ | sed -f script_file | ||
+ | sed -r 정규표현식 | ||
+ | |||
+ | find . -type f -print0 | xargs -0 's/source/target/g' | ||
+ | |||
+ | </pre> | ||
+ | <br/>yum -y install crudini | ||
+ | <pre>crudini --set [OPTION]... config_file section [param] [value] | ||
+ | crudini --get [OPTION]... config_file [section] [param] | ||
+ | crudini --del [OPTION]... config_file section [param] [list value] | ||
+ | crudini --merge [OPTION]... config_file [section]</pre> | ||
+ | <br/>xargs : 앞 명령어의 출력을 뒷 명령어의 인자로 전달 | ||
+ | <pre>ls -alF | xargs echo | ||
+ | ls | xargs -i cp {} ./backup_files | ||
+ | ls | xargs -l{} cp {} ./backup_files</pre> | ||
+ | <br/>참고 문헌 | ||
+ | |||
+ | *[http://so-blog.net/2016/04/22/sed/ http://so-blog.net/2016/04/22/sed/] | ||
== 참고 문헌 == | == 참고 문헌 == | ||
423번째 줄: | 511번째 줄: | ||
*[http://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/ 고급 Bash 스크립팅 가이드] | *[http://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/ 고급 Bash 스크립팅 가이드] | ||
+ | *[https://github.com/denysdovhan/bash-handbook/blob/master/translations/ko-KR/README.md Bash Handbook] | ||
*[http://wiki.kldp.org/Translations//html/Shell_Programming-KLDP/index.html Shell 프로그래밍의 기본] | *[http://wiki.kldp.org/Translations//html/Shell_Programming-KLDP/index.html Shell 프로그래밍의 기본] | ||
*[http://unix.co.kr/bbs/board.php?bo_table=02_11&wr_id=24 BASH 쉘 스크립팅 입문: 버전 1.2] | *[http://unix.co.kr/bbs/board.php?bo_table=02_11&wr_id=24 BASH 쉘 스크립팅 입문: 버전 1.2] |
2017년 3월 28일 (화) 18:33 기준 최신판
Linux에서 많이 사용하는 Shell Script인 bash(Bourne Again Shell)를 정리 한다.
목차
사용자 가이드
Bash 실행 순서
- 첫 로그인 시
/etc/profile ~/.bash_profile, ~/.bash_login, ~/.profile
- Shell 실행시 마다
~/.bashrc
- .bashrc 샘플
alias showinfo='~/bin/showinfo.bash' alias dir='/bin/ls -alF' alias dird='/bin/ls -alF | grep /'
Bash 인수
- $# : 인수의 갯수
- $1, $2, $3, ...
- shift
for thing in "$@"; do echo $thing done
- bash -c 실행할_문자열
- ~ 2> /dev/null : 표준 에러를 표시하지 않음
- ~ 1>&2 /dev/null : 표준 출력과 표준 에러를 표시하지 않음
- ${변수=값} : 변수에 값 지정
- ${HADOOP_HOME:-${HADOOP_PREFIX}} : ${HADOOP_HOME}에 값이 없을 경우 ${HADOOP_PREFIX} 값을 사용
표준 입출력
표준 입력 (/dev/stdin)
- <
- <<+
Here document.
+
표준 출력 (/dev/stdout)
- >
- 1>
- > /dev/null 2>&1
표준 오류 (/dev/stderr)
- 2> /dev/null
- 2> /dev/null 1>&2
변수 편집
Replace
${변수명/aaa/bbb} : 첫 aaa를 bbb로 변경
${변수명//aaa/bbb} : 모든 aaa를 bbb로 변경
참고 문헌
Prompt
PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\] '
기타 정리
#!/bin/bash STR_DATE=`date +%Y%m%d_%H%M%S` ${STR_DATE} funcShowinfo() { ~/bin/showinfo_$1.bash echo '.' } funcShowinfo "test"
- 연월일 표시
#--- CentOS에서 date +%Y%m%d_%H%M%S
- kill `ps -C ~ -o pid=`
- Script Arguments : $1
test ~ = ~ [ ~ = ~ ] echo $?
if $# < 5; then if [ "$1" = "centos" ]; then echo 'rarara' fi if ~; then ~ elif ~ ; then ~ else ~ fi
while ~ do ~ done
until ~ do ~ done
case string in "~") ~ ;; esac
for hostname in "controller001" "controller002" "controller003"; do echo ${hostname} done for ~ in [list] do ~ done
for ~ do ~ done
select ~ in [~]
do
~
done
Bash Script 가이드
Bash Script 시작 표시
#!/usr/bin/env bash
Bash Script 실행
- chmod Bash_file
Bash_file - source Bash_file : 스크립트에서 환경 설정한 것이 유지 된다.
- . Bash_file : source Bash_file과 동일
Bash Script Arguments
Item | Description |
$# | Argument의 개수 |
$1, $2, $3, ... | Argument |
shift | $1을 삭제하고 번호를 하나씩 줄인다. |
종료 코드
exit 종료_코드
- 0 : 정상 종료
- 1 ~ 255 : 비정상 종료
- $? : 직전에 실행된 명령의 종료 코드
유용한 Tip
allowDBConnection
#!/bin/bash ### ================================================================================================ ### 프로그램 명 : allowDBConnection, Version 1.0 ### 프로그램 설명 : 특정 host에서 Database로의 접속을 허용 합니다. ### 작성자 : 김계현 (pnuskgh@gmail.com, 010-5034-3931) ### 작성일 : 2002.09.27 ~ 2002.09.27 ### ----[History 관리]------------------------------------------------------------------------------ ### 수정자 : ### 수정일 : ### 수정 내용 : ### ================================================================================================ ###--- Command Line에서 입력된 인수를 검사한다. if $# = 4 ; then HOST=$1 DATABASE=$2 USER=$3 PASSWORD=$4 elif $# = 5 ; then HOST=$1 DATABASE=$2 USER=$3 PASSWORD=$4 else /bin/echo "Using : allowDBConnection HOST DATABASE USER PASSWORD [ROOTPASSWORD]" /bin/echo " HOST : 접속하려는 client의 host" /bin/echo " DATABASE : 접속을 허용하려는 Database" /bin/echo " USER : Database 사용자" /bin/echo " PASSWORD : Database 사용자의 암호" /bin/echo " ROOTPASSWORD : Database의 root 사용자의 암호" /bin/echo " " exit fi ###--- 특정 host에서 Database로의 접속을 허용 합니다. if $# = 4 ; then /usr/bin/mysql -uroot -p <<+ connect mysql; insert into db values ('${HOST}', '${DATABASE}', '${USER}', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y','Y','Y'); commit; flush privileges; grant all privileges on ${DATABASE}.* to ${USER}@${HOST} identified by '${PASSWORD}'; exit + else /usr/bin/mysql --user=root --password=${ROOTPASSWORD} mysql <<+ insert into db values ('${HOST}', '${DATABASE}', '${USER}', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y','Y','Y'); commit; flush privileges; grant all privileges on ${DATABASE}.* to ${USER}@${HOST} identified by '${PASSWORD}'; exit + fi
backupInstance
#!/bin/bash ### ================================================================================================ ### 프로그램 명 : backupInstance, Version 1.0 ### 프로그램 설명 : Sugar Instance와 Database를 백업 합니다. ### 작성자 : 김계현 (pnuskgh@gmail.com, 010-5034-3931) ### 작성일 : 2002.07.15 ~ 2002.09.27 ### ----[History 관리]------------------------------------------------------------------------------ ### 수정자 : ### 수정일 : ### 수정 내용 : ### ================================================================================================ ###--- Default 환경변수를 설정한다. WEB_ROOT=/var/www/html BACKUP_DIR=/data/backup ###--- Command Line에서 입력된 인수를 검사한다. if $# = 4 ; then INSTANCE=$1 DATABASE=$2 USER=$3 PASSWORD=$4 else /bin/echo "Using : backupInstance INSTANCE DATABASE USER PASSWORD" /bin/echo " INSTANCE : Sugar Instance" /bin/echo " DATABASE : Database" /bin/echo " USER : Database 사용자" /bin/echo " PASSWORD : Database 사용자의 암호" /bin/echo " " exit fi ###--- Sugar Instance를 백업 합니다. cd ${WEB_ROOT} /bin/tar cvf ${BACKUP_DIR}/${INSTANCE}_`date +%Y%m%d_%H%M%S`.tar ${INSTANCE} /usr/bin/mysqldump --user=${USER} --password=${PASSWORD} ${DATABASE} > ${BACKUP_DIR}/${DATABASE}_DB_`date +%Y%m%d_%H%M%S`.sql /bin/tar cvf ${BACKUP_DIR}/${DATABASE}_DB_`date +%Y%m%d_%H%M%S`.tar /var/lib/mysql/${DATABASE} clear /bin/echo "--------------------------------------------------" /bin/echo "Backup folder : " ${BACKUP_DIR} /bin/echo "Backup datetime : " `date +%Y%m%d_%H%M%S` /bin/echo " " /bin/ls -alF ${BACKUP_DIR}
Watchdog Tomcat
- Apache Tomcat을 모니터링하고 있다가 죽었을 경우 살려주는 Script
- watchdogTomcat.csh
#!/bin/csh ###--- Default 환경변수를 설정한다. goto theSet theSetEnd: ###--- 인수의 초기값을 설정한다. set timeSecond="60" ### Process를 검사할 간격 set flagCheck="false" ### true일 경우 한번만 검사를 한다. ###--- Command Line에서 입력된 인수를 검사한다. goto theArg theArgEnd: ###--- Process를 검사한다. theStart: ###--- Process를 확인한다. set procPID=`/bin/ps -ef | /bin/grep -v /bin/grep | /bin/grep "${PROC_STR}" | /bin/awk '{print $2}'` ###--- Process가 죽었을 경우 다시 살린다. if ("${procPID}" == "") then ${PROC_STOP} >& /dev/null ${PROC_START} >& /dev/null \/bin/echo "----------------------------------------" >> ${JOB_LOG} \/bin/echo "--- ${PROC_NAME} 재기동" >> ${JOB_LOG} \/bin/date >> ${JOB_LOG} \/bin/echo " " >> ${JOB_LOG} endif ###--- "-check" 인수가 있을 경우 처리를 종료하고, 없을 경우 timeSecond만큼 sleep한후 다시 검사한다. if ("${flagCheck}" == "true") exit /bin/sleep ${timeSecond} goto theStart theSet: ###--- 환경변수를 설정한다. set PROC_NAME="Apache Tomcat 서버" ### Process 명 ### Process를 확인할 수 있는 문자열 set PROC_STR="Dcatalina.home=/usr/local/tomcat6" ### Process Stop 명령어 set PROC_STOP="service tomcat6 stop" ### Process Start 명령어 set PROC_START="service tomcat6 start" set JOB_LOG="/root/logs/watchdog.log" ### 현재 프로그램이 처리한 Log 파일 goto theSetEnd theArg: if ($#argv < 1) goto theArgEnd switch ("$argv[1]") case "-check": set flagCheck="true" shift breaksw case "-help": goto theUsing case "-time": shift if ($#argv < 1) goto theUsing set timeSecond="$argv[1]" shift breaksw default: goto theUsing breaksw endsw goto theArg theUsing: \/bin/echo "Using : watchdogTomcat.csh [-help] [-time sec] [-check]" \/bin/echo " -help : 프로그램에 대한 사용법을 보여준다." \/bin/echo " -time sec : 초 단위로 Process를 검사할 간격을 설정한다. (default. 60)" \/bin/echo " -check : 한번만 검사를 한다. (crontab에서 사용할 경우를 위해)" \/bin/echo " " exit
파일 목록 추가
CLASSPATHA=/nas/appl/flume/lib for file in /nas/appl/flume/lib/*.jar do CLASSPATHA=${CLASSPATHA}:${file} done
Disk 용량 확인
- 폴더별 사용 용량 확인
du -s -m *
awk
- 명령행
awk 'pattern {action}' file awk -f awkfile file
- Pattern
BEGIN //--- 시작전 실행 END //--- 종료후 실행 /정규식/ //--- 정규식을 만족하면 실행 expression //--- 참일 경우 실행 (not zero, not null), &&(and), ||(or) !(not) pattern1, pattern2 //--- pattern1과 pattern2 사이의 라인에서 실행
- Action
print $1, $2 printf(format, ...) if (~) ~ else ~ var ~pattern : var 변수가 pattern에 일치하면 참 var !~pattern : var 변수가 pattern에 일치하지 않으면 참 while (~) ~ for (~;~;~) ~ for (~ in ~) ~ do ~ while (~) break, continue next exit exit expression
- Variables
FILENAME //--- 파일 이름 FS //--- 입력 필드 분리자 NR //--- 현재 행번호 NF //--- 현재 행의 필드 갯수 OFS //--- 출력되는 필드의 분리자
- 내장 함수
length(x) //--- 문자의 길이 int(x) //--- x의 정수값 substr(str, start, len) //--- str 문자열에서 start부터 len개의 문자 반환 sub(from, to, str) //--- str 문자열에서 첫번째 from을 to로 치환 gsub(from, to, str) //--- str 문자열에서 모든 from을 to로 치환 split(str, array, sep) //--- str 문자열을 sep 문자열로 구분하여 쪼개어 array에 저장 (array[1]) toupper(str) tolower(str) system(command) //--- 명령을 실행하고 exit 상태를 반환
- 참고 문헌
파일 편집
sed
echo "NOZEROCONF=yes" >> /etc/sysconfig/network #--- 마지막에 문자열 추가 sed -i '/source/i\ new prev content' fileName #--- source 이전줄에 추가 sed -i '/source/c\ new prev content' fileName #--- source 줄을 교체 sed -i '/source/a\ new next content' fileName #--- source 다음줄에 추가 sed -i '/source/r textfile' fileName #--- source 다음줄에 textfile을 읽어서 추가 sed -i 's/source/target/g' fileName #--- 문자열 치환 (Substitute) sed -i 's/hello/& world/g' fileName #--- &는 패턴 매칭된 부분임 sed -i '/source/d' fileName #--- 삭제 (Delete) sed '/source/p' fileName #--- 문자열 출력 (Print) sed -e script sed -f script_file sed -r 정규표현식 find . -type f -print0 | xargs -0 's/source/target/g'
yum -y install crudini
crudini --set [OPTION]... config_file section [param] [value] crudini --get [OPTION]... config_file [section] [param] crudini --del [OPTION]... config_file section [param] [list value] crudini --merge [OPTION]... config_file [section]
xargs : 앞 명령어의 출력을 뒷 명령어의 인자로 전달
ls -alF | xargs echo ls | xargs -i cp {} ./backup_files ls | xargs -l{} cp {} ./backup_files
참고 문헌
참고 문헌
- 모니터링