본문 바로가기
IT/System Engineering

[UNIX / LINUX 환경 기초 핸들링] (2) UNIX / LINUX 환경파일

by Jany 2012. 3. 15.
반응형
[IT/Server] - [UNIX / LINUX 환경 기초 핸들링] (1) UNIX / LINUX 기본명령어


1. sh

sh은 bone shell이라고 불리우며 가장 기본적인 쉘이다. 쉘이란 커널과 사용자를 연결해주는 하나의 매개체 역할을 한다.
가장 기본이 되는 쉘이 바로 sh이다. 쉘은 여러가지 형태로 만들어 지지만 크게 csh 계열과 ksh계열로 분리가 된다. 
csh는 c 언어를 기초로 만들어진 관리자 중심의 쉘이다. 
ksh는 korn shell이라고 불리며 사용자 중심으로 만들어진 쉘이다.

리눅스는 bash 라는 쉘을 사용하며 이 의미는 born again shell의 의미를 가지고 있다.
bash는 csh의 관리적인 측면과 ksh의 사용자 편의성 측면을 모두 고려하여 만들어진 쉘이다. 

유닉스(리눅스포함)는 대부분의 쉘을 호환하여 사용할 수 있다.
예를 들면 리눅스에서 bash쉘을 사용하다가 csh로 바꾸거나 ksh로 바꾸는등 자기에게 맞는 쉘을 선택해서 사용할 수 있다.

그러므로 쉘 환경화일 보는것에 대한 공부가 필요하다.


2. csh 환경설정
 
쉘 환경에서 보통 env 라고 치면 자신의 환경변수 값을 볼 수 있다.
환경 변수를 바꾸는 명령어는 setenv 이다.
setenv variablename = value의 형식을 취한다.
직접수정은 root에서 vi편집기를 이용해서 .cshrc파일을 열어서 편집하면 된다.

* TERM 
TERM 변수는 터미널의 종류를 알려 준다. 이 변수는 vi 에디터 같은 프로그램이 필요로 하는 변수 이다.
(vi나 more명령 같은 것은 터미날의 커서 조정 위치를 위한 코드가 있다.)
보통 많이 보이는 타입은 vt100, vt200, 혹은 ANSI standard terminal이다.

* HOME 
HOME변수는 자신의 login directory이다.
이것은 보통 시스템 관리자가 사용자의 아이디를 발급해줄때 알아서 정해준다.
/etc/passwd 화일에 등록되어 있다.
로그인 시에 이 passwd 화일에 적혀있는 HOME 변수를 참조한다.
이 변수는 쉘 스크립트 작성시 많이 사용하는 변수이다.
C shell 변수에도 home이 있는데, 이것은 HOME 변수를 카피해 가는 것이다.

* SHELL
 이 변수는 자신이 사용하고 있는 쉘의 종류를 나타낸다.
이 변수도 역시 HOME처럼 시스템 관리자가 아이디 발급시 /etc/passwd에 넣어주는 값이다.
시스템 관리자에게 바꾸어 주도록 요청하던지,
아니면 자신의 현재 프롬프트 상에서 원하는 쉘을 실행하도록 하는 명령어를 치던지, 아니면 startup 등에 원하는 쉘을 등록해 놓고 사용할 수도 있다. 

* PATH
이것은 도스의 path와 같다.
shell이 화일을 찾을때 이 PATH에 명시된 순서대로 찾아 나가며, 일단 화일을 찾으면 거기서 멈춘다.
보통 unix의 기본 명령어들은 /bin이나 /usr/bin에 있다.
(그래서 PATH를 명시해 주지 않으면, 디폴트로 이 디렉토리가 PATH의 값이 된다.)

* PWD 
현재 위치해 있는 디렉토리의 위치를 알려 준다.

* USER / LOGNAME 
이 변수들은 모두 사용자의 로그인 Name을 가진다. 로그인시 /etc/passwd 화일로 부터 이 변수들을 초기화 시킨다. 

* MAIL 
쉘은 새 메일이 왔는지 알아 보기위해 이 변수를 사용한다. 

* MANPATH
온라인 메뉴얼이 있는 곳의 path. 이 디렉토리 안에는 man*, man*.Z, cat*, cat*.Z형식의 서브디렉토리가 있다. 

* TZ 
TZ는 time zone을 설정. 우리나라는 ROK (Repuplic of Korea) 

