2008. 8. 8. 01:15

Chapter 7. Korn Shell Characteristic

Chapter 7.  Korn Shell Characteristic

_________________________________

 

 

Redirection

Pipe

Korn Shell Function

Variable

Korn Shell Metacharacter

History

Alias

Environment File

 

 

■ 커널의 기능

- 하드웨어 자원 관리

- Device 관리

- 메모리 , 가상메모리 관리

 

 

쉘의 기능(Shell Function)

- 명령어 해석기(Command Interpreter)

- 프로그램 할수 있는 언어(Programable Language)

 

 

(1). 방향 재지정(Redirection)

 

 

fd(파일 기술자, File Descriptor)

 

[EX] 프로그램에서의 File Descriptor

main()

{

    int fd;

    fd=open(......);

}

 

 

예약되어진 파일 기술자(File Descriptor)

---------------------------------------

번호  설 명

---------------------------------------

0    표준입력 stdin (Standard Input)

1    표준출력 stdout(Standard Ouput)

2    표준에러 stderr(Standard Error)

---------------------------------------

 

 

stdin(Keyboard)======> SHELL ========> stdout(Monitor)

                            |

                            |

                     stderr(Monitor)

 

         [그림] 표준입력, 표준출력, 표준에러

 

[EX] 표준출력, 표준에러의 예

# ls /var /nodir

 

 

[EX] 표준입력, 표준출력의 예

# cat

Hello    stdin

Hello    stdout

Solaris

Solaris

<Ctrl + D>

 

# cat <  /etc/passwd

# cat >  filename

Hello

Solaris

<Ctrl + D>

# cat filename

 

 

 

(1.1) 입력 재지정(Redirection stdin)

 

[FORMAT]  CMD   <   filename

          CMD  0<  filename

          CMD  <<  filename(X) => Here Documentation

 

# mailx  -s "Solaris TEST" root@example.com < mail.txt

 

[참고] mailx 명령어를 통한 메일 보내기

# mailx  root

Subject: Solaris TEST  <---- 메일 제목 입력("Solaris TEST")

test mail for user01  <---- 내용 입력

<ctrl+D>  or  .        <---- <Ctrl + D> 입력

#

 

 

 

(1.2) 출력 재지정(Redirection stdout)

 

[FORMAT]  CMD   >   filename

          CMD  1>   filename

           CMD  >>   filename

          CMD  1>>  filename

 

# ls -l > file.txt

# cat file.txt

 

[참고] '>>'(출력 리다이렉션)을 사용한 파일 내용 추가

 

----file1----

    1111

    2222

-------------

 

# echo 1111 > file1

# echo 2222 > file1

# cat file1

# echo 3333 >> file1

 

 

 

(1.3) 에러 재지정(Redirection stderr)

 

[FORMAT]  CMD  2>   filename

          CMD  2>>  filename

 

# ls /var /nodir > file.txt

 

Standard Output

Standard Error

 

# ls /var /nodir 2> file.txt

 

Standard Output

Standard Error

 

# ls /var /nodir > file1.txt 2>    file2.txt

 

Standard Output

Standard Error

 

# ls /var /nodir > file1.txt 2>&1    

// > 로 표준 출력을 file1.txt에 주고 2> 로 표준에러를 &1(표준출력) 로 리디렉션

 

[참고]  Redirection : CMD > filename

         PIPE        : CMD | CMD

 

# ls -l  1> 1

 

[참고] 터미널 출력이 있는 명령어 수행시

# cmd > file.log      (X)

# cmd > file.log 2>&1 (0)

 

[참고] CMD 2>/dev/null

일반사용자 전체 시스템의 파일과 디렉토리 목록중에 core 파일을 찾을려고 할때 검색할려고

하는 내용보다 권한이 되지 않아서 'Permission Denied' 에러 메세지가 더 많이 출력되는 경

우가 존재할 수 있다. 이런 경우 명령어의 마지막에 '2>/dev/null'을 붙여서 에러메세지는

