▶ls명령이 어디 있느냐
multihp1:/data2/unix/unix10>whereis ls
ls: /sbin/ls /usr/bin/ls /usr/share/man/man1.Z/ls.1
▶ shell이 가지고 있는 명령은 파일형태로 가지고 있지 않음
multihp1:/data2/unix/unix10>whereis if
if:
/usr/bin/autopush /usr/bin/csh /usr/bin/ksh /usr/bin/rsh
/usr/bin/c_rehash /usr/bin/hash /usr/bin/remsh /usr/bin/sh
/usr/bin/chsh /usr/bin/keysh /usr/bin/rksh
▶ 로그인한 shell 확인하기
multihp1:/data2/unix/unix10>grep unix10 /etc/passwd
unix10:fyR7PgX/EpXYU:410:202:,,,:/data2/unix/unix10:/usr/bin/ksh --> /usr/bin/ksh 로그인한 shell
▶ shell 변경하기
multihp1:/data2/unix/unix10>chsh unix10 /usr/bin/csh
▶ 사용자와 커널(OS의 핵심)간의 명령어 해석기
스크립트 작업을 shell scriptor로 하는 경우가 많다
▶ 현재 사용하고 있는 shell을 확인하기
1) multihp1:/data2/unix/unix10>echo $SHELL
/usr/bin/ksh
multihp1:/data2/unix/unix10>grep unix10 /etc/passwd
PID TTY TIME COMMAND
20483 pts/tz 0:00 ps
18860 pts/tz 0:00 telnetd
18861 pts/tz 0:00 ksh
▶ vi를 통해서 a.ksh를 만들어줌
ls
date
who
cal
echo hi suho
~
~
~
~
"a.ksh" [새 파일] 6 줄, 30 자
multihp1:/data2/unix/unix10/shell>ls -l
총 2 블록입니다.
-rw-rw-rw- 1 unix10 unix 30 11월 24일 09:58 a.ksh
multihp1:/data2/unix/unix10/shell>chmod +x a.ksh
multihp1:/data2/unix/unix10/shell>./a.ksh
a.ksh
2011년11월24일 (목), 오전 9시59분25초
root console 8월 23일 13:49
it00 pts/ta 11월 24일 08:59
it00 pts/tb 11월 24일 08:59
it08 pts/tc 11월 24일 09:50
it06 pts/td 11월 24일 09:03
unix05 pts/te 11월 24일 09:04
unix05 pts/tf 11월 24일 09:04
it03 pts/tg 11월 24일 09:32
it03 pts/th 11월 24일 09:05
it15 pts/ti 11월 24일 09:05
it10 pts/tj 11월 24일 09:07
it10 pts/tk 11월 24일 09:07
unix04 pts/tl 11월 24일 09:09
it14 pts/tm 11월 24일 09:10
it04 pts/tn 11월 24일 09:10
it04 pts/to 11월 24일 09:10
it17 pts/tp 11월 24일 09:10
it12 pts/tq 11월 24일 09:10
it05 pts/tr 11월 24일 09:10
it11 pts/ts 11월 24일 09:10
it13 pts/tt 11월 24일 09:10
unix08 pts/tu 11월 24일 09:11
it02 pts/tv 11월 24일 09:14
it15 pts/tw 11월 24일 09:41
unix11 pts/tx 11월 24일 09:11
unix03 pts/ty 11월 24일 09:11
unix10 pts/tz 11월 24일 09:11
unix00 pts/tA 11월 24일 09:11
unix11 pts/tB 11월 24일 09:12
it14 pts/tC 11월 24일 09:13
unix07 pts/tE 11월 22일 09:14
it13 pts/tF 11월 24일 09:13
unix06 pts/tG 11월 24일 09:14
it11 pts/tH 11월 24일 09:14
it05 pts/tI 11월 24일 09:14
unix08 pts/tJ 11월 24일 09:16
unix15 pts/tK 11월 24일 09:18
unix00 pts/tL 11월 24일 09:19
it07 pts/tM 11월 24일 09:21
it07 pts/tN 11월 24일 09:21
it16 pts/tO 11월 24일 09:21
unix01 pts/tP 11월 24일 09:32
unix02 pts/tQ 11월 24일 09:43
unix13 pts/tR 11월 24일 09:57
November 2011
S M Tu W Th F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
multihp1:/data2/unix/unix10/shell>
#! --> shell 지정 --> #!/usr/bin/ksh : vi scriptor를 짤때는 이것으로 보통시작을 한다.
# --> 주석
▶ 실행하는 법. vi를 통해서 만들어준 b.sh를 현재 디렉토리에서 실해하는 법
multihp1:/data2/unix/unix10>cat b.sh
date
echo suho hi~~~
ksh: ./b.sh: cannot execute
multihp1:/data2/unix/unix10>. ./b.sh
2011년11월24일 (목), 오전 10시18분59초
suho hi~~~
multihp1:/data2/unix/unix10>ksh ./b.sh
2011년11월24일 (목), 오전 10시19분7초
suho hi~~~
multihp1:/data2/unix/unix10/shell>PATH=/usr/bin:usr/sbin:.
multihp1:/data2/unix/unix10/shell>ls > ls.out
multihp1:/data2/unix/unix10/shell>ls >> ls.out
multihp1:/data2/unix/unix10/shell>mail unix11 < ls.out
multihp1:/data2/unix/unix10/shell>cat << A
> red
> blue
> exit
> A
red
blue
exit
multihp1:/data2/unix/unix10/shell>
▶ shell에서 echo를 사용한 검색 (echo검색시 .으로 시작되는 파일은 보여주지 않음)
multihp1:/data2/unix/unix10>echo *
a aa aaa b.sh core cp.out err.out f3 f4 f5 ff1 ff2 find.out grep.out labdir labdir.cpio labdir2 labdir4 labdir5 letter ls.out mbox my.sh nohup.out public shell sort.out suho.tar.gz unix.out who.out
multihp1:/data2/unix/unix10>echo .*
. .. .profile .sh_history
multihp1:/data2/unix/unix10>echo ?
a
multihp1:/data2/unix/unix10>echo ????*
b.sh core cp.out err.out find.out grep.out labdir labdir.cpio labdir2 labdir4 labdir5 letter ls.out mbox my.sh nohup.out public shell sort.out suho.tar.gz unix.out who.out
multihp1:/data2/unix/unix10>echo ?????*
cp.out err.out find.out grep.out labdir labdir.cpio labdir2 labdir4 labdir5 letter ls.out my.sh nohup.out public shell sort.out suho.tar.gz unix.out who.out
multihp1:/data2/unix/unix10>touch 2342
multihp1:/data2/unix/unix10>touch DSFSD
multihp1:/data2/unix/unix10>echo [0-9]
[0-9]
multihp1:/data2/unix/unix10>echo [0-9]*
2342
multihp1:/data2/unix/unix10>echo [a-z]*
a aa aaa b.sh core cp.out err.out f3 f4 f5 ff1 ff2 find.out grep.out labdir labdir.cpio labdir2 labdir4 labdir5 letter ls.out mbox my.sh nohup.out public shell sort.out suho.tar.gz unix.out who.out
multihp1:/data2/unix/unix10>echo [A-Z]*
DSFSD
multihp1:/data2/unix/unix10>touch -- -a
multihp1:/data2/unix/unix10>touch -- -a
multihp1:/data2/unix/unix10>ls
-a b.sh f5 labdir.cpio mbox suho.tar.gz
2342 core ff1 labdir2 my.sh unix.out
DSFSD cp.out ff2 labdir4 nohup.out who.out
a err.out find.out labdir5 public
aa f3 grep.out letter shell
aaa f4 labdir ls.out sort.out
multihp1:/data2/unix/unix10>^C
multihp1:/data2/unix/unix10>rm -a
rm: 잘못된 선택항목 -- a
사용법: rm [-Rfir] file ...
multihp1:/data2/unix/unix10>rm -- -a
multihp1:/data2/unix/unix10>echo date
date
multihp1:/data2/unix/unix10>echo `date`
2011년11월24일 (목), 오전 10시48분13초
▶ `(역따옴표) 사용하기 -- 명령어 대체하기
multihp1:/data2/unix/unix10>echo `date`
2011년11월24일 (목), 오전 10시48분13초
multihp1:/data2/unix/unix10>^C
multihp1:/data2/unix/unix10>
multihp1:/data2/unix/unix10>
multihp1:/data2/unix/unix10>
multihp1:/data2/unix/unix10>
multihp1:/data2/unix/unix10>
multihp1:/data2/unix/unix10>
multihp1:/data2/unix/unix10>a=date
multihp1:/data2/unix/unix10>echo $a
date
multihp1:/data2/unix/unix10>a=`date`
multihp1:/data2/unix/unix10>echo $a
2011년11월24일 (목), 오전 10시48분59초
▶
multihp1:/data2/unix/unix10>ls | grep a.ksh
multihp1:/data2/unix/unix10>who | grep unix10
unix10 pts/tz 11월 24일 09:11
multihp1:/data2/unix/unix10>ls ; date ; cal
2342 core ff1 labdir2 my.sh unix.out
DSFSD cp.out ff2 labdir4 nohup.out who.out
a err.out find.out labdir5 public
aa f3 grep.out letter shell
aaa f4 labdir ls.out sort.out
b.sh f5 labdir.cpio mbox suho.tar.gz
2011년11월24일 (목), 오전 10시51분57초
November 2011
S M Tu W Th F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
> dfkdsfjklsdfjlsdfjksldflkewnklwer\
> sdfj;ldfkl;fd;asd;flk\
> sdfkdfl\
>
dkdsalfjkldsfjsldfdfkdsfjklsdfjlsdfjksldflkewnklwersdfj
'_____' 사이에 특수문자 모두 차단 단 자신(')은 차단 못함
" " 사이에 특수문자등 차단(단, $,$(), `` 등은 차단 못함)
multihp1:/data2/unix/unix10>a=100 200 300
ksh: 200: not found
multihp1:/data2/unix/unix10>
multihp1:/data2/unix/unix10>a=100\ 200\ 300
multihp1:/data2/unix/unix10>echo a
a
multihp1:/data2/unix/unix10>echo $a
100 200 300
multihp1:/data2/unix/unix10>b= 100 200 300
ksh: 100: not found
multihp1:/data2/unix/unix10>b='100 200 300'
multihp1:/data2/unix/unix10>echo $b
100 200 300
multihp1:/data2/unix/unix10>c=100 200 300
ksh: 1100: not found
multihp1:/data2/unix/unix10>c="100 200 300"
multihp1:/data2/unix/unix10>echo $c
100 200 300
multihp1:/data2/unix/unix10>echo don't
>
>
>
>
>
> '
dont
multihp1:/data2/unix/unix10>echo "don't"
don't
multihp1:/data2/unix/unix10>echo don\'t
don't
multihp1:/data2/unix/unix10>b=200
multihp1:/data2/unix/unix10>echo $a $b
100 200
multihp1:/data2/unix/unix10>echo '$a $b'
$a $b
multihp1:/data2/unix/unix10>echo "$a $b"
100 200
▶ 내장변수와 사용자 변수
multihp1:/data2/unix/unix10>set
CCOPTS=+DAportable
COLUMNS=80
EDITOR=vi
ERASE=^H
ERRNO=10
FCEDIT=/usr/bin/ed
HOME=/data2/unix/unix10
IFS=
LINENO=1
LINES=24
LOGNAME=unix10
MAIL=/var/mail/unix10
MAILCHECK=600
MANPATH=/usr/share/man/%L:/usr/share/man:/usr/contrib/man/%L:/usr/contrib/man:/usr/local/man/%L:/usr/local/man:/opt/mx/share/man:/opt/upgrade/share/man/%L:/opt/upgrade/share/man:/opt/pd/share/man/%L:/opt/pd/share/man:/opt/pd/share/man/%L:/opt/pd/share/man:/opt/pd/share/man/%L:/opt/pd/share/man:/opt/hparray/share/man/%L:/opt/hparray/share/man:/opt/graphics/common/man:/opt/openssl/man:/opt/openssl/prngd/man:/usr/dt/share/man:/opt/samba/man:/opt/gnome/man:/opt/wbem/share/man:/opt/ignite/share/man/%L:/opt/ignite/share/man:/opt/aCC/share/man/%L:/opt/aCC/share/man:/opt/audio/share/man:/opt/ansic/share/man/%L:/opt/ansic/share/man:/opt/langtools/share/man/%L:/opt/langtools/share/man:/opt/perf/man/%L:/opt/perf/man:/opt/image/share/man:/opt/imake/man:/opt/resmon/share/man/%L:/opt/resmon/share/man
NLS_LANG=American_America.KO16KSC5601
OLDPWD=/data2/unix/unix10/shell
OPTIND=1
ORACLE_BASE=/oracle
ORACLE_HOME=/oracle
ORACLE_OWNER=oracle
ORACLE_SID=ORA9
ORACLE_TERM=vt100
ORA_NLS33=/oracle/ocommon/nls/admin/data
PATH=/usr/bin:usr/sbin:.
PPID=18860
PS1=multihp1:$PWD>
PS2=>
PS3=#?
PS4=+
PWD=/data2/unix/unix10
RANDOM=32043
SECONDS=7144
SHELL=/usr/bin/ksh
SHLIB_PATH=/oracle/lib:/usr/lib:/usr/dt/lib
TERM=xterm
TMOUT=0
TNS_ADMIN=/oracle/network/admin
TZ=KST-9
_=/usr/bin/ksh _____________________ 여기를 기준으로 위에는 내장변수이고 아래는 사용자변수이다.
a=100
b=200
c=100 200 300
▶export는 환경변수로 셋팅해주는 것이다.
multihp1:/data2/unix/unix10>export b=200
multihp1:/data2/unix/unix10>echo $b
200
multihp1:/data2/unix/unix10>ksh
multihp1:/data2/unix/unix10>echo $b
200
multihp1:/data2/unix/unix10>ksh
multihp1:/data2/unix/unix10>echo $b
200
env --> 환경변수 보기
export --> 환경변수 보기
set --> 환경변수, 지역변수 모두 보기
▶ 쉘 환경변수
$HOME -> 사용자의 홈 디렉토리
$MAIL -> 사용자에게 오는 mail이 쌓이는 파일명
$PATH -> 임의의 명령어를 실행시킬 때 검색되는 디렉토리의 순서
$CDPATH -> cd 명령을 실행할 때
$PS1 -> 첫 번째 프롬프트의 문자열
$PS2 -> 두 번째 프롬프트의 문자열
$IFS -> 쉘의 내부 필드 분리자로 사용되는 문자 (default : 공백)
PS2=> ---> Secondary Prompt
PS3=#?
PS4=+ ----> Debugging Prompt
▶ Debugging을 할 때 사용할 수 있음
multihp1:/data2/unix/unix10>ksh -v b.sh
date
2011년11월24일 (목), 오전 11시42분26초
echo suho hi~~~
suho hi~~~
multihp1:/data2/unix/unix10>ksh -x b.sh
+ date
2011년11월24일 (목), 오전 11시43분17초
+ echo suho hi~~~
suho hi~~~
PS1='$PWD>' ---> OK
PS1="$PWD>" ---> 여기서 $와 >를 cutting
PS1=\$PWD\> ---> OK
▶ 변수 선언하고 선언한 변수 보기 여기서 $10의 경우는 $1과 0을 인식한 것이다. 그래서 ${}를 사용
multihp1:/data2/unix/unix10>set a b c d e f g h i j
multihp1:/data2/unix/unix10>echo $1
a
multihp1:/data2/unix/unix10>echo $2
b
multihp1:/data2/unix/unix10>echo $9
i
multihp1:/data2/unix/unix10>echo $10
a0
multihp1:/data2/unix/unix10>echo ${10}
j
multihp1:/data2/unix/unix10>echo $*
a b c d e f g h i j
multihp1:/data2/unix/unix10>echo $#
10
multihp1:/data2/unix/unix10>echo$0
ksh: echo-ksh: not found
multihp1:/data2/unix/unix10>echo $0
-ksh
multihp1:/data2/unix/unix10>echo $$
24562
multihp1:/data2/unix/unix10>ps
PID TTY TIME COMMAND
24876 pts/tY 0:00 ps
24561 pts/tY 0:00 telnetd
24562 pts/tY 0:00 ksh
multihp1:/data2/unix/unix10>ksh
multihp1:/data2/unix/unix10>ps
PID TTY TIME COMMAND
24561 pts/tY 0:00 telnetd
24562 pts/tY 0:00 ksh
24907 pts/tY 0:00 ksh
24910 pts/tY 0:00 ps
multihp1:/data2/unix/unix10>echo $$
24907
multihp1:/data2/unix/unix10>echo $$
24907
multihp1:/data2/unix/unix10>ksh
multihp1:/data2/unix/unix10>echo $$
24938
multihp1:/data2/unix/unix10>ksh
multihp1:/data2/unix/unix10>echo $$
24942
multihp1:/data2/unix/unix10>ps -f
UID PID PPID C STIME TTY TIME COMMAND
unix10 24946 24942 0 12:07:19 pts/tY 0:00 ps -f
root 24561 793 0 11:55:11 pts/tY 0:00 telnetd -b /etc/telnet_banner
unix10 24938 24907 0 12:07:01 pts/tY 0:00 ksh
unix10 24942 24938 0 12:07:12 pts/tY 0:00 ksh
unix10 24562 24561 0 11:55:11 pts/tY 0:00 -ksh
unix10 24907 24562 0 12:06:29 pts/tY 0:00 ksh
multihp1:/data2/unix/unix10>sleep 1000&
[1] 25134
multihp1:/data2/unix/unix10>echo $!
25134
▶ 참과 거짓에 대한 값을 반환 0(참), 0이외(거짓)
multihp1:/data2/unix/unix10>ls
2342 core ff1 labdir2 my.sh unix.out
DSFSD cp.out ff2 labdir4 nohup.out who.out
a err.out find.out labdir5 public
aa f3 grep.out letter shell
aaa f4 labdir ls.out sort.out
b.sh f5 labdir.cpio mbox suho.tar.gz
multihp1:/data2/unix/unix10>echo $?
0
multihp1:/data2/unix/unix10>echo $3
ksh: 3: parameter not set
multihp1:/data2/unix/unix10>echo $?
1
이 글은 스프링노트에서 작성되었습니다.
'04번. IT 힌트얻기 > ▶ UNIX' 카테고리의 다른 글
Unix-basic-10(shell) (0) | 2011.11.24 |
---|---|
Unix-basic-06 (1) | 2011.11.24 |
Unix-basic-08 (0) | 2011.11.24 |
Unix-basic-05 (0) | 2011.11.23 |
Unix-Basic-04 (0) | 2011.11.22 |