* LD_LIBRARY_PATH=/solar/lib:/solar/X11R5/lib:/usr/lib:/usr/local/lib 
이것은 컴파일러에게 라이브러리의 위치를 알려준다.
컴파일시 라이브러리의 위치를 명시하지 않고 컴파일하면, 컴파일러는 위의 패스에서 해당 라이브러리를 찾고, 만약 찾는 라이브러리가 없으면 컴파일 에러가 난다.
그러면 직접 라이브러리가 있는 곳을 써주어야 한다.
자주 쓰는 라이브러리라면 여기에 등록을 해놓는 것이 좋다. 

* PAGER=less 
PAGER는 출력을 화면에 나타낼때 페이지 단위로 잘라주는 paginator를 설정한다.
more나 less, pg 같은 것이다.
이 PAGER변수는 man을 보여줄때 영향을 준다.
man을 디스플레이 할 때, 한페이지가 넘어가면 다른 키를 누를 때까지 그대로 대기하는데, 이 때 여기서 설정한 Paginator의 명령어를 사용한다.

* LANG=ko 
사용하는 언어이다. 거의 한글을 사용하기 때문에 ‘ko’로 설정한다. 


3. C-Shell 변수 설정

쉘 변수를 잘 아는 것이 환경 설정에 있어서 중요한 역할을 한다.
자신의 현재 쉘 변수를 보려면 argument없이 set이라고 치면 볼 수 있다. 
변수의 값을 바꾸는 것은 set name=value이다. 쉘 변수는 환경 변수와 관련 있는 것들이 많다.

* argv()
쉘에게 넘겨진 변수이다. C 프로그램에서 함수에 변수를 넘기듯이, 쉘이 시작될 때 필요에 의해 set 된다다.

* cdpath
cd명령을 칠때, 이 cdpath변수에 지정된 디렉토리 바로 아래에 있는 디렉토리는 pull path name을 쳐주지 않아도 그 디렉토리로 바로 이동. 즉 cdpath는 cd 명령어가 탐색하는 디렉토리를 말하는 것이다.

* cwd
현재 자신이 위치하고 있는 디렉토리의 pull path

* filec 
명령어 축약을 해주는 편리한 기능.
자신의 현재 디렉토리에 aaa.c와 bbb.txt 그리고 ccc라는 세개의 파일이 있다고 하면, 지금 vi를 이용해 aaa.c를 편집하고자 할때 vi a까지 쓰고 ESC 키를 누르면 나머지 aaa.c 부분이 자동으로 써진다. 즉, 긴 파일/폴더명을 ESC키로 한번에 탐색해서 연결시켜준다. 

* history
history에서 지정한 수만큼 이전의 명령들을 저장한다.

* home
cd 명령의 디폴트 디렉토리이다. 그러므로 자신이 어느 위치에 있던지 cd라고만 치면 자신의 홈으로 이동한다.

* noclobber
이것이 set 되어 있으면, 존재하는 화일을 redirection >, >>에 의해 덮어 버리는 짓을 못하게 한다. 

* notify 
이것은 백그라운드 작업에 대해 변화가 생길 때 마다 즉각 보고한다. 예를 들어 우리가 백그라운드에 integral이라는 이름의 프로그램을 돌리고 있고, 현재 vi에디터에서 작업을 하고 있는 중이라고 하면, 이때 integral이 실행이 끝나면, 현재 vi에디터에 있는 상태인데도, 백그라운드 작업이 끝났다는 것을 즉각 알려준다. 

* path 
path는 명령어들을 탐색하는데 이 변수에 지정된 디렉토리들을 뒤집니다. 많은 사람들이 자신의 home에 bin 디렉토리를 가지고 있지 않은 사람이 많은데, bin 디렉토리를 만들고 개인용 실행 화일들을 여기에 넣어두고 쓰는 것은 좋은 습관이라고 생각한다. 

* prompt
c shell 디폴트 프롬프트는 %이나, 자신의 구미에 맞는 어구나 모양을 넣어 프롬프트를 만들 수 있다. 

* shell 
자신이 사용하고 있는 쉘의 종류를 알려준다. 로그인시 /etc/passwd로부터 환경변수 SHELL로 set 되고 c shell은 이 환경변수의 값을 copy해서 shell변수로 사용한다. 

* term
터미널의 종류를 알려준다.