보지 않고 정상적인 출력 결과만 보는 경우가 있다.

 

$ find / -name core -type f 2>/dev/null

 

 

[참고] confiugre --prefix=/usr/local/apache 2> apache.log

# ./configure --prefix=/usr/local/apache 2> apache.log

# ./configure --prefix=/usr/local/apache > apache.log 2>&1

 

 

 


(2). pipe

앞의 CMD의 출력 결과가 뒤의 CMD 입력값으로 들어간다.

 

[FORMAT] CMD  |    CMD

            -------

            -------

           Kernel Buffer

 

 

# ls -l | grep Error (X)

 

 

# ls -l > file.txt

# grep Error file.txt

 

ls -l          grep Error file.txt

      file.txt

 

# ls -l | grep Error

    ----------

    ----------

   Kernel Buffer

 

 

[EX] pipe 활용 예

# ps -ef | more          (# CMD | more) 한페이지가 넘는 페이지 출력 방법 지정

# ps -ef | grep   inetd  (# CMD | grep inetd) 앞단의 명령어의 출력 결과 중 패턴 검색

 

 

[참고] tee 명령어

 

# ps -ef | grep inetd > file.log

      -------             A

              ------------+

       -------

# ps -ef | grep inetd | tee file.log

 

                ----------           

                ---+ +----          

                    | |

                  file.log

 

EX) tee 명령어 실습

CMD > file.log

CMD | tee file.log

# cal 2002 > file1.log

# cal 2002 | tee file2.log

 

tee 입력값을 화면과 파일에 동시에 출력 시켜줌

 


(3) 콘셀의 기능(Korn Shell Function)

 

# set -o

....

ignoreeof         off

....

markdirs off

....

noclobber         off

....

vi                on

....

 

# set -o vi

# set +o vi

 

 

 

(3.1) 파일 덮어쓰기 방지 기능

 

set -o noclobber

 

# set -o noclobber

# set -o | grep noclobber

# echo 1111 > file1

# echo 2222 > file1

ksh: file1: file already exists    <----- 메세지 확인

 

[참고] CMD >| file1

# echo 3333 >| file1

 

 

(3.2) 파일 이름 자동 완성 기능 & 명령행 편집

 

Filename Completion & Command Line Edit

set -o vi

set -o emacs

# set -o vi

# export EDITOR=vi

# export VISUAL=vi

 

 

(a). 명령행 편집(Command Line Edit)

k (pre-CMD)

j (back-CMD)

h(<-), l(->)

w, b, dd, d$, d0

 

[EX] Command Line Edit

# find / -name core -type f

<Ctrl + C>

# <ESC><K>

# find / -name file1 -type f

 

 

(b). 파일 이름 자동 완성 기능(Filename Completion)

(실습 준비)

# cd /test

# rm -r *

# mkdir dirname1

# touch file.log

 

(자동 완성 기능 실습)

# cd dir<ESC><\>

 

# cd /test

# mkdir dir2

# cd dir<ESC><\>

<ESC><=>

1) dir2/

2) dirname1/

# cd dirn<a><ESC><\>

 

[참고] 와일드 카드(Wild Card)

# cd dirn*

dirname1

dir1

 

[참고] Copy & Paste

(1). Select, Drag & Drop

(2). Mouse Right Button Click & Edit Menu Selection

(3). Ctrl + Insert, Shift + Insert

 

 

 

 

 

[정리] 긴 이름을 가진 파일/디렉토리 다루기

(a). 파일이름자동 완성 기능 사용

(b). 와일드 카드 사용

(c). 복사 & 붙이기

 

 

 

 

 

(3.3) 로그 아웃 방지 기능

 

set -o ignoreeof

 

EOF(End Of File)의 의미를 갖는 <Ctrl + D>가 존재한다.

 

<Ctrl + D>의 의미는?

(a). 파일의 끝을 알려 주는 기능

(b). 현재 프로그램 종료()의 기능

