1. 파일 입출력 관련 명령어1
#cat
형 식 : cat [옵션] “파일이름”
사용예 : #cat welcome
옵션 : -n 각 줄의 번호를 같이 출력
파일의 내용을 보여주는 명령어
#head
형 식 : head [옵션] “파일이름”
사용예 : #head -5 exam
옵션 : -<라인수> 앞에서부터 라인수 만큼 출력
-n<라인수> 앞에서부터 라인수 만큼 출력
파일의 처음 부분을 출력하여 보여주는 명령어. 옵션을 주지 않으면 기본값으로 10라인까지 출력.
#tail
형 식 : tail [옵션] “파일이름”
사용예 : #tail -5 exam
옵션 : -<라인수> 파일의 끝부분부터 라인수 만큼 출력
+<라인수> 파일의 처음 라인수 부분부터 끝까지 출력
-f 파일의 끝부분에 추가되는 부분을 계속해서 표시
파일의 끝 부분을 출력하여 보여주는 명령어. 옵션을 주지 않으면 기본값으로 10라인까지 출력.
#cut
형 식 : cut [옵션] “파일이름”
사용예 : #cut –c 2-4 sample
옵션 : -c 문자수로 열을 계산해서 출력하다.
-d <구분자> 필드 구분자를 사용한다.
-f <구분자> 파일 내의 필드로 따져서 추출한다.
특정 필드를 추출하는 명령어.
#cat sample
홍경래 28세 011-222-2222 서울 강남구
박혁거세 34세 010-333-3333 경기도 부천시
임꺽정 23세 109-444-4444 충남 대전시
홍길동 19세 011-555-5555 경기도 성남시
이몽룡 16세 011-666-6666 경이고 의정부시
#cut –c 12-17 sample
#cut –d “” –f 1,3 sample
#cut –d : -f 1,3-4 /etc/passwd | tail -5
첫번째 필드와 세번째부터 네번째 필드
#paste
형 식 : paste [옵션] “파일이름” “파일이름”
사용예 : #paste –d : exam2 exam3
옵션 : -s 한 파일의 내용을 한 줄로 보여준 후 다른 파일의 내용을 한줄로 덧붙인다.
-d 출력되는 내용의 구분자를 지정한다.
여러 파일의 내용을 하나로 합쳐서 출력하는 명령어.
이때 각 구분자는 기본값으로 Tab 이며, -d 옵션으로 구분자를 변경 할수 있음.
#cat exam2
red
blue
#cat exam3
yellow
green
#paste exam2 exam3
red yellow
blue green
#paste –d : exam2 exam3
red:yellow
blue:green
#paste –s –d “|” exam2 exam3
red|blue
yellow|green
#diff
형 식 : diff [옵션] “파일이름” “파일이름”
사용예 : #diff exam2 exam4
옵션 : -b Space를 무시하고 비교한다.
-q 파일이 서로 다른 경우, 다르다는 메시지만 출력한다.
파일의 내용을 비교하여, 서로 다른 행을 출력하는 명령어. 누군가가 파일의 내용을 변경한 경우 변경된 파일을 알아볼 때 사용
#cat exam2
red
blue
#cat exam4
red
green
blue
#diff exam2 exam4
#clear
#clear
화면을 깨끗하게 지울 때 사용
2. 파일 입출력 관련 명령어 ii
#grep
형 식 : grep [옵션] [패턴] “파일이름”
사용예 : #grep 서울 sample
옵션 : -v ‘패턴’을 포함하지 않는 행을 출력
-i 대소문자를 구분하지 않는다.
-n 줄번호를 함께 출력한다.
-l 파일명을 출력한다.
grep 는 특정 단어나 문장을 포함하는 파일을 찾을 때 사용.
#grep white *
현재 디렉토리의 모든 파일(*)의 내용중에 white라는 단어가 있는 라인 출력
대소문자 구분없이 찾기 위해서는 –i
#cat –i pink –n *
패턴을 좀더 정교하게 표현하려면 regular expression을 사용해야 한다]
^ : ^패턴 : 패턴으로 시작하는 모든 라인 찾기
$ : 패턴$ : 패턴으로 끝나는 모든 라인 찾기
. : d... : d로 시작하는 4자리 character 찾기
* : [a-d]* : a, b, c, d로 시작하는 character 찾기
[] : [Dd]atabase : Database 또는 database 찾기
[^] : [^D] : D가 나타나지 않는 라인 찾기
OS/tdir] grep -i ^the ~/tdir/* # the로 시작하는 라인 찾기
OS/tdir] grep -i meal.$ ~/tdir/* # meal.으로 끝나는 라인 찾기
OS/tdir] grep c...d ~/tdir/* # c로 시작하고 d로 끝나는 5자리 character 찾기
[패턴]
형식 사용예 설명
[abc] grep [abc]* a나 b, 혹은 c가 있는 라인.
[0-9] grep [0-9] * 0 부터 9 가 있는 라인
[A-C] grep [A-C] * A,B,C 가 있는 라인
‘^pattern’ ls –l /etc/ | grep ‘^d’ /etc/ 서브디렉토리를 출력
‘pattern$’ ls –l /etc/ | grep ‘c$’ /etc/ 디렉토리 밑에서 c로 끝나는 파일 및 디렉토리 출력
#sort
형 식 : sort [옵션] “파일이름”
사용예 : #sort –k2 –r sample
옵션 : -f 대소문자를 구분하지 않는다.
-r 내림차순으로 정렬
-b Space를 무시한다.
-k 필드 번호를 나타낸다.
-t <구분자> 필드 구분자로 <구분자>를 사용한다.
-n 숫자 순서로 정렬.
sort는 데이터 파일에서 필드(컬럼)를 추출하는 명령어. sort에 옵션이 없을 경우 기준은 오름차순.
#cat sample
홍경래 28세 011-222-2222 서울 강남구
박혁거세 34세 010-333-3333 경기도 부천시
임꺽정 23세 109-444-4444 충남 대전시
홍길동 19세 011-555-5555 경기도 성남시
이몽룡 16세 011-666-6666 경이고 의정부시
#cat –k3 sample : 핸드폰 번호 순서대로 출력
나이가 많은 연장자부터 순서데로 정렬하여 다른 파일에 저장.
#sort –k2 –r sample > sample2
-t 옵션은 필드 구분자를 지정하여 주는 역할
#sort –t : -k3 –n –r /etc/passwd/ | head
/etc/passwd 파일을 구분자를 “:”로 해서, 세번째 필드 UID를 기준으로 숫자를 (-n) , 내림차순(-r) 으로 정렬한후, 위에서부터 10라인까지만 출력.
#sed
형 식 : sed [옵션] “파일이름”
사용예 : #sed ‘s/01/82-1/g’ sample
옵션 : p 행을 출력한다. –n 옵션과 함께 사용할 경우 선택된 행만 출력
d 선택한 행을 삭제한다.
-f 파일 안의 내용을 실행한다.
-k 필드 번호를 나타낸다.
‘s/가/나/g’ ‘가 문자열을 ‘나’ 문자열로 대체한다.
-e 다중 편집을 한다.
-q sed를 종료한다.
sed는 stream editor에서 유래한 명령어로서, 문자 스트림으로 나타나는 입력을 수정하거나 편집하는 일종의 편집기 입니다. 즉 화면으로 출력되는 내용을 필터링하여 보여주는 역할을 함.
p 옵션은 원하는 내용을 출력 할 때 사용.
011 핸드폰을 사용하는 사람들을 추출하기 위해서 ‘/011/p’ 라는 옵션 사용.
-n 과 같이 사용하지 않는다면 원하는 내용이 두번씩 출력됨.
#sed –n ‘/011/p’ sample
#sed ‘1,3d’ sample 1번 라인부터 3번 라인까지 삭제하고 출력
‘$’ 는 파일의 마지막 라인 나타냅니다.
#sed ‘5, $d’ sample : 5라인부터 파일의 끝까지 삭제하고 그 이전의 라인만 출력.
#sed ‘4q’ sample : 4라인까지만 출력하고 종료
#sed ‘/서울/d’ sample : 서울 이라는 특정 문자열 이 포함된 라인을 제외하고 출력.
특정 문자열 대체
#sed ‘s/file/FILE/g’ sample2
만약 file 이라는 단어만 FILE로 변경하고자 한다면 원하는 단어를 ‘< >’ 로 묶어줌.
#sed ‘s/\<file\>/FILE/g’ sample2
라인의 일부분만을 변경하여 출력
#sed ‘1,6s/서울시/서울특별시/g’ sample
변경된 라인만 출력하려 할때는 –n 옵션과 끝부분으 gp 로 하면 됨.
#sed –n ‘1,6s/서울시/서울특별시/gp’ sample
-e 옵션은 다중 편집 입니다..sed 명령어를 중복해서 사용한다는 의미.
#sed –e ‘s/서울시/서울특별시/g’ –e ‘s/충남/충청남도/g’ sample
#awk
특정 패턴의 조작이나 검색을 주목적으로 하고 있는 프로그래밍 언어.
A.V.Aho, P.J.Weinberger, B.Kernigham 의 머리글자.
awk는 파일의 각 라인을 필드로 인식하여 이들 필드 및 컬럼을 조작하므로 이를 응용하여 간단한 데이터베이스 관리까지 가능함.
awk ‘패턴’ ‘{action} ‘ “파일이름”
패턴: BEGIN – 특정 명령을 실행하기 전에 먼저 실행시킨다.
END - 특정 명령을 실행한후 제시되는 문장을 실행 시킨다.
/정규표현식/ - 정규표현식의 패턴을 포함하는 라인에서 문장을 실행시킨다.
패턴1 && 패턴2 – 패턴1 이나 패턴2 중 하나만 만족시켜도 문장을 실행시킨다.
!패턴 - 패턴과 일치 하지 않을 겨우 문장을 실행시킨다.
awk : 패턴 검색과 처리를 위한 언어
=> 명령어의 이름은 개발자인 Alfred V. Aho, Peter J. Weinberger, Brian W. Kernighan 3인의
머리글자를 사용해서 만든 것이다.
awk '{ action}' filename
OS/tdir] ls -l | awk '{print $0}' # 전체 필드가 모두 나타나도록...
drwxr-xr-x 2 prof9i4 dba 512 4월 25일 15:44 a_dir
drwxr-xr-x 2 prof9i4 dba 512 4월 18일 23:53 b_dir
$1 $2 $3 $4 $5 $6 $7 $8 $9 $0
OS/tdir] ls -l | awk '{print $1}' # 1번 필드만 나타도록...
OS/tdir] ls -l | awk '{print $1, $9}' # 1번과 9번 필드만 나타나도록...
OS/tdir] ls -l | awk '{print $3 "\t" $4 "\t" $9}' # Tab 키가 적용된 결과...
OS/tdir] ls -lt | awk '{print $9, "is using", $5, "bytes"}' # text 추가
OS/tdir] ls -lt | awk '$5 <= 200 {print $0}' # 5번 필드가 200 이하일 경우 출력
Bash Shell
- 쉘은 사용자와 리눅스를 연결시켜주는 일종의 유틸리티 프로그램입니다.
리눅스 운영체제를 사용하는 사람은 기본적으로 하나 이상의 쉘을 사용합니다.
자신의 쉘 확인
#echo $SHELL
- 쉘의 종류
1)Borune Shell(sh)
- 1979, Bell 연구소의 Steven Bourne이 개발한 쉘.
2) C Shell(csh)
- 버클리대학 Bill Joy개발, C 언어와 유사한 점이 많음.
3)korn Shell(ksh)
AT&T 회사의 David Korn이 개발, Bourne Shell의 기능들을 확장한 쉘.
Bourne Shell과의 호환성이 좋으며, C shell 기능도 제공.
4) Bourne Agine Shell(bash)
Bourne Shell 기능을 추가 발전시킨 쉘이며, C shell,과 korn Shell에서 제공하는 기능들도 어느 정도 포함하고 있음.
5) TC Shell(tcsh)
- 1980 ken Greer 등이 C Shell을 확장시켜 제작.
--- 쉘 프로그래밍은 리눅스를 다루는 사람의 작업을 보다 편리하고, 효율적으로 하기 위해 많이 사용.
-- 관리자가 각 계정의 자료들을 정규적을 백업, 웹 호스팅 서버에 계정의 추가 작업을 쉽게
하기 위해여 쉘 스크립트
------------------쉘 작성-----------
스크립트 파일 작성은 가장 위의 첫 라인에서 #!/bin/bash 로 시작
주석이 아니라 쉘의 지정임.
#ls –al /bin | grep sh
sh가 bash의 심볼릭 링크임.
#!/bin/bash 나 #!/bin/sh 나 같은 의미 임.
1) 스크립트 파일의 실행 방법
- sh 명령어 (sh “스크립트 파일이름”)
- 퍼미션 변경후 실행(chmod)
#cat runfile
#!/bin/bash
echo “Hi….^^”
#ls –l
#sh runfile
#chmod 755 runfile
#ls –l
#./runfile
2) echo : 기본 출력
echo는 화면에 원하는 문자열을 출력 시킴.
#!/bin/bash
echo “ This is s shell script file!!”
#!/bin/bash
echo “Red”
echo “Blue”
자동 줄바꿈 됨. 이것을 방지 할려면 echo –n “Red”
역따옴표(`) 를 사용하면 명령어의 결과를 출력 할 수도 있음.
#!/bin/bash
echo `ifconfig | grep inet | grep –v 127.0.0.1`
2) 변수 만들고 사용하기
형식: 변수명=변수값
사용예: korea=”Beaituful”
적용예: echo $korea
주의점: 변수명 다음에 오는’=’의 좌우로 공백이 있으면 안됨.
- 변수 안에 또 다른 변수를 넣을 수도 있음
#!/bin/bash
color=red
say=”this color is $color”
echo $say
- 환경변수 : export 명령 사용 /etc/profile
3) read 사용
- 사용자의 표준입력을 받아들여 변수로 저장하는 역할.
#cat –n readsh
#!/bin/bash
echo –n “age : “
read x
echo “You are $x years old”
3) argument
#cat –n argumentsh
#!/bin/bash
echo “argument1:$1”
echo “argument2:$2”
echo “argument3:$3”
#sh arguemntsh red blue yellow
#!/bin/bash
echo “argument1:$1”
echo “argument2:$2”
echo “argument3:$3”
echo “Total argument number : $#”
echo “This is File Name : $0
”
$# 은 argument의 전체 개수
$0 은 스크립트 파일 이름.
기본 문법
1) 크기비교
[$A –gt $B] : A 값이 B값보다 크다.
[$A –lt $B] : A 값이 B값보다 작다.
[$A –ge $B] : A 값이 B값보다 크거나 같다.
[$A –le $B] : A 값이 B값보다 작거나 같다.
[$A –eq $B] : A 값이 B값이 같다.
[$A –ne $B] : A 값이 B값이 다르다.
#cat –n number
A=8
B=5
if [$A –eq $B] #만약 A와 B가 같다면
then
echo “$A is equal to $B”
elif [$A –gt $B] #만약 A가 B 보다 크다면
then
echo “$A is greater then $B”
elif [ $A –lt $B] # 만약 A가 B보다 작다면
then
echo “$A is less then $B”
fi
#sh number
#!/bin/bash
echo –n “A : “
read A
echo –n “B : “
read B
…………..
#sh number 9 6
2)숫자 계산
expr : 숫자 연산을 할 때 사용.
#cat –n expr1
#!/bin/bash
num=`expr 3 + 4 – 5 `
echo $num
#cat –n expr2
#!/bin/bash
num=`expr \(3 \* 5 \) / 4 +7 `
echo $num
주의점: 역따옴표(`) 를 사용
* 연사자와 괄호( ) 앞에는 역슬래시 \ 를 붙인다.
모든 연산자와 숫자, 변수 , 기호 사이에는 Space 가 있어야 한다.
#cat –n sp
#!/bin/bash
A=linux
echo “1. \$A 의 값은 $A 이다”
echo “2. \$A 의 값은 $$A 이다”
echo “3. \$A 의 값은 $$$A 이다”
echo “4. \$A 의 값은 ‘$A’ 이다”
echo “5. \$A 의 값은 “$A” 이다”
- 역슬래시 바로 다음에 오는 문자 하나는 특수한 의미가 없어지고 일반 문자처럼 인식
- ‘$$’ 는 스크립트 파일이 실행되는 프로세스 번호
$$ 다음에 오는 A는 그냥 문자 A, $$$A는 $$ 프로세스 번호 인식 한후 $A 인식
‘ ‘ 작은 따옴표는 그 자체가 문자.
“” 큰 따옴표는 그 안에 있는 문자를 문자 그대로 보호.
3) 문자열 비교
[“String1”=”String2”] 두 문자열이 같은 경우
[“String1”!=”String2”] 두 문자열이 다른 경우
[-z “String”] 문자열의 길이가 0 인 경우
[-n “String”] 문자열의 길이가 0 이 아닌 경우
#cat –n string1
#!/bin/bash
if [ H$1 = “Hyes” ]
then
echo “argument is yes”
else
echo “argument is not yes”
fi
#sh string1 yes
$1과 yes 앞에 H 라는 임의의 문자를 붙이지 않는다면 argument 값을 넣지 않을 경우 에러발생.
4) 파일 다루기
[-f 파일명] 파일이 있는 경우
[-s 파일명] 파일이 존재하고 내용이 있는 경우
[-d 파일명] 파일이 아니고 디렉토리인 경우
[-r 파일명] 읽기가 가능한 파일인 경우
[-w 파일명] 쓰기가 가능한 파일인 경우
[-x 파일명] 파일이 존재하고 실행 가능한 경우
[! –옵션 파일명] 옵션이 조건이 아닐 경우
#!/bin/bash
xfer=/var/log/xferlog
if [ -s $xfer ]
then
tail $xfer
fi
5) 조건문
주의점: [ 앞뒤] 의 앞에는 Space 공간이 있어야 한다.
if 문의 형식 I
if [ 조건문]
then
……..
fi
#!/bin/bash
if [ 7 –gt 3 ]
then
echo “ 7은 3보다 크다”
fi
if 문의 형식 II
if [ 조건문]
then
……..
else
if [ 조건문]
then
else
fi
elif => else; if 문장
6) 관계연산자
관계연산자 의미
-a and
-o or
#!/bin/bash
echo -n “input 1,2 or 3 : “
read num
if [ \( $num –lt 1 \) –o \( $num –gt 3 \) ]
then
echo “허용된 범위의 숫자가 아닙니다”
exit
else
if [ $num -eq 1 ]
then
echo “하나”
elif [ $num –eq 2 ]
then
echo “둘”
elif [ $num –eq 3 ]
then
echo “셋”
fi
fi
7) for 문
형식: for 변수명 in 변수값1 변수값2 변수값3 …
do
…..
done
#!/bin/bash
for Ghost in the shell is Anination
do
echo $Ghost
done
#!/bin/bash
A=`ls /etc/`
for B in `echo $A`
do
echo “Linux Shell Script”
done
8) while
형식: while [ 조건문 ]
do
…………
done
#!/bin/bash
while [ : ]
do
echo –n “Linux”
done
---------구구단—
#!/bin/bash
echo –n “Dan : “
read num
echo “”
echo “ $num Dan”
echo “=======”
A=1
while [ $A –lt 10 ]
do
answer=`expr $num \* $A`
echo “$num X $A = $answer”
A=`expr $A + 1`
done
9) until
형식: until [ 조건문 ]
do
……
done
while문과 반대로 조건문이 거짓이면 do와 done 사이의 명령어들을 실행하고, 조건문이면 루프를 끝냅니다.
#!/bin/bash
echo “”
until [ “$A” = “end” ]
do
echo –n “IF you exit this scrit, Type \”end\” : “
read A
echo $A
done
10) case
형식: case 변수 in
패턴1)
스크립트;;
패턴2)
스크립트;;
*)
스크립트;;
esac
case문은 변수의 값을 받아들여서, 이값에 따라 각각 다른 스크립트들을 실행할 때 사용함.
리눅스 쉘 스크립트 파일에서 가장 많이 사용되는 조건문
/etc/rc.d/init.d 디렉토리 안에 있는 대부분의 스크립트 파일들이 case 문
주의점: 패턴의 각 항목을 마칠때는 ;; 문을 사용한다.
wildcard(*) 를 사용할 경우는 각 패턴의 마지막에 사용한다.
‘|’ 를 사용하여 여러 개의 패턴을 사용 할수 있다.
#!/bin/bash
echo –n “Are you Korean? (y|n) : “
read A
case “$A” in
y|Y)
echo “you ar korean.”
exit;;
n|N)
echo “where are you from?”
exit;;
*)
echo “Huk..--;”
exit;;
esac
#!/bin/bash
echo “
[1] network restart
[2] DNS restart
[3] SendMail restart
“
echo –n “Select Number : “
read Num
case $Num in
1)
/etc/rc.d/init.d/network restart;;
2)
/etc/rc.d/init.d/named restart;;
3)
/etc/rc.d/init.d/sendmail restart;;
*)
echo “Select {1|2|3}”;;
esac
11) continue, break
continue와 break 문은 자주 사용되지 않지만 , 사용 방법은 다른 프로그래밍 언어와 유사함.
#!/bin/bash
while :
do
echo –n “ls –l 을 치세요 : “
read A
if [ “$A” != “ls –l” ]
then
continue
else
ls –l
break
fi
done
12) 사용자 정의 함수
형식: 함수명()
{
….
}
#!/bin/bash
Gugu()
{
echo “ $1 단 “
echo “=========”
num=1
while [ $num –lt 10 ]
do
answer=`expr $1 \* $num`
if [ $answer –lt 10 ] ;then
answer=” $answer”
fi
echo “$1 X $num = $answer”
num=`expr $num + 1`
done
echo “”
}
Gugu 3
Gugu 5
Gugu 7
13) ANSI Escape Code
ANSI American National Standsrds Institute(미국표준협회)
- 화면상의 커서의 움직임이나 키보드의 역할 등을 제어하는 ANSI Escape Code 개발
- ANSI Escape Code 를 이용하여 화면을 제어하거나, 글자색이나 바탕색을 지정할 수 있습니다.
화면을 제어한다는 것은 커서의 위치를 이동시킨다거나, clear 명령어와 같이 화면을 지우거나, 혹은 특정 부분의 문자를 삭제하는 등의 작업.
최근에는 ANSI Escape Code를 이용하여 화면 제어하는 작업은 거의 하지 않음.
화면의 색을 지정하는 내용이 많음.
화면 색 지정 형식
^[[숫자m
^[ => Ctrl +v 치고나서 Ctrl+Esc
또는 Ctrl+v , Ctrl+[
색상 글자색 코드 배경색 코드
검정색(회색) 30 40
빨간색 31 41
초록색 32 42
갈색 33 43
파란색 34 44
보라색 35 45
하늘색 36 46
회색 37 47
기본화면색 0
bold intensity 1
역상 7
#!/bin/bash
echo “^[[31m 안녕하세요 ^[[0m”
#echo $PS1
[\u@\n \w]\$
\d: “요일 월 일” 형식으로 표시
\h : 첫번째 “.” 까지의 호스트 이름
\H : 전체 호스트 이름
\n : 다음 줄로 바꾸기
\t : HH:MM:SS 형식의 24시간 표시
\T : HH:MM:SS 형식의 12시간 표시
\u : 현재 계정의 username
\w : 계정의 홈디렉토리를 기준으로 전체 경로 표시
\W : 현재 작업 디렉토리만 출력
.bashrc 나 .bash_profile 파일의 마지막에
PS1=”^[[36m\T ^[[33m[\u@\h \w]\n^[[0m\$ “
export PS1
리눅스에 telnet으로 접속하면 로그인하기 전의 메시지는 /etc/issue.net 파일 안의
내용이 출력됩니다.
만약 로컬에서 바로 접속했다면 /etc/issue 파일안의 내용 츨력.
예제)
삼각형 : 11
}
메시지 박스(msgbox)
메시지 박스는 간단한 인사말이나 안내문, 정보를 출력할 때 사용.
#!/bin/sh
DIALOG=${DIALOG=dialog}
$DIALOG --title “MESSAGE BOX” --clear \
--msgbox “ Hi, this is simple message box. \
you press the ENTER key.” 10 41
case $? in
0)
echo “ok”;;
255)
echo ‘Esc pressed.”;;
esac
쉘스크립트도 GUI그래픽 인터페이스 표현이 어느정도 가능하다.
/usr/share/doc/dialog-~~~/samples/ 디렉토리에는 GUI 방식으로 실행되는 쉘 스크립트 예제파일들이 있습니다. 이 장애서는 리눅스에서 지원하는 GUI 방식의 기본적인 스크립트 예제파일들을 분석해보자.
메세지박스(msgbox)
--msgbox <text> <height> <width>
#!/bin/sh
# $Id: msgbox,v 1.3 2003/08/15 19:40:37 tom Exp $
: ${DIALOG=dialog}
$DIALOG --title "MESSAGE BOX" --clear \
--msgbox "Hi, this is a simple message box. You can use this to \
display any message you like. The box will remain until \
you press the ENTER key." 10 41
case $? in
0)
echo "OK";;
255)
echo "ESC pressed.";;
esac
- dialog 는 일반적으로 /usr/bin/dialog에 위치하고 있으며, /usr/bin 디렉토리는 PATH가 지정되어 있으므로 3 라인에서와 같이 전체 경로를 사용하지 않고서도 변수로 지정할수 있다. --title 옵션으로 메시지 박스의 상단에 나타나는 제목을 출력할수 있다, --clear 옵션은 다이얼로그 박스를 종료했을 경우 화면을 clear 하는 옵션 문장 맨 뒤 '\'표시를 사용하였으므로 리눅스가 해석할 때는 하나의 라인으로 인식하게 됩니다.
--msgbox 옵션으로 출력하고자 하는 내용을 입력하면 됨, 10 41 은 메시지 박스의 세로와 가로의 길이를 나타낸다.
case 문에서 $?를 통하여 사용자가 입력한 값을 구분하고 처리한다. 만약 메시지창에서 ok를 선택하였다면 $?의 값은 0으로 받아들이고 ESC 키를 누르면 255로 인식한다.
인포박스(infobox)
--infobox <text> <height> <width>
1 #! /bin/sh
2 # $Id: infobox,v 1.5 2003/08/15 19:40:37 tom Exp $
3 : ${DIALOG=dialog}
4
5 left=10
6 unit="seconds"
7 while test $left != 0
8 do
9
10 $DIALOG --sleep 1 \
11 --title "INFO BOX" \
12 --infobox "Hi, this is an information box. It is
13 different from a message box: it will
14 not pause waiting for input after displaying
15 the message. The pause here is only introduced
16 by the sleep command within dialog.
17 You have $left $unit to read this..." 10 52
18 left=`expr $left - 1`
19 test $left = 1 && unit="second"
20 done
- 메시지박스와 유사하지만 보다 더 많은 내용의 정보를 출력할 때 유용합니다.
- 7라인에 조건문 2가지 효현방식중 test 조건문이 사용하고 있다.
- 옵션 --sleep 옵션으로 1초씩 멈추면서 실행하고 있다.
텍스트박스(textbox)
--textbox <file> <height> <width>
1 #!/bin/sh
2 # $Id: textbox,v 1.6 2003/08/15 19:40:37 tom Exp $
3 : ${DIALOG=dialog}
4
5 tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
6 trap "rm -f $tempfile" 0 1 2 5 15
7
8 cat << EOF > $tempfile
9 Hi, this is a text dialog box. It can be used to display text from a file.
10 The file should not contain any 'tab' characters, so you should 'expand'
11 the file first if it contains 'tab' characters.
12
13 It's like a simple text file viewer, with these keys implemented:
14
15 PGDN/SPACE - Move down one page
16 PGUP/'b' - Move up one page
17 ENTER/DOWN/'j' - Move down one line
18 UP/'k' - Move up one line
19 LEFT/'h' - Scroll left
20 RIGHT/'l' - Scroll right
21 '0' - Move to beginning of line
22 HOME/'g' - Move to beginning of file
23 END/'G' - Move to end of file
24 '/' - Forward search
25 '?' - Backward search
26 'n' - Repeat last search (forward)
27 'N' - Repeat last search (backward)
28
29
30 The following is a sample text file:
31
32
33 EOF
34
35 TEXT=/usr/share/common-licenses/GPL
36 test -f $TEXT || TEXT=../COPYING
37
38 cat $TEXT | expand >> $tempfile
39
40 $DIALOG --clear --title "TEXT BOX" --textbox "$tempfile" 22 77
41
42 case $? in
43 0)
44 echo "OK";;
45 255)
46 echo "ESC pressed.";;
47 esac
- 인포박스보다 더 많은 내용을 출력할 때 사용한다.
- 5번줄 5 tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
$$ 표시는 스크립트 파일이 실행할 때의 프로세스PID 값이다. 임시 파일을 만든다.
0 - stdin
1 - stdout
2 - strerr
3 - stdprn
- 6번 trap "rm -f $tempfile" 0 1 2 5 15
trap은 시그널 핸들러로서 쉘 스크립트 파일을 실행 중에 발생하는 interrupt의 시그널 값으로 원하는 작없을 실행하는데 사용 합니다.
형식 : trap [실행할 명령어] [시그널 번호]
- 8번 cat << EOF > $tempfile
cat 명령어를 사용하여 파일을 만들고 파일의 내용까지 넣는 작업 EOF는 End Of File로서 파일의 마지막 부분임을 나타낸다.
인풋박스(inputbox)
--inputbox <text> <height> <width> [<init>]
1 #!/bin/sh
2 # $Id: inputbox,v 1.6 2003/08/15 19:40:37 tom Exp $
3 : ${DIALOG=dialog}
4
5 tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
6 trap "rm -f $tempfile" 0 1 2 5 15
7
8 $DIALOG --title "INPUT BOX" --clear \
9 --inputbox "Hi, this is an input dialog box. You can use \n
10 this to ask questions that require the user \n
11 to input a string as the answer. You can \n
12 input strings of length longer than the \n
13 width of the input box, in that case, the \n
14 input field will be automatically scrolled. \n
15 You can use BACKSPACE to correct errors. \n\n
16 Try entering your name below:" 16 51 2> $tempfile
17
18 retval=$?
19
20 case $retval in
21 0)
22 echo "Input string is `cat $tempfile`";;
23 1)
24 echo "Cancel pressed.";;
25 255)
26 if test -s $tempfile ; then
27 cat $tempfile
28 else
29 echo "ESC pressed."
30 fi
31 ;;
32 esac
- 라인변경은 \n
- 16번줄은 인풋박스의 세로, 가로, 그리고 사용자입력창의 높이, 사용자로부터 입력받은 값을 $tempfile로 저장하는 것을 볼 수 있다.
- case 문에서 반환값이 1인경우는, 사용자가 Cancel 버튼을 선택하였을 때 발생한다.
패스워드(password)
--passwordbox <text> <height> <width> [<init>]
1 #!/bin/sh
2 # $Id: password,v 1.2 2003/08/15 19:40:37 tom Exp $
3 : ${DIALOG=dialog}
4
5 tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
6 trap "rm -f $tempfile" 0 1 2 5 15
7
8 $DIALOG --title "INPUT BOX" --clear \
9 --passwordbox "Hi, this is an password dialog box. You can use \n
10 this to ask questions that require the user \n
11 to input a string as the answer. You can \n
12 input strings of length longer than the \n
13 width of the input box, in that case, the \n
14 input field will be automatically scrolled. \n
15 You can use BACKSPACE to correct errors. \n\n
16 Try entering your name below:" 16 51 2> $tempfile
17
18 retval=$?
19
20 case $retval in
21 0)
22 echo "Input string is `cat $tempfile`";;
23 1)
24 echo "Cancel pressed.";;
25 255)
26 if test -s $tempfile ; then
27 cat $tempfile
28 else
29 echo "ESC pressed."
30 fi
31 ;;
32 esac
- 입력시 안보이게 해주는 뿐 인풋박스의 예제와 동일
예스노우(yesno)
--yesno <text> <height> <width>
1 #!/bin/sh
2 # $Id: yesno,v 1.3 2003/08/15 19:40:37 tom Exp $
3 : ${DIALOG=dialog}
4
5 $DIALOG --title "YES/NO BOX" --clear \
6 --yesno "Hi, this is a yes/no dialog box. You can use this to ask \
7 questions that have an answer of either yes or no. \
8 BTW, do you notice that long lines will be automatically \
9 wrapped around so that they can fit in the box? You can \
10 also control line breaking explicitly by inserting \
11 'backslash n' at any place you like, but in this case, \
12 auto wrap around will be disabled and you will have to \
13 control line breaking yourself." 15 61
14
15 case $? in
16 0)
17 echo "Yes chosen.";;
18 1)
19 echo "No chosen.";;
20 255)
21 echo "ESC pressed.";;
22 esac
- Yes 나 No를 선택할 수 있게 한다.
메뉴박스(menubox)
--menu <text> <height> <width> <menu height> <tag1> <item1>...
1 #!/bin/sh
2 # $Id: menubox,v 1.4 2003/08/15 19:40:37 tom Exp $
3 : ${DIALOG=dialog}
4
5 tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
6 trap "rm -f $tempfile" 0 1 2 5 15
7
8 $DIALOG --clear --title "MENU BOX" \
9 --menu "Hi, this is a menu box. You can use this to \n\
10 present a list of choices for the user to \n\
11 choose. If there are more items than can fit \n\
12 on the screen, the menu will be scrolled. \n\
13 You can use the UP/DOWN arrow keys, the first \n\
14 letter of the choice as a hot key, or the \n\
15 number keys 1-9 to choose an option.\n\
16 Try it now!\n\n\
17 Choose the OS you like:" 20 51 4 \
18 "Linux" "The Great Unix Clone for 386/486" \
19 "NetBSD" "Another free Unix Clone for 386/486" \
20 "OS/2" "IBM OS/2" \
21 "WIN NT" "Microsoft Windows NT" \
22 "PCDOS" "IBM PC DOS" \
23 "MSDOS" "Microsoft DOS" 2> $tempfile
24
25 retval=$?
26
27 choice=`cat $tempfile`
28
29 case $retval in
30 0)
31 echo "'$choice' chosen.";;
32 1)
33 echo "Cancel pressed.";;
34 255)
35 echo "ESC pressed.";;
36 esac
라디오리스트(radiolist)
--radiolist <text> <height> <width> <list height> <tag1> <item1> <status1>.
1 #! /bin/sh
2 # $Id: radiolist,v 1.8 2004/12/20 00:14:24 tom Exp $
3 : ${DIALOG=dialog}
4
5 tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
6 trap "rm -f $tempfile" 0 1 2 5 15
7
8 $DIALOG --backtitle "No Such Organization" \
9 --title "RADIOLIST BOX" --clear \
10 --radiolist "Hi, this is a radiolist box. You can use this to \n\
11 present a list of choices which can be turned on or \n\
12 off. If there are more items than can fit on the \n\
13 screen, the list will be scrolled. You can use the \n\
14 UP/DOWN arrow keys, the first letter of the choice as a \n\
15 hot key, or the number keys 1-9 to choose an option. \n\
16 Press SPACE to toggle an option on/off. \n\n\
17 Which of the following are fruits?" 20 61 5 \
18 "Apple" "It's an apple." off \
19 "Dog" "No, that's not my dog." ON \
20 "Orange" "Yeah, that's juicy." off \
21 "Chicken" "Normally not a pet." off \
22 "Cat" "No, never put a dog and a cat together!" off \
23 "Fish" "Cats like fish." off \
24 "Lemon" "You know how it tastes." off 2> $tempfile
25
26 retval=$?
27
28 choice=`cat $tempfile`
29 case $retval in
30 0)
31 echo "'$choice' chosen.";;
32 1)
33 echo "Cancel pressed.";;
34 255)
35 echo "ESC pressed.";;
36 esac
- 여러 항목중에서 하나만 선택이 가능.
- statuesl 부분에 off/on이 나온다. on/off 대소문자 구분이 없다. dog 가 기본 값으로 선택되어져 있다.
체크리스트(checklist)
--checklist <text> <height> <width> <list height> <tag1> <item1> <status1>
1 #! /bin/sh
2 # $Id: checklist,v 1.8 2004/12/20 00:14:24 tom Exp $
3 : ${DIALOG=dialog}
4
5 : ${DIALOG_OK=0}
6 : ${DIALOG_CANCEL=1}
7 : ${DIALOG_ESC=255}
8
9 tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
10 trap "rm -f $tempfile" 0 1 2 5 15
11
12 $DIALOG --backtitle "No Such Organization" \
13 --title "CHECKLIST BOX" \
14 --checklist "Hi, this is a checklist box. You can use this to \n\
15 present a list of choices which can be turned on or \n\
16 off. If there are more items than can fit on the \n\
17 screen, the list will be scrolled. You can use the \n\
18 UP/DOWN arrow keys, the first letter of the choice as a \n\
19 hot key, or the number keys 1-9 to choose an option. \n\
20 Press SPACE to toggle an option on/off. \n\n\
21 Which of the following are fruits?" 20 61 5 \
22 "Apple" "It's an apple." off \
23 "Dog" "No, that's not my dog." ON \
24 "Orange" "Yeah, that's juicy." off \
25 "Chicken" "Normally not a pet." off \
26 "Cat" "No, never put a dog and a cat together!" oN \
27 "Fish" "Cats like fish." On \
28 "Lemon" "You know how it tastes." on 2> $tempfile
29
30 retval=$?
31
32 choice=`cat $tempfile`
33 case $retval in
34 $DIALOG_OK)
35 echo "'$choice' chosen.";;
36 $DIALOG_CANCEL)
37 echo "Cancel pressed.";;
38 $DIALOG_ESC)
39 echo "ESC pressed.";;
40 *)
41 echo "Unexpected return code: $retval (ok would be $DIALOG_OK)";;
42 esac
- 라디오리스트와 달리 여러항목중 여러개를 선택 할수 있다.
grep,egrep,sed,awk사용법(정규표현식)
리눅스2008/05/19 09:11
▒ grep : 패턴을 이용한 search => regular expression을 잘 만드는 것이 필요하다.
grep option(s) pattern filename(s)
OS/tdir] grep -n dba /etc/group # -n : 파일 안에서의 패턴이 발견된 라인 및 라인 번호
OS/tdir] grep -v dba /etc/group # -v : 패턴이 발견되지 않은 라인
OS/tdir] grep -n dba /etc/group /etc/passwd # 파일을 여러개 나열...
OS/tdir] grep -i the ~/tdir/* # -i : 대소구분 무시(ignore) => the 대소구분 없이
OS/tdir] grep -li the ~/tdir/* # -l : 패턴이 들어있는 파일 이름만...
OS/tdir] grep -c the ~/tdir/* # -c : 패턴이 들어있는 라인 번호만...
[패턴을 좀더 정교하게 표현하려면 regular expression을 사용해야 한다]
^ : ^패턴 : 패턴으로 시작하는 모든 라인 찾기
$ : 패턴$ : 패턴으로 끝나는 모든 라인 찾기
. : d... : d로 시작하는 4자리 character 찾기
* : [a-d]* : a, b, c, d로 시작하는 character 찾기
[] : [Dd]atabase : Database 또는 database 찾기
[^] : [^D] : D가 나타나지 않는 라인 찾기
OS/tdir] grep -i ^the ~/tdir/* # the로 시작하는 라인 찾기
OS/tdir] grep -i meal.$ ~/tdir/* # meal.으로 끝나는 라인 찾기
OS/tdir] grep c...d ~/tdir/* # c로 시작하고 d로 끝나는 5자리 character 찾기
================================================================
▒ egrep(expression grep) : searches files for a pattern of characters
and prints all lines that contain that pattern.
OS/tdir] egrep '(a|A)d+' /etc/passwd # ad 또는 Ad가 포함된 라인 찾기
OS/tdir] vi grep_test # 아래 내용을 추가하세요... 붙여넣기... ^^
An Oracle database is a collection of data treated as a unit.
The purpose of a database is to store and retrieve related information.
A database server is the key to solving the problems of information management.
OS/tdir] egrep 'Oracle|purpose' grep_test # Oracle 또는 purpose가 포함된 라인 찾기
===============================================================
▒ sed : stream editor => file을 열지 않고 data를 편집하는 기능
sed [-options] [address] command file... [>newfile]
# sed '/pattern/d' filename # file에서 패턴이 포함된 라인을 지우고 그 결과를 화면에 표시
# 원본 파일에는 아무런 변화가 없다.
OS/tdir] cp grep_test sed_test
OS/tdir] cat sed_test
OS/tdir] sed '/purpose/d' sed_test # purpose 라는 단어가 들어간 라인 삭제
# sed '#d' filename : # 라인만 삭제
# sed '$d' filename : 마지막 라인 삭제
# sed '#,$d' filename : # 라인부터 마지막 라인까지 지우기
# sed '#,#d' filename : # 라인부터 # 라인까지 지우기
OS/tdir] sed '1d' sed_test # 1 라인만 삭제
OS/tdir] sed '$d' sed_test # 마지막 라인만 삭제
OS/tdir] sed '/purpose/d' sed_test > set_out # sed 처리 결과를 sed_out 으로 저장
OS/tdir] cat set_out
OS/tdir] sed '/purpose/p' sed_test # 패턴이 포함된 라인이 두번 출력(print)된다.
OS/tdir] sed -n '/purpose/p' sed_test # 패턴이 포함된 라인만 출력된다.
OS/tdir] sed 's/$/ Oracle/' sed_test # 각 라인의 마지막에 원하는 글자 추가
OS/tdir] sed 's/ */#/g' sed_test # space를 찾아서 #기호로 변환한다.
OS/tdir] sed 's/ */-/g' sed_test # space를 찾아서 -기호로 변환한다.
# * 기호 앞에 space가 두개라는 점에 유의
OS/tdir] # 한번에 여러 가지 편집 수행
OS/tdir] sed -e 's/database/DATABASE/g' -e 's/information/INFORMATION/g' sed_test
===============================================================
▒ awk : 패턴 검색과 처리를 위한 언어
=> 명령어의 이름은 개발자인 Alfred V. Aho, Peter J. Weinberger, Brian W. Kernighan 3인의
머리글자를 사용해서 만든 것이다.
awk '{ action}' filename
OS/tdir] ls -l | awk '{print $0}' # 전체 필드가 모두 나타나도록...
drwxr-xr-x 2 prof9i4 dba 512 4월 25일 15:44 a_dir
drwxr-xr-x 2 prof9i4 dba 512 4월 18일 23:53 b_dir
$1 $2 $3 $4 $5 $6 $7 $8 $9
$0
OS/tdir] ls -l | awk '{print $1}' # 1번 필드만 나타도록...
OS/tdir] ls -l | awk '{print $1, $9}' # 1번과 9번 필드만 나타나도록...
OS/tdir] ls -l | awk '{print $3 "\t" $4 "\t" $9}' # Tab 키가 적용된 결과...
OS/tdir] ls -lt | awk '{print $9, "is using", $5, "bytes"}' # text 추가
OS/tdir] ls -lt | awk '$5 <= 200 {print $0}' # 5번 필드가 200 이하일 경우 출력
/////////////
from http://newmkka.tistory.com/entry/UNIX-cut-%EB%AA%85%EB%A0%B9%EC%96%B4
Unix로그를 보기위해 tail 명령어를 자주 사용하는 경우가 많다. 이때 cut 명령어와 조합하면 훨씬 편하게 로그를 확인할수 있다.
아래 로그는 tail 명령어로 확인한 ProFrame 의 IPPR 로그중 한부분이다. 이때 로그를 살펴보면 : 문자로 로그구분이 된것을 확인 할 수 있다.
$ tail -f TPFMIPPR_usr_20090101.log
(T) TP :100350707976:20090129ibmsap1t1907210035000000:19072 [SPFMIPPR :pfmTpForward.c :pfmTpForward :00088] >> TPAPI [TPFORWARD :xxxxxxxxA ] ? FLAGS [0]
다음과 같이 cut 명령어를 통해 필요 없는(원치않는) 부분을 삭제하여 볼수 있다.
$ tail -f TPFMIPPR_usr_20090101.log | cut -d : -f 1,5-
(T) TP :pfmTpForward :00088] >> TPAPI [TPFORWARD : xxxxxxxxA ] ? FLAGS [0]
|(파이프) 명령어 뒤에 있는 cut 명령어를 살펴보자
(자세한건 man 명령어를 통해 보시길.)
-d :
* 문자 : 를 기준으로 나눈다는 뜻이다
-f 1,5-
* 1번째와 5번째뒤로 모두 보겠다는 뜻이다.
* 여기서 1번째는(T) TP를 뜻하고 2,3,4 는 보이지 않고 5번째부터 보이는것을 확인할수 있다.
너무긴 로그를 좀더 편하게(보고싶은것만) 보기 위해 cut 명령어를 적절히 사용하자!!
////////////
uniq : 일종의 group을 짓는것으로... 그냥 쓰면 같은건 하나만 나오게 하고 -c 까지 주면 각 수까지 보여준다.
--실전 쉘 프로그래밍 --
단순 백업
#mkdir /Backup
#!/bin/bash
tar cvfz /Backup/home.tar.gz /home
- /home 디렉토리를 tar 로 묶고 -gzip으로 압축하여 /Backup 디렉토리 밑에 home.tar.gz 저장
변수를 사용하여 재구성
#!/bin/bash
from_backup_dir="/home"
to_backup_dir="/Backup/"
to_backup_file="home"
tar cvfz ${to_backup_dir}${to_backup_file}.tar.gz ${from_backup_dir}
-- 백업은 1주일에 한두번, 자주하는 경우에는 하루에 한두번씩도 합니다.
파일명이 같은 경우 기존의 파일을 지우고 새로운 파일이 생성.
#date +%Y%m%d
#!/bin/bash
from_backup_dir="/home"
to_backup_dir="/Backup/"
today=`date +%Y%m%d`
tar cvfz ${to_backup_dir}${today}.tar.gz ${from_backup_dir}
---여러 디렉토리 백업
from_backup_dir="/home /etc/passwd /etc/shadow /var/log"
-- 백업 파일의 분할
큰 파일을 분할 하는 명령어는 split CD 용량인 650M 씩
#!/bin/bash
from_backup_dir="/home"
to_dir="/Backup/"
today=`date +%Y%m%d`
to_file=${today}.tar.gz
tr cvfz ${to_dir}${to_file} ${from_backup_dir}
split -b 650m ${to_dir}${to_file} ${to_dir}${today}
rm -f ${to_dir}${to_file}
--20090715aa, 20090715ab, 20090715ac 와 같은 형식으로 분할.
-- 분할된 파일 복구
#cat 20090715* > 20090715.tar.gz
-- 변경된 부분만 백업
#tar 명령어의 옵션중에 –N 옵션을 이용하면 특정 날짜 이후에 변경된 파일만을 아카이브 파일로 묶어 줄수 있음…. -–newer 도 같은 용도
#tar cvfz 20090715.tar.gz –N 20090714 /home
#!/bin/bash
from_backup_dir="/home"
to_dir="/Backup/"
today=`date +%Y%m%d`
to_file=${today}.tar.gz
tar cvfz ${to_dir}${to_file} -N 20090715 ${from_backup_dir}
- 매번 배겁을 받을때마다 –N 옵션으로 들어가는 날짜를 수정해 주어야 합니다. 마지막 백업을 받은 날짜를 알수 있다면, 백업할때마다 스크립트를 수정해야 하는 불편함을 없앨 수 있음.
#!/bin/bash
from_backup_dir="/home"
to_dir="/Backup/"
today=`date +%Y%m%d`
to_file=${today}.tar.gz
tar cvfz ${to_dir}${to_file} -N `cat ./last_date` ${from_backup_dir}
echo $today > ./last_date
-- 9라인에서 오늘 날짜를 lst_date 파일로 저장하고 있습니다. 다음에 이 스크립트 파일을 실행하게 되면 7라인에서 기존에 저장된 날짜를 불러와서 tar 명령을 실행하고, 다시 9라인에서 실행한 날짜를 저장하게 됨.
** 서비스 활성화 여부 확인
#!/bin/sh
# enabled - show what services are enabled with inetd and xinetd,
# if they're available on the system.
iconf="/etc/inetd.conf"
xconf="/etc/xinetd.conf"
xdir="/etc/xinetd.d"
if [ -r $iconf ] ; then
echo "Services enabled in $iconf are:"
grep -v '^#' $iconf | awk '{print " " $1}'
echo ""
if [ "$(ps -aux | grep inetd | egrep -vE '(xinet|grep)')" = "" ] ; then
echo "** warning: inetd does not appear to be running"
fi
fi
if [ -r $xconf ] ; then
# don't need to look in xinietd.conf, just know it exists
echo "Services enabled in $xdir are:"
for service in $xdir/*
do
if ! $(grep disable $service | grep 'yes' > /dev/null) ; then
echo -n " "
basename $service
fi
done
if ! $(ps -aux | grep xinetd | grep -v 'grep' > /dev/null) ; then
echo "** warning: xinetd does not appear to be running"
fi
fi
exit 0
'Linux(OS)' 카테고리의 다른 글
OSWatcher Black Box로 OS resource usage 정보 수집하기 (0) | 2015.02.01 |
---|---|
Sar을 이용한 성능 분석 (0) | 2014.06.08 |
VMWare ORACLE 11g R2 RAC on 6.5 (0) | 2014.02.22 |
ASM에서 disk 추가 및 삭제 (0) | 2013.12.09 |
Oracle 11g RAC_ASM (0) | 2013.12.02 |