4. set tty
Stty 는 터미널 통신 포트나 가상 터미널 포트에 대한 특성을 세팅하는 명령어이다.
stty는 시스템이 터미널을 다루는 방법을 제어하는 어렵고 다양한 방법을 제시한다.
사용자가 stty 명령의 옵션을 대부분 사용하기 위해서는 터미널, 컴퓨터, 직렬 통신 등에 대한 해박한 지식을 가지고 있어야 하며 대부분은 시스템 관리자가 설정한 옵션을 사용한다.
하지만 몇가지 옵션은 자신의 환경 설정을 위해 사용자 스스로 바꿀 줄 알아야 하며, 최소한 관리자가 셋팅해 놓은 값이 무엇을 뜻하는지 정도는 알아야 한다.
현재 설정된 옵션을 보기 위해서는 stty 이라고만 하면 되고, 모든 옵션을 다 볼려면 stty -a 라고 한다.
이중에서 몇 개의 중요한 값에 대해 알아본다.
값을 변경하기 위해서는 stty variable value 의 형식을 취한다. 

* speed 9600 baud; 
터미날에 데이터 전송 속도가 9600 baud임을 나타낸다. 

* 행 = 25; 열 = 80; y픽셀 = 450개; x픽셀 = 640개; 
현재 터미날에 나타나는 문자의 행과 열을 나타낸다. 

* intr = ^c; quit = ^|; erase = ^h; kill = ^u; 
intr는 인터럽트 키를 설정.
어떤 프로그램을 실행하는 도중 인터럽트키를 누르면 인터럽트 시그날이 프로그램에 전달되고 프로그램은 실행을 중지한다. 머신에 따라 디폴트로 del키가 설정된 경우가 많은데, 우리가 del키를 문자를 지우기 위해 사용하는데 익숙해 있기 때문에 실수로 del키를 누르게 되는 경우가 많이 생깁니다.
위에서는 인터럽트 키를 control+c키로 설정했다. 

quit도 프로그램을 종료한다.
quit 키가 눌러지면 프로그램을 그 시점에서 종료시키고, 그때 메모리상의 값을 core 화일로 출력한다.(core dump) 

erase는 앞서 친 문자를 지우기 위한 것입니다.
위에서 control+h로 설정 되어 있는데 이것은 백스페이스의 다른 이름, 보통 디폴트로 #이 사용되는데, 매우 불편하다. 

kill은 앞서친 명령행을 모두 지운다.
예를 들어 netscapo라고 쳐서 o를 지우고 싶다면 erase를 눌러야하는데, 이때 kill 키를 누르면 netscapo전체가 지워진다. 

* eof = ^d; 
쉘 프롬프트 상에서 이 eof charactor(제 경우 ^D)를 치면 쉘을 빠져 나간다.
로그인 쉘에 있으면 강제로 logout시킨다.
end of file를 무시할 수 있는데, 쉘 변수 ignoreeof를 set하는 것입니다.

* start = ^q; stop = ^s; 
stop은 화면으로 출력되는 ouput를 멈춤, start는 다시 계속 출력한다. 

* 기타 필요한 것들
- stty sane : 지정이 잘못 되었을때 모든 값을 reasonable 값으로 reset한다.
                   start up file에서 유용하게 사용할 수 있다.
- stty cs8 -parenb -istrip : 한글 vi editor를 위해 이와같이 set 하는게 좋다.
- cs8 : character size에 관한 설정.
- parenb : parity bit를 사용하는데, 한글 사용에 문제가 생길 수 있다.
               이 옵션을 disable 하도록 -parenb를 쓴다.
               -parity도 같은 효과를 준다. 
- istrip : 7비트짜리 input character를 쓴다.
             stty istrip로 set 하면 한글이 깨져서  나타나므로 istrip를 disable 하도록 -istrip옵션을 준다.

5. ksh 환경설정

ksh의 환경변수 설정은 csh와 다르다.

* 환경 변수의 선언
%> var='변수의 내용' 

*var : 환경변수 이름
= : 환경변수와 변수 내용을 구분. 이 때 =의 전후에 공백이 있으면 안된다.
=의 오른쪽 : 이곳이 환경변수에 기억되는 내용이다.
                  작은 따옴표는 변수의 내용에 공백이 있는 경우에 사용한다.
                  일반적으로 항상 붙이면 문제가 없다.

* export
환경변수는 현재 프로세스에서만 사용할 수 있는 변수와 하위 프로세스에서도 사용 할 수 있는 변수로 구분된다.
하위 프로세스도 사용할 수 있는 변수는 상위 프로세스가 하위 프로세스에 어떤 정보를 전달/공유하기 위하여 사용된다.
이러한 작업을 export라고 부른다.