갖는다.

 


(a). 파일의 끝 의미를 갖는 <Ctrl + D>

# mailx root

> Subject : TEST

hello

<Ctrl + D>

 

(b). 현재 프로그램() 종료의 의미를 갖는 <Ctrl + D>

# telnet 172.16.8.254

root 사용자로 로그인

# <Ctrl + D> => 로그아웃된다.

 

# telnet 172.16.8.254

root 사용자로 로그인

# set -o ignoreeof

# <Ctrl + D> => 로그아웃 되지 않는다.

# exit

 

 

 

(4) 변수(Variable)

- 지역 변수(Local Variable)

- 환경 변수(Global Variable, Environment Variable)

- 특수 변수(Special Variable)

// 지역변수와 환경변수의 차이는 export 되었는지에 따라 다르다.

 

(4.1) 변수 선언(Variable Define)

 

sh ------> ksh ------> zsh ------> bash

 

(본쉘 스타일)

(a). 변수를 선언하는 방법

# VAR=5    (변수의 값으로는 숫자나 문자 구별하지 않는다.)

# VAR=hello

# export VAR

 

(b). 변수의 내용을 확인하는 방법

# echo $VAR

 

(c). 변수의 내용을 초기화 하는 방법

# unset VAR

 

(콘쉘 스타일)

(a). 변수를 선언하는 방법

# export VAR=hello

 

(b). 변수의 내용을 확인하는 방법

# print $VAR

 

(c). 변수의 내용을 초기화 하는 방법

# unset VAR

 

 

[EX] 변수 선언 테스트

# VAR=hello

# echo $VAR

# unset  VAR

# echo $VAR

 

 

 

(4.2) export의 의미

# ps

   PID TTY      TIME CMD

   408 pts/3    0:00 ksh

 

# VAR1=5

# VAR2=10

# export VAR2

 

# ksh

# ps

   PID TTY      TIME CMD

   408 pts/3    0:00 ksh

   994 pts/3    0:00 ksh

 

# echo $VAR1

# echo $VAR2

 

# exit

# echo $VAR1

# echo $VAR2

 

 

VAR1=5,  VAR2=10

-----------------+                      +-----------------

                |                   |

                | VAR1=?, VAR2=?    |

                +-------------------+

 

 

 

(4.3) EDITOR, VISUAL

기본적인 편집기를 선언할 때 사용.

 

# EDITOR=vi

# EDITOR=/usr/bin/vi

# export EDITOR

or

# VISUAL=vi

# VISUAL=/usr/bin/vi

# export VISUAL

or

# set -o vi

 

[참고] 기본적인 편집기 선언

OS(썬 개발 프로그램)   : Default Editor (set -o vi)

Oracle DB              : EDITOR

 

 

[참고] set / env

set   : 모든 변수(지역변수 + 환경변수)

env   : 환경변수

 

# VAR1=ITBANK   => 지역변수

# VAR2=SOLARIS  => 환경변수

# export VAR2

 

# set | grep VAR1 (0)

VAR1=ITBANK

# set | grep VAR2 (0)

VAR2=SOLARIS

 

# env | grep VAR1 (X)

# env | grep VAR2 (0)

VAR2=SOLARIS

 

0: View

X: Not View

 

 

 

(4.4) PS1

쉘 프롬프트를 정의할 때 사용하는 변수

 

- root 사용자의 쉘프롬프트 : #

- 일반 사용자의 쉘프롬프트 : $

 

# PS1=[solarisXXX]#

# export PS1

 

# PS1='$PWD> '

# PS1='[$PWD]# '

# export PS1

 

[참고] Bash Shell에서의 PS1 정의 방법

쉘프롬프트: [solaris254@root:/]#

(ksh ) # PS1=[`hostname`@$LOGNAME:'$PWD]# '// 명령어+자신의이름+현재폴더

(bash) # PS1='[\h@\u:\w]$$'

 

 

(4.5) PATH

