본문 바로가기
책갈피

허걱 이렇게 재미난게?

unix |2007.09.11 15:01
조회 331 |추천 0
이제 에디터 사용법도 배웠으니. shell에 대해서 할차례 같네요. shell은 좀 내용이 방대해 질수 있습니다. 간단히 우선은 .login등의 시작할때 수행하는 것부터 하겠어요.
 
csh을 사용할때는 2가지에서 3가지입니다. 이것은 version에 따라서 약간 달라서 그렇습니다.
.login, .cshrc, .logout 이 세가지가 그거거든요. 그런데, logout은 안되는 것도 간혹 있지만 대부분 지원 할겁니다. 이에비해 bourne shell 즉, sh은 .profile을 이용합니다. 이 file들은 여러분이 그 shell에서 사용할 수 있는 모든 script-x를 사용할 수 있습니다. 일반적으로야 환경을 setting 하지만 programming으로 까지 가능할 정도로 수행도 됩니다.
 
여기서 잠깐, 여러분이 dos에 있는 command.com 쯤으로 shell을 생각해서는 안됩니다.
shell은 interpreter라고 봐야 더 정확합니다. shell script-x interpreter정도로...
이것은 programming language로 봐도 무방하다는 것입니다. 또 실제로 programming language로 봐야 하고요. shell은 프로그래밍을 해도 손색이 없을 정도의 control 기능을 제공합니다. 그래서 어떤 shell script-x를 보면 program을 짜놨죠.
interpreter language이기 때문에 속도가 좀 느리지만, 그거 빼놓고는 유용하게 사용할 수 있는 언어입니다.
요기서 잠깐. 생각해 보니 그냥 shell script-x라는 말을 미리 사용했네요. 설명도 안하고. shell부터 설명을 하죠.
 
UNIX는 kernel 즉, OS의 핵심 기능을 하는것을 가지고 있습니다. 그 밖에 컴퓨터 자원들을 가지고 있죠.(memory, cpu, 등..) 이런것을 이용할려면 OS의 기능을 요청해서 사용합니다.(system call) 그런데.. 모든것을 다 프로그램을 작성해서 사용하지 못하죠. 그래서 그 OS의 기능을 이용할수 있는 창구를 마련한것이 shell 입니다. 사용자와 OS의 명령을 해석해서 OS에 전달하는 일을 하는 것이죠. text mode라서 그림을 그리지 못하지만, 보통 이것은 원으로 그림니다. 동심원을 그리는데.. 물론 원점은 같고.. 그 제일 안쪽에 있는 것이 kernel이고 그 밖에 그 daem들이 있어서 그 OS의 자원을 사용합니다. 이와 동등하게 shell이라는 것이 있어서 사용자의 명령을 받아서 수행을 하고, 그 결과를 보여줍니다. 이때 shell을 다른 프로그램과 차이를 두지 않습니다. 즉 어떤 프로그램이던지 맞은 역할을 합니다.
예를 들어 어떤 사용자로 로그인하면 쉘이 아닌 그 사람이 작성한 프로그램을 수행을 시키고 싶다 하면? /etc/passwd에 맨 끝에 /sbin/csh이 아니고 원하는 실행화일 이름을 써주면 됩니다. 단, 이때 이 화일이 shell script-x이면 안됩니다. shell도 UNIX에서는 다른 프로그램과 동일하게 취급을 합니다. 다만 그것이 사용자의 명령을 interprete할 뿐이죠.
shell script-x라는 것은 shell에서 interprete하는 language 또는 그것을 담고 있는 file을 지칭합니다. 이 shell이 처음 사용될 때 자동으로 읽는 file이 .login .cshrc .profile등입니다.
.login과 .cshrc는 csh에서 사용하는것이고 .profile은 bourne shell(sh)에서 사용하는것입니다. Bourne이 만든 shell이라고 해서 bourne shell이라고 하는데.. UNIX의 가장 정통적인 shell입니다. 그리고 system level에서 사용하는 shell script-x는 거의 다가 이 bourne shell의 script-x로 되어 있습니다. 그래서 shell programming의 기본은 bourne shell의 script-x를 기본으로 합니다.
csh은 문법이 C Language 와 유사하다고 해서 csh이라 칭합니다. csh은 sh다음에 나왔는데.. history, alias 등의 기능과 job control 기능이 우수하고 C language를 닮아서 programmer들 사이에 많이 사용되고 있습니다. 특히 BSD는 이 C shell을 default shell형태로 제공하는 느낌입니다. 물론 shell script-x는 bourne shell형태를 많이 사용하지만...
이 외에 korn shell이라고 (ksh)이라고 하는 것은 그래도 나중에 나온 shell중에 하나로 bourne shell의 script-x를 모두 다 수용하고 그위에 job control 기능, alias기능 등 csh에서 있는 기능을 제공하게 되었습니다. 그래서 요즘 나오는 System V계열에는 ksh이 많이 들어 있습니다.
이밖에도 shell이 굉장히 많습니다.
bash(bourne again shell : csh에 밀려 있을때 bourne shell의 영광을 되돌리기 위해서 만든 shell이라고 하네요.. 그래서 이름도 "bourne이여 다시한번" 이렇게 번역이 되는 bash로 했다고 하네요.)
rsh(요건 2가지인데요.. restricted shell이 있는가하면 remote shell(RPC에서 사용하는)이 있습니다.)
tcsh도 있고...
대충 기억나는것만해도 이런데. 실제로 더 많습니다. 그래도 근간은 sh과 csh입니다.
 