%> export var 
필요한 변수를 선언한 다음에 export명령 뒤에 변수명을 주고 실행한다.
보통 shell의 환경설정을 위한 변수는 항상 export되어야 한다.

* 환경변수의 사용
%> N='var'

%> echo $N 
$기호를 붙여서 사용한다. 

%> echo $Nvar 
NVar이라는 환경변수를 찾기 때문에 아무것도 출력하지 않는다.

%> ehco ${N}Var 
환경변수명을 {}로 감싸면 N만 환경변수로 인식하고 varVar Var은 일반 문자로 인식하고 처리한다.
** 참고 : $문자를 그냥 화면에 출력하고 싶으면 백슬러쉬(\)를 사용한다.

%> echo \$N

* 어떤 프로그램의 실행결과를 환경변수에 저장
환경변수를 선언할때 작은 따옴표 대신 역따옴표(키보드에 ~와 함께 있는 문자)를 사용하면 역따옴표로 둘러싸인 문장이 실행된 결과가 환경변수에 저장된다. 이 방법은 shell에서 수식을 계산하거나 디렉토리를 탐색하는 등의 shellscript에서 유용하게 사용되는 기능이다. 

%> DIRLIST=`/bin/ls` 역따옴표임 (작은 따옴표 아님)
%> echo $DIRLIST 디렉토리의 파일 목록이 공백문자로 구분되어 있다.

* export되는 환경변수를 짧게 선언하기
export되는 환경변수를 정의하려면 다음과 같이 해야한다.
%> DIR='$HOME/work'
%> export DIR

이걸 다음과 같이 하면 한번에 할 수 있다.
%> export DIR='$HOME/work'
 
6. “.profile”의 설정
DOS의 autoexec.bat과 같은 기능을 하는 파일이 .profile 이다.
sh, csh, ksh 모두 login시 사용되는 shell script 파일을 가지고 있다.
sh와 ksh는 .profile을 사용하고 csh는 .cshrc를 사용한다.
.profile과 .cshrc의 쉘변수들이 거의 동일하기 때문에 .cshrc나 .profile의 쉘변수 설정은 어느 쪽이라도 한번 해봤다면 쉬울것이다.

* .profile을 다시 실행
일단 login한 후 .profile을 수정하면 다음번 login부터 수정한 내용이 적용된다.
DOS의 경우 autoexec.bat을 다시 실행시켜주면 되지만 UNIX는 그렇게 되지 않는다. 이때는 .(점)을 사용한다.
%> . .profile $ .(점) .(점)profile
이렇게 하면 login시에 실행한 것과 동일한 효과를 발휘한다.

* .profile에 많이 사용되는 내용.

export PS1='$PWD:\!> ' 
Prompt 설정

set -o vi 
ksh의 command line에서 vi key를 사용

EXINIT='ai ts=4' 
vi 사용 환경을 초기화 하는 환경변수

stty erase ^H 
backspace를 [Del]대신 [<--]로 변경

alias ll='ls -al' # ls 명령 사용자에 맞게 지정
alias rm='rm -i' # rm 명령 재지정
alias cp='cp -i' # cp 명령 재지정

stty cs8 -istrip # terminal에서 한글처리가 되도록 지정

export PATH=$PATH:. # current dir을 PATH에 지정

* HOME은 현재 사용자의 login 디렉토리를 지정하고 있는 환경변수이다.
%> echo $HOME
/home/tradeoff

%> cd $HOME/bin 
/home/tradeoff/bin 으로이동

% PATH=$PATH:$HOME/bin 
PATH에 자신만의 명령을 넣어 두는 디렉토리인 # /home/tradeoff/bin 을 추가.

* ~ ($HOME의 다른 형태)
~ 는 ksh에서 사용가는한 $HOME에 다른 형태이다. 어디서든 $HOME을 사용
해야하는 자리에는 대신에 ~를 사용할 수 있다.

%> echo ~
/home/tradeoff

%> cd ~/bin 
% PATH=$PATH:~/bin 

* 다른 사용자의 HOME 디렉토리 지정.
다른 사용자의 HOME 디렉토리를 입력할 때도 ~ 를 사용할 수 있다.
~username 이라고 쓰면 지정된 username의 HOME 디렉토리가 지정된다.

%> echo ~root 
%> echo ~oracle7
root, oracle7의 HOME 디렉토리를 각각 출력한다.

%> cd ~goodman3 
goodman3의 HOME으로 이동한다.
     *** csh과 ksh의 설정은 거의 비슷해서 한번 보면 대체적으로 파악이 가능하다. ***
반응형

댓글