명령어 검색 위치 지정 변수

 

# PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/dt/bin:/usr/ccs/bin:/usr/openwin/bin:/usr/ucb

# export PATH

 

EX) ls 명령어 수행

# ls -l

# /usr/bin/ls -l

# cd /usr/bin

# ./ls -l

 

 

[참고] 스크립트 디렉토리

/root/bin, /root/shell : 스크립트 디렉토리

# PATH=$PATH:/root/shell

# export PATH

# script.sh

 

 

[참고] 명령어 실행시 에러 메시지

# cmd

......

ksh: command: not found

......

# find / -name cmd -type f

- 1> 명령어가 없는 경우(-> 명령어 설치)

- 2> PATH 변수에 명령어의 경로가 정의가 않은 경우(-> PATH 변수에 경로 추가)

 

EX) ethereal & printmgr

# ethereal (ksh : ethereal: not found) => 프로그램이 설치 안된 경우

# printmgr (ksh : printmgr: not found) => PATH 변수에 경로가 추가 되지 않은 경우

 

 

 

(4.6) MANPATH

매뉴얼 페이지 검색 경로를 지정할 때 사용

 

# MANPATH=/usr/man:/usr/dt/man:/usr/local/man

# export MANPATH

 

# man ls

(매뉴얼 페이지가 보인다.)

# echo $MANPATH

......:/usr/man:...... (/usr/man ---> /usr/share/man)

 

 

[참고] 매뉴얼 페이지 디렉토리 확인

# cd /usr/share/man

# ls

 

 

 

(4.7) LD_LIBRARY_PATH

라이브러리의 경로를 검색할때 사용하는 변수

 

# LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/usr/local/lib

# export LD_LIBRARY_PATH

 

라이브러리

- 동적 라이브러리(Dynamic Lib.)    : XXXXXX.so

- 정적 라이브러리(Static Lib.)     : XXXXXX.a

 

EX) ls 명령어의 동적 라이브러리 확인

# ldd /usr/bin/ls

         libc.so.1  =>    ?

         libdl.so.1 =>    /usr/lib/libdl.so.1

         /usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1

......

ld.so.1: gs: fatal error: libpng.so.2 : open fail : no such file or directory

......

 

# find / -name "libpng.so.2" -type f 2>/dev/null

- libpng.so.2 라이브러리를 찾은 경우

- libpng.so.2 라이브러리를 찾을 수 없는 경우

 

(a). 라이브러리 파일을 찾은 경우

# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

 

(b). 라이브러리 파일을 못 찾은 경우

http://docs.sun.com -> 검색창 -> "libpng.so.2"-> SUNWxxx

http://www.sunfreeware.com

# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

 

 

[참고] 솔라리스 패키지 설치시 고려해야 하는 변수

패키지(Package)

-----------------------

Binary Command(Daemon)  => /usr/local/bin

Configuration File

Library                 => /usr/local/lib

Manual                  => /usr/local/man

Documentation

-----------------------

- PATH

- MANPATH

- LD_LIBRARY_PATH

 

 

 

(4.8) 기타 환경 변수

HOME / PWD / LOGNAME

# echo $HOME

/

# echo $PWD

/test

# echo $LOGNAME

root

 

EX) $HOME의 활용

# cd

# cd $HOME

 

 

 

(4.9) 특수 변수(Special Variable)

- $ : 현재 쉘의 PID 번호를 저장하고 있다.

- ? : 바로 이전 명령어의 정상 실행 여부에 대한 결과 값이 들어 있다.

- ! : 바로 이전 백그라운드 프로세스에 대한 PID 번호를 저장하고 있다.

- 인자변수($0, $1, $2, ....)

 

# echo $$

450

# ps

 

# cal

# echo $?

 

# ls /nodir

# echo $?

 

# sleep 200 &

[1] 450

# echo $!

 

 

[참고] Login Variables

---------------------------------------------------------------

변수이름   선언주체         설명

---------------------------------------------------------------