login작업시 shell이 수행되는데.. 그 shell이 처음 사용될때 (shell별로 구분을 안하고 말하겠습니다. 위에서 대충 말씀드렸기 때문에 특별한 언급이 없더라도 각 shell별로 해당하는 시작화일을 구분해 주세요.) .login .profile을 찾습니다. 물론 사용자의 home directory죠.. 이 home directory는 물론 /etc/passwd file에 있는 것이죠. 그리고 shell이 수행될때 마다 수행되는 것으로는 .cshrc .profile입니다.
보시면 아시겠듯이 .profile은 처음 login에도 수행이되고.. sh을 띄울때도 수행이 됩니다. 그러나 .login login시에만 수행이되고. csh이 수행될때마다 수행이 되지는 않습니다. 반면 .cshrc는 수행될때마다 읽어집니다. 또 여러분은 느끼셨는지 모르겠지만.. 이런 경우를 혹시 당하지 않으셨나요? 내가 setting을 하지 않은 것도 setting이 된 경우를... 사실 home directory에 있는 것만 참조하지 않습니다. /etc밑에 있는 file 도 참조 합니다. 이것은 system마다 약간씩 차이가 있습니다. /etc밑에 보면... cshrc, profile 이 있습니다. System V계열에는 일반적으로 system.cshrc라는 이름의 형태를 가질수 있습니다.
이것을 먼저 수행하고 그뒤에 사용자의 home directory에 있는 file을 수행을 합니다. 그런데 어떤 시스템에서는 system.cshrc등에 home directory에 있는 file도 수행을 하라고 지정을 안하면 사용자의 home directory에 있는 file들은 수행을 안하는 것도 있습니다. 그때는 /etc에 있는 것을 고쳐서 사용자의 home directory에 있는 file 도 수행하도록 고쳐야 됩니다.
그리고 shell은 interpreter라고 했듯이 shell은 2가지를 가지고 있습니다. 변수를 저장하는 공간과 환경변수를 저장하는 공간을 지고 있습니다.
변수를 저장하는 공간은 다른 프로그램에 전달을 할수 없는 공간입니다. 이와는 달리 환경변수를 저장하는 공간은 다른프로그램에 전달을 할수 있는 공간입니다. csh보다는 bourne shell에서 이것은 더 확실히 드러납니다. (이유는 csh에서는 어떤 특정한 변수이름은 스스로 알아서 환경변수로 넘겨주는 기능을 가지고 있습니다. ex. term)
예를들어 terminal mode setting은 vi등의 명령에서도 사용하는 환경변수 입니다. 따라서 이값은 환경변수영역에 저장되어야지 일반변수 영역에 저장되어서는 도움이 안됩니다.
다음과 같이 일반 변수에 저장을 하면 vt100으로 setting한 효과가 vi에는 나타나지 않습니다. $ TERM=vt100 $ 이것을 환경변수에 세팅을 시켜야 합니다. export명령을 사용하죠... $ export TERM

현재의 setting을 살펴보는 명령으로는 일반변수는 set, 환경변수는 env 또는 setenv로 볼 수 있습니다.
bourne shell은 일반변수를 거쳐야지만 환경변수로 넘길수 있습니다. 하지만 csh은 직접 setenv함으로써 일반변수를 거치지 않고 환경변수로 넘길 수 있습니다.

 

unix.co.kr 유닉스 공부  ; ) 펌

추천수0
반대수0

공감많은 뉴스 시사

더보기

뉴스 플러스