- 목표
- 배시(bash)쉘 기능
- 사용중인 쉘 확인 ( sh, csh, ksh, bash )
- 쉘에서 실행되는 종류
쉘 내부 명령어(EX: if, while, ...)
엘리어스(EX: alias ls=’ls –al’)
함수(EX: a () { CMD ; CMD; CMD }
디스크 내에 존재하는 명령어(EX: /bin/ls)
- 쉘 스크립트 작성지 필요한 명령어
- grep 명령어
# find /etc -type f -exec grep -l 'eth0' {} \;
[참고]
fgrep # fgrep '^root' dictionary.txt /* ^root 자체를 찾음 */
egrep ## egrep '(warn|error|crit|alart|emerg)' /var/log/messages /* 선택적인 words */
- sed 명령어
# sed [-n] 'addressCMD' file1
default - 원래 file1의 내용을 한번 출력해줌
-n : not default
# sed [-n] '/pattern/CMD' file1
/word/ : 찾으려는 word
EX)
-n /* 출력 한번만 */
# sed -n '1,3p' /etc/passwd
# sed -n '/root/p' /etc/passwd (# grep root /etc/passwd)
# sed -n '1,/adm/p' /etc/passwd
# sed -n '10,$p' /etc/passwd
# sed -n '3p' /etc/passwd
# chkconfig --list | sed -n '/xinetd based/,$p'
-d /* 빼고 출력 */
# sed '1,3d' /etc/hosts
# sed '3d' /etc/passwd
# sed '3,$d' /etc/passwd
# sed '$d' /etc/passwd
# sed '/root/d' /etc/passwd (# grep -v root /etc/passwd)
-s /* 치환 ( 원본파일을 바꾸지 않고 그냥 출력시 치환 )*/
# sed 's/root/ROOT/' /etc/group (# sed '1,$s/root/ROOT/' /etc/group)
# sed '1,3s/root/ROOT/g' /etc/group
# sed 's/^....//' /etc/hosts
# sed 's/....$//' /etc/hosts
# sed '1,3s/^/ /' /etc/hosts
# sed '1,3s/^ //' /etc/hosts
# sed 's#/test/file.sh#/test/file.c#g' file1
# sed 's;/test/file.sh;/test/file.c;g' file1
# sed 's/root/ROOT/' /etc/group > /tmp/.file1
# mv /tmp/.file1 /etc/group
# sed -i 's/root/ROOT/' /etc/group /* -i 원본파일 바로 편집 */
# sed '/linux200/s/192.168.20.200/172.16.20.200/' /etc/hosts > /tmp/.file1
# mv /tmp/.file1 /etc/hosts
[참고] sed 명령어의 pattern 부분에 변수로 지정하는 경우
# cat sed.sh
------------------------------------
......
PATTERN=root
sed "/^$PATTERN/d" /etc/passwd
......
------------------------------------
-awk 명령어
# awk 'statement' file1
# awk '{Action}' file1
# awk 'statement {Action}' file1
[참고]
# ls -l
|
-rw-r--r-- 1 root other 0 11월 10 06:29 file1 <-----$1----> <-$2-> <-$3-> <--$4--> <-$5-> <-$6-> ..... <------------------------------------$0-----------------------------------> |
|
EX)
# awk '{ print $0 }' testfile
# awk '{ print $3 $5 $9 }' testfile
# awk '{ print $3 " " $9 " " $6, $7 }' testfile
# awk '{ print $3 "\t" $5 "\t" $9 }' testfile
# awk '{ print $9, "is using", $5, "bytes" }' testfile
# awk '/file/' testfile
# awk '{ print $1, $2, $3 }' testfile
# awk '/file/ { print $1, $2 }' testfile
# awk -F: '$3 > 499 && $3 < 60000 {print $1}' /etc/passwd
-F : 필드 구분자 지정
# df -h / | tail -1 | awk '{print $6}'
# ifconfig eth0 | grep inet | grep -v inet6 | \
awk '{print $2}' | awk -F: '{print $2}'
# ps -elf | awk '$2 == "Z" {print $0}' /* 좀비 프로세서 검색 */
- sort 명령어
# df -k
# du -sk /var /* -s : sum, -k : KBytes */
# cd /var
# du -sk * | sort –nr | more
# sort -u file1 /* 중복 되는 것 한번만 출력*/
# sort file1 | uniq -d /* -d : duplicated */ 중복된것만
# sort file1 | uniq -u /* -u : unduplicated */ 중복되지 않은것
[예] 패키지 비교
# cat linux200 (# rpm -qa > linux200)
A
B
# cat linux201 (# rpm -qa > linux201)
A
B
C
# cat linux200 linux201 > sum.txt
# sort sum.txt | uniq -u
- cut 명령어
# cp /etc/hosts /tset/hosts
# cd /test
# cut -c1-3 hosts
# cut -c4- hosts
# cut -c4-10 hosts
# cut -f 1 hosts /* -f 필드의 구분은 tab */
# cut -f 1 -d":" /etc/passwd /* -f 첫 번째 필드 -d":" 필드의 구분자 : */
# ifconfig eth0 | grep 'inet addr:' | awk '{print $2}' | cut -d":" -f2
-uniq 명령어
근처에 있는 것끼리만 비교하여, sort와 사용하지 않으면 의미 없다.
- tr 명령어 /* 대소문자를 바꿔 준다. */
# cat temp | tr "[A-Z]" "[a-z]"
# cat temp | tr "[a-z]" "[A-Z]"
- split 명령어
-파일을 더 작은 단위로 쪼갤 때
- 큰 파일을 작은 단위로 쪼개서 한번에 실행한다. -> 시간
# split -d -l 4 /etc/hosts
/* -d : decimal number, -l : line number*/
/* -l 4 4줄씩 쪼갠다 . -d 쪼개진 파일이름을 숫자로 지정 */
( 숫자로 지정하면 script로 작성해서 한꺼번에 관리하기가 편해진다 )
- paste 명령어
파일 내용을 옆에 붙혀준다.
# cat > file1
1111
2222
3333
# cat > file2
4444
5555
6666
# paste file1 file2
1111 4444
2222 5555
3333 6666
- head / tail / wc 명령어
'Security > shell scripts' 카테고리의 다른 글
쉘 스크립트 예제 (0) | 2017.10.10 |
---|---|
쉘 스크립트 작성하기_(반복문) (0) | 2017.10.10 |
쉘 스크립트 작성하기(조건문) (0) | 2017.10.02 |
쉘 스크립트_2 (0) | 2017.10.02 |