LOGNAME    login            사용자 로그인 이름 정의

HOME       login            사용자의 홈디렉토리 정의

SHELL      login            사용자의 기본 쉘 정의

PATH       login            사용자의 명령어 검색 경로 정의

MAIL       login            사용자의 mailbox 경로 정의

TERM       login            사용자의 사용 터미널 정의

LPDEST     기본 선언 아님   기본 프린터 정의

PWD        shell            현재 작업 디렉토리 정의

PS1        shell            쉘 프롬프트 정의(sh, ksh)

prompt     shell            쉘 프롬프트 정의(csh)

---------------------------------------------------------------

 

 

 

 

 

[정리] 변수(Variable)

 

- 변수 선언 방법(Variable Definition)

- export 의미?

- 쉘 환경 변수(Shell Environment Variable)

         EDITOR, PATH, MANPATH, LD_LIBRARY_PATH

 

- 지역변수(Locale Variable)

- 환경변수(PATH, MANPATH, LD_LIBRARY_PATH, etc)

- 특수변수(Special Variable)

         $$, $?, $!

 

 

 

 

 

 

 

(5) Korn Shell Metacharater

 

- ' ' :  작은 따옴표(single quote)

- " " :  큰 따옴표(double quote, $, ` `, \)

- ` ` :  역 따옴표(back quote)

- \   :  역 슬래쉬(back slash)

- ;   :  세미콘론(semicolon)

 

[EX] 작은 따옴표 실습(single quote)

// 작은 따옴표는 안에 들어 있는 모든 것들의 쉘 해석을 막는다. 특별한 의미가 없이 그냥 하나의 문자로 인식이 된다. 문자는 공백을 포함한다.

# echo $HOME

# echo '$HOME'

 

[EX] 큰 따옴표 실습(double quote)

// 큰 따옴표는 작은 따옴표와 같은 동작을 하지만 $ , ``, \ 문자의 해석은 제외한다.

# echo "$HOME"

# echo "$HOME is my   directory."

 

[EX] 역 따옴표 실습(back quote)

// 쉘은 역따옴표 안에 있는 것을 명령어로 생각 하고 실행하게 된다.

 

# hostname

# echo `hostname`

# echo `date`

# echo "`hostname` is my hostname.!!!"

# echo "$(hostname) is my hostname.!!!"

 

[EX] 역 슬래쉬 실습(back slash)

// 쉘은 역 슬래쉬 뒤에 오는 것의 의미를 제한하도록 한다.

# echo $HOME

# echo \$HOME

# echo "\$HOME is my directory"

 

# find / -name core -type f -exec rm {}     \;

# find / -name core -type f -exec rm {}     ';'

 

(참고) \

-> `명령어` : 명령어 실행 결과 출력 표시

-> 명령어 \ : 명령어가 아직 끝나지 않음을 표시

         # ls -l

         # ls \

         > -l

 

[EX] 세미콜론 테스트(semicolon)

excution mutliple command a line

 

# date ; cal ; ls -l

# date

# cal

# ls -l

 

 

 

(6) history

 

 

|        | STACK

|        |

|        |

+--------+

 

# history

# history -r (reverse)

# history -n (not number)

# history -5

 

[참고] 히스토리 참고 파일 및 변수

~/.sh_history 히스토리 내용을 지속적으로 저장하는 파일

HISTSIZE    히스토리를 기록하는 Stack의 크기를 지정하는 파일

HISTFILE    히스토리 내용을 지속적으로 저장하는 파일 이름 지정

 

[EX] HISTSIZE, HISTFILE 변수 지정

# HISTSIZE=128 ; export HISTSIZE

# HISTFILE=~/.sh_history ; export HISTFILE

 

     HISTSIZE

           If this variable is set when  the  shell  is  invoked,

          then  the  number  of previously entered commands that

           are accessible by this shell will be greater  than  or

          equal to this number.  The default is 128.

 

     HISTFILE

           If this variable is set when  the  shell  is  invoked,

          then  the  value is the pathname of the file that will

           be used to store the  command  history.  (See  Command

          re-entry below.)

 

 

[참고] r (re-excution)

# history

# r

# r 450

# r vi

# r etc=var 450          ( 450 # vi /etc/dir1/dir2/dir3/filename)

 

 

 

(7) alias

 

선언 방법       # alias    cp='cp -i'

 

선언 확인 방법  # alias

                # alias    cp

 

선언 해제 방법  # unalias cp

 

 

[참고] unalias & Backslash

# \rm -r dir1

 

EX) \rm -r dir1 실습

# cd /test

# mkdir dir1

# cd dir1

# touch file1 file2 file3 file4

# cd ..

# alias rm='rm -i'

# rm -r dir1

rm: examine files in directory dir1 (y/n)? <Ctrl + C>  <----- '<Ctrl + C> 입력

# \rm -r dir1

 

(참고) rm -f (force)

# rm -rf dir1 (일부 유닉스)

 

 

 

 

[정리] 콘쉘의 특징

- Redirection

- Pipe

- Korn Shell Function

- Variable

- Metacharacter

- history

- alias




(8) 환경 파일

 

사용자 로그인시   적용되는 환경파일

 

/etc/profile : 전체 사용자 환경 설정 파일

~/.dtprofile : CDE 환경 사용자 환경 설정 파일 (DTSROUCEPROFILE=true)

~/.profile   : 개인 사용자 환경 설정 파일  (ENV=/.kshrc)

~/.kshrc     : 개인 사용자 환경 설정 파일

 

 

사용자가 CDE 환경으로 로그인하게 되는 경우

/etc/profile

~/.dtprofile

~/.profile

~/.kshrc

파일들이 읽혀 진다. 

 

사용자가 Command Line Login을 하는 경우

/etc/profile

 

~/.profile

~/.kshrc

파일들이 읽혀 진다.

 

/etc/profile ~/.dtprofile, ~/.profile은 로그인시에 한번 읽혀 지고, ~/.kshrc 파일은 콘

쉘이 실행될때 마다 실행이 된다.

 

 

(8.1) /etc/profile

* ~/.profile ~/.kshrc        파일에 정의 될수 있는 모든것들에 대해 정의 가능

* 시스템의 모든 사용자에게 적용할 것에 대한 정의

 

 

(8.2) ~/.profile

* 변수 선언

- PATH

- ENV

- EDITOR

- 기타

 

 

(8.3) ~/.kshrc

* 특정 변수 선언(PS1)

* set -o 설정

* alias  설정

 

 

[참고] 솔라리스 기본 환경 파일 해석

/etc/profile

~/.profile   (-> ENV_main.sh)

~/.kshrc     (-> ENV_main.sh)

 

 

(a). /etc/profile 파일의 해석

 

---------------- /etc/profile 해석-------------------------------

trap ""  2 3 -----> /etc/profile 파일을 실행하는 동안(로그인시) 2번 시그널,

                    3번 시그널을 받아도 종료하지 않는다.

export LOGNAME PATH

-----> 변수 export(/usr/bin/login)

 

if [ "$TERM" = "" ]      -----> $TERM 변수가 선언 안되어 있으면

then

        if /bin/i386     -----> i386(32bits) 일반운영체제

        then

                TERM=sun-color

        else

                TERM=sun

        fi

        export TERM

fi

 

#       Login and -su shells get /etc/profile services.

#       -rsh is given its environment in its .profile.

 

case "$0" in               -----> -ksh /etc/profile

-sh | -ksh | -jsh | -bash)          A

                                    +----- $0

        if [ ! -f .hushlogin ] -----> ~/.hushlogin 파일이 존재하지 않으면    

        then

                /usr/sbin/quota -----> Quota 실행

                #       Allow the user to break the Message-Of-The-Day only.

                trap "trap '' 2"  2

                /bin/cat -s /etc/motd  -----> 로그인시 /etc/motd 내용 출력

                trap "" 2

 

                /bin/mail -E    -----> 새로운 메일이 존재 하면

                case $? in

                0)

                        echo "You have new mail."

                        ;;

                2)

                        echo "You have mail."

                        ;;

                esac

        fi

esac

 

umask 022    -----> UMASK 설정

trap  2 3

--------------------------------------------------------------------

(b). ~/.profile 해석

 

------------------------ ~/.profile 해석 ----------------------------

# (1). stty erase ^H

stty erase ^H    # <Backspace>

# stty erase ^?  # <Delete>

 

-----> Set Terminal Type

         # tty

         # stty

         # stty -a

         ..... erase = ^h .....

         # stty erase <DELETE>

 

# (2). ENV Variable

ENV=~/.kshrc

-----> 추가적인 환경 파일 정의

 

 

# (3). EDITOR Variable

EDITOR=/usr/bin/vi

-----> 기본적인 편집기 선언 변수

 

 

# (4). PATH Variable

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/ucb

PATH=$PATH:/usr/dt/bin:/usr/ccs/bin:/usr/openwin/bin

PATH=$PATH:/usr/lib/netsvc/yp:/usr/apache/bin

PATH=/usr/sfw/bin:/usr/sfw/sbin:/usr/local/sbin:/usr/local/bin:$PATH

PATH=/usr/local/ssl/bin:$PATH

-----> 명령어의 실행 위치 정의 변수

 

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/ucb\

:/usr/dt/bin:/usr/ccs/bin:/usr/openwin/bin\

:/usr/lib/netsvc/yp:/usr/apache/bin\

:/usr/sfw/bin:/usr/sfw/sbin:/usr/local/sbin:/usr/local/bin\

:/usr/local/ssl/bin

 

 

# (5). MANPATH Variable

MANPATH=/usr/share/man:/usr/man:/usr/openwin/share/man

MANPATH=/usr/sfw/share/man:/usr/local/man:/usr/local/ssl/man:$MANPATH

 

 

# (6) LD_LIBRARY_PATH Variable

LD_LIBRARY_PATH=/usr/lib:/usr/secure/lib:/usr/local/lib

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib:/usr/sfw/lib

 

 

export ENV EDITOR PATH MANPATH LD_LIBRARY_PATH

---------------------------------------------------------------------------

 

 


(c). ~/.kshrc 파일의 해석

 

------------------------ ~/.kshrc 파일 해석 -------------------------------

# (1). set -o

set -o vi

set -o trackall  -----> Tracked Alias // 사용된 명령어를 PATH를 뒤지지 않고 기억하고 있다 (빠른검색)

# set -o ignoreeof

# set -o noclobber

 

 

# (2). PS1 Variable

-----> 쉘 프롬프트 정의 변수

# PS1=[$LOGNAME@`hostname`:'$PWD]# '            # EX) [root@solaris254:/]#

# PS1=[`hostname`@'$PWD]# '                     # EX) [solaris254@/]#

# PS1='$PWD'"[`hostname`]# "                    # EX) /etc[sun02]#

# PS1='$PWD> '                                  # EX) /etc>

PS1=['$PWD]# '                                  # EX) [/]#

export PS1

 

 

# (3). alias

# (a). 기본적인 alias

alias c='clear'

alias h='history'

alias cp='cp -i'

alias mv='mv -i'

alias rm='rm -i'

alias ls='ls -hF'

alias llt='ls -aihlF'

alias ll='ls -ailhF | more'

 

# (b). 필요한 경우 선언하는 alias

alias lsf='ls -al | grep ^-'

alias lsd='ls -al | grep ^d'

alias dir='ls -ailhF | more'   -----> 윈도우즈 명령어 실행 alias

alias ipconfig='ifconfig -a'   -----> 윈도우즈 명령어 실행 alias

 

#alias cat='cat -n'

alias df='df -h'

alias nslookup='/usr/sbin/nslookup'

 

# (c). 편리한 기능의 alias

/*

         Webserver(Apache)

         /etc/apache/httpd.conf -----> Configuration File

         /var/apache/htdocs     -----> Source Directory

         /var/apache/logs       -----> Log Directory

         설정 파일을 빨리 편집하도록 하는 기능

*/

alias fconfig='vi /etc/ftpd/ftpaccess'

alias hconfig='vi /etc/apache/httpd.conf'

# 소스디렉토리 이동

alias hdir='cd /var/apache/htdocs'

# 로그파일 모니터링

alias mlog='tail -f /var/adm/messages'

alias slog='tail -f /var/adm/sulog'

alias sslog='tail -f /var/log/syslog'

 

 

# (4). Function

-----> alias pps='ps -ef | head -1 ; ps -ef | grep $1' 같은 기능 제공

pps () {

    if [ $# -ne 1 ] ; then

        echo Usage : $0 Process

    fi

    /usr/bin/ps -elf | head -1

    /usr/bin/ps -elf | grep $1 | grep -v grep

}

 

ppss () {

    if [ $# -ne 1 ] ; then

        echo Usage : $0 Process

    fi

    /usr/ucb/ps -aux | head -1

    /usr/ucb/ps -aux | grep $1 | grep -v grep

}

 

-------------------------------------------------------------------------

 

 

 

 

 

(8.4) 쉘별 환경 파일(sh/ksh/csh User Initialization File)

_______________________________________________________________________________

 

Shell   User           Description

        Initialization

        File

_______________________________________________________________________________

 

sh      /etc/profile    Defines system wild environment at login

        $HOME/.profile  Defines user's environment at login

 

csh     /etc/.login     Defines system wild environment at login

        $HOME/.cshrc    Defines user's environment for all C shells

                        invoked after login shell

        $HOME/.login    Defines user's environment at login

 

ksh     /etc/profile    Defines system wild environment at login

        $HOME/.profile  Defines user's environment at login

        $HOME/$ENV      Defines user's environment at login in the file

                        specified by the Korn shell's ENV environment variable

_______________________________________________________________________________

 

 


[참고] 배쉬쉘 환경 파일(Bash Shell User Initialization Files)

/etc/profile        전체 사용자 환경 파일

~/.bash_profile      사용자 개인 환경 파일

~/.bashrc            사용자 개인 환경 파일

 

 

 

(8.5) 사용자 기본 환경 파일(Default User Initialization Files)

 

/etc/skel (skelton)

_________________________________________

 

Shell           Default File

_________________________________________

 

csh            /etc/skel/local.login

                /etc/skel/local.cshrc

ksh            /etc/skel/local.profile

_________________________________________

 

 

 

[EX] /etc/skel 디렉토리

# useradd -m -d /export/home/user03 -s /bin/ksh user03

# passwd user03

 

# ls -al /export/home/user03

# ls -al /etc/skel

 

# cat > /etc/skel/.exrc

set showmode

set number

<Ctrl + D>

 

# useradd -m -d /export/home/user04 -s /bin/ksh user04

# passwd user04

 

# ls -al /export/home/user04

# ls -al /etc/skel

 

 

 

[참고] 관리자가 사용자의 환경 초기화하는 방법

- /etc/profile 사용하는 방법

- /etc/skel 사용하는 방법

 

 

 


(8.6) 사용자 변수 선언(User Variable Definition)

 

사용자 변수 선언시 sh 계열과 csh 계열은 차이점이 존재한다.

 

(a). csh 계열(csh/tcsh style)

 

변수 선언 방법    # setenv VAR 5

 

변수 확인 방법    # echo $VAR

 

변수 해제 방법    # unset VAR

 

 

 

(b). sh 계열(sh/ksh/zsh/bash style)

 

변수 선언 방법    # VAR=5

                  # export VAR

 

변수 확인 방법    # echo $VAR

 

변수 해제 방법    # unset VAR