쉘 프로그램의 종류

Jop Tip 2006. 12. 14. 15:26

http://blog.naver.com/sultankarma?Redirect=Log&logNo=130008568668

| 유닉스/리눅스

2006/09/08 15:00
http://blog.naver.com/sultankarma/130008568668

현재 사용되고 있는 쉘 프로그램의 종류는

본쉘 콘쉘 씨쉘이 있다

이들 쉘은 유닉스 시스템의 사용을 더 편리하게 해주는 공통적인 핵심 연산 부분(커널)을 공유한다.

최초의 쉘은 본쉘이다. 모든 유닉스 시스템은 본쉘 혹은 그와 호환되는 쉘을 포함하고 있다. 본쉘은 입출력을 제어하기 위한 많은 좋은 특징들을 가지고 있지만 사용자와의 대화적인 목적을 위해서는 적합하지 않다.

그래서 나온 쉘이 씨쉘이다.

씨쉘은 씨언어 형태의 문법을 사용하는데 입출력하는데는 오히려 어색하지만 개선된 작업제어를 제공해준다. 따라서 초기에는 많은 유닉스 개발자들에게 선호되어 왔으나 콘쉘으 더욱 강력한 명령어 편집기로 인하여

콘쉘로 전향하는 경향도 없지 않다.

쉘의 핵심적인 기능

----내장명령어

----스크립트

----변수----환경

----지역

----리다이렉션

----대표문자

----파이프

----명령열----조건부

----무조건부

----서브쉘

----후면처리

----명령어 치환

씨쉘은 대화형 작업에서는 본쉘보다 좋지만 스크립트 프로그래밍 관점에서는 다소 나쁘다. 콘쉘은 본쉘의 상위버전이며 씨쉘과 본쉘의 가장 좋은 특성들을 결합하고 있다.

시스템에 처음 로그인하면 미리 정해진 디폴트 쉘이 동작한다. 이것은 시스템 관리자가 사용자의 계정을 부여할 때 미리 정해준 쉘이다. 쉘이 시작되면서 관련된 셋업파일을 수행한다. 이 파일에는 환경변수 설정이나 명령의 탐색 경로 등을 설정하는 명령들을 포함할 수 있다.

본쉘의 디폴트 프롬프트는 $ (루트 사용자의 경우 #)

씨쉘의 ,, %

커널은 프로그램과 사용자에 의해서 요구되는 서비스를 제공하는

알고리즘과 자료구조의 모음이다.

유닉스 커널이 제공하는 서비스는

* 프로세스관리

* 장치관리

*파일관리

* 보호와 보안

사용자가 명령을 실행하기 위해서는

사용자가 어느 명령을 실행하고자 하는지 알아낸다 -->>

디스크 상에서 실행 가능한 명령어의 위치를 찾아낸다 -->>

명령을 실행하기 위해 프로세스를 생성한다.

쉘은 단지 또 다른 명령어일 뿐이다. 그러나 그 목적은 위의 단계들을 수행하는 것이다.

사용자가 쉘을 호출하면 쉘은 미리 정해진 순서대로 작업을 진행한다

1. 몇가지 초기화 정보를 포함하고 있는 특정한 시동파일을 읽어 들여 수행하게 된다. 이 파일은 일반적으로 사용자의 홈 디렉토리에 있다.

2. 프롬프트를 표시하고 사용자의 입력을 기다린다

3. 만일 사용자가 명령줄에서 ^D 를 입력하면 쉘은 이를 입력의 끝으로 해석하여 쉘을 종료시킨다. 그렇지 않고 사용자가 어떤 명령을 입력하였다면 쉘은 그 명령을 수행하고 다시 2로 돌아간다.

(만일 터미널에서 사용자가 명령을 입력할 때 한 줄에 다 입력을 못하면

명령어 끝에 \를 붙이고 다음줄에 계속해서 입력하면 된다)

여러개의 명령을 한 번에 지정하려면

date; pwd; ls

서브쉘

사용자가 로그인할 때 유닉스는 로그인 쉘을 제공한다. 기본적인 단순한 명령들은 로그인 쉘에 의해 수행된다. 그러나 쉘(부모쉘)이 어떤 작업을 수행하가 위해서는 다음과 같은 여러 환경에서 자식쉘(서브쉘)을 생성하여 수행한다.

(ls; pwd; date)의 형식과 같이 한 그룹의 명령이 수행될 때는 부모 쉘에서

명령을 수행할 자식 쉘을 생성한다. 만일 명령이 후면에서 처리되지 않는다면 부모 쉘은 자식 쉘이 그 명령을 종료할 때까지 기다린다.

쉘스크립트이 경우 스크립트 내의 명령들을 수행하기 위해 부모쉘은 자식 쉘을 생성한다. 만일 명령이 후면에서 처리되지 않는다면 부모쉘은 자식쉘이 그 명령을 종료할 때까지 기다린다.

후면 작업이 수행될때 부모 쉘은 후면에서 명령을 수행할 자식쉘을 생성한다. 이 경우 부모 쉘은 자식 쉘의 종료를 기다리지 않고 자식 쉘과 병행하여 수행된다.

secom% pwd
/home/studentk/k200108??
secom% (cd /; pwd)
/
secom% pwd
/home/studentk/k200108??

후면 처리

명령 줄에서 명령의 끝에 &문자를 붙이면 그 명령은 후면에서 수행된다.

이것은 곧 그 작업이 서브 쉘에서 수행됨을 의미하고 부모쉘과 병행하여 수행된다. 또한 후면에서 수행되고 있는 프로세스는 키보드를 차지하지 않느다. 따라서 시간이 오래 걸리는 작업을 후면처리 해놓고 부모쉘에서는 다른 작업을 수행한다면 효율적인 작업을 수행할 수 있을 것이다.

find 명령은 지정된 위치의 파일을 찾아주는 명령으로 만일 전체 파일 시스템에서 그 파일을 찾도록 한다면 시간이 오래 걸릴 수 있다.

find / -name "a.c" -print &

pwd

~~~~~~~~~~

date

~~~~~~~~~~

공백문자는 인자들을 구분 짓기 위해 사용하며 여러개의 공백문자는 무시된다.

secom% echo hello what the hell
hello what the hell

만약 공백을 그대로 유지하고 싶다면

echo 'hello what the hell'

이렇게 입력하면 된다. 여기서는 echo 명령은 4개의 분리된 인자가 아니라

하나의 인자를 받아들이는 셈이 된다.

유닉스의 와일드카드

* 0개 혹은 하나 이상의 문자와 매치

? 한 문자와 매치

[] [와 ]사이의 한 문자와 매치

시동파일

몇몇 명령이나 유틸리티는 사용자의 홈 디렉토리에 있는 구성 파일을 사용자의 입맛에 맞게 조정하여 사용할 수 있다. 일반적으로 시동파일은 점으로 시작하여 rc(run command)로 끝나는 파일 이름을 갖는다.

유닉스에서는 점으로 숨겨진 파일이 있는데 이것을 히든파일이라 하고

ls -a 옵션으로 볼 수 있다.

csh

.login 터미널의 유형 설정. 환경변수 설정, biff와 mesg 스위치 설정

.cshrc 알리아스 설정

명령의 탐색을 위한 패스 설정

접근 권한 제한을 위한 umask값 설정

파일명 탐색을 위한 cdpath 설정

변수 prompt, history, savehist 를 설정

.logout "다음에 해야 할 일" 등을 프린트 한다

화면을 깨끗이 지운다

sh

.profile 씨쉘의 .login과 .cshrc와 유사하다

vi

.exrc vi 편집기의 옵션을 설정

mail

.mailrc 사용자의 메일 별명을 정의한다.

메일 리더의 인자를 설정한다

쉘은 많은 내장 명령들을 포함하고 있다. 내장된 명령들은 쉘에서 직접 수행되며, 실행하기 위해 다른 프로그램을 호출할 필요가 없다.

본쉘

case

cd

echo

eval

exec

export

for

if

pwd

read

set

test

trap

umask

unset

wait

while

씨쉘

alias

bg

echo

eval

exec

exit

fg

foreach

glob

history

if

jobs

kill

limit

logout

nice

nohup

popd

pushd

rehash

repeat

set

setenv

source

stop

switch

umask

unalias

unset

unsetenv

wait

while

환경변수

쉘은 두 종류의 변수인 지역변수와 환경변수를 지원한다. 사용자는 환경변수와 지역변수 모두를 사용할 수 있다.

차이점; 한 쉘이 다른 쉘(자식쉘)을 호출할 때 그 자식 쉘은 그 부모 쉘의 환경변수 복사본을 얻을 수 있지만, 지역변수는 그 복사본을 얻을 수 없다.

따라서 환경변수는 부모 쉘과 자식쉘 사이에 유용한 정보를 전달하는데 사용된다.

환경변수는 사용자의 로그인 쉘에 의하여 설정되며, 쉘은 부모쉘이 환경을 그대로 상속받는다. 지역변수는 오로지 자신의 쉘에 의해서만 사용되며 다른 프로세스에 의해 사용될 수 없다. 즉 자식 프로세스는 지역변수를 부모 프로세스에 전달할 수 없다.

모든 쉘은 각 쉘과 관련된 시동파일에 의해 초기화된 환경변수 집합을 갖는다.

현재 설정된 환경변수를 보는 명령은 env 혹은 printenv 이다

공통적인 환경변수 ▼

DISPLAY

EDITOR

GROUP

HOME

HOST

IFS

LOGNAME

PATH

PS1

PS2

SHELL

TERM

USER

대부분의 환경변수들은 사용자가 로그인할 때 자동으로 설정된다. 환경변수의 설정내용을 변경하려면 시동파일(.login 혹은 .profile)에서 항목을 수정하거나 쉘내에서 언제든지 변경할 수 있다.

Posted by omok
,