shell 특성 1
쉘은 명령행에서 입력되거나 스크립트 파일에서 읽어 들이는 명령어들을 해석함으로써 사용자와 커널의 중계(Interface) 역할을 담당한다. 사용자가 로그인하면 쉘이 시작되고 사용자가 명령어를 입력하면 쉘은 명령행의 구분을 분석하고, 리다이렉션, 파이프, 와일드 카드, 작업 제어등을 처리하고, 명령어를 PATH변수에서 검색하고 존재하면 실행한다. 쉘의 주요 기능들 중 하나는 명령행 프롬프트에서 입력된 명령어들을 해석하는 대화형 기능이다. 쉘은 명령행에서 입력된 명령어들을 분석해서 ‘토큰’이라는 단어 단위로 해석한다. 토큰은 텝이나 빈칸, 개행문자 등 공백으로 구분한다. 입력된 명령어들에 메타문자들이 포함되어 있으면 적절하게 처리한다. 쉘은 파일 입출력과 백그라운드 작업을 처리하며, 명령행에서 입력이 정상적으로 분석되었을 경우 해당 명령어를 찾아 실행한다.
쉘의 기능을 요약해 보면 다음과 같다.
쉘은 PATH 변수에 정의된 모든 디렉토리를 참고 하여 명령어를 찾아 실행한다.
쉘은 파이프, 입/출력 리다이렉션, 백그라운드 프로세싱(Background Processing)을 설정한다.
쉘은 명령어의 모임인 별칭(alias), 쉘 함수(Function) 등을 찾아 실행시킨다.
쉘은 TERM 변수를 사용하여 서로 다른 터미널 환경을 초기화 한다.
쉘은 명령어 자동 완성 기능을 사용하여 입력한 명령어를 기록한다.
쉘은 사용자 환경 정의 파일을 가지고 사용자의 환경을 초기화 한다.
☆ 방향 재지정 (Redirection)
(1) fd (파일 기술자, File Descriptor)
각 프로세스를 위한 파일 기술자(File Descriptor)가 쉘에 의해 만들어 진다. 한 개의 파일을 열면 그 연 파일을 나타내는 특별한 숫자를 쉘이 만들어 내는데 이것이 파일 기술자이다. 이런 번호들 중 미리 예약 되어져서 파일을 열 때 주어지지 않는 번호가 있는데 아래 표와 같다.
파일 기술자(File Description)란?
프로세스가 파일을 열때 할당되는 번호
프로세스의 열린 파일을 구분할 때 사용하는 식별 번호
[참고] C 언어
# vi test.c
------------------------
int fd;
fd=open(.....);
------------------------
■ 예약되어진 파일 기술자(File Descriptor)
파일기술자 | 축약의미 | 설 명 |
0 | stdin | Standard Input, 표준입력, 특별히 입력이 지정되지 않은 경우 키보드에서 입력을 받는다. |
1 | stdout | Standard Ouput, 표준출력, 특별히 출력이 지정되지 않은 경우 정상적인 출력 결과를 모니터로 출력된다. |
2 | stderr | Standard Error, 표준에러, 특별히 출력이 지정되지 않은 경우 에러의 출력 결과를 모니터로 출력된다. |
파일 기술자에 대한 정보는 /proc 디렉토리 하위에 존재하는 각 프로세스의 PID(Process ID) 번호 디렉토리 하위에 fd 디렉토리에서 확인할 수 있고 또한 /dev/fd 디렉토리 하위에서도 파일 기술자에 번호를 확인 할 수 있다. 하지만 번호들은 열어 볼 수는 없는 파일들이다. 다음은 파일기술자에 대한 확인을 하기 위한 테스트이다. 가상터미널1에서 /etc/passwd 파일을 열고 다른 가상터미널2에서 현재 동작중인 프로세스를 확인한 후 프로세스가 열고 있는 파일을 확인해 보면 새로운 파일 기술자(File Descriptor)가 생성된 것을 확인한 것이다.
(2) 표준 입력, 표준 출력
쉘에서는 명령어 입력을 특별한 지정이 없는 한 키보드(Keyboad)에서 받는다. 그리고 명령어의 출력 결과를 모니터에 출력해준다. 이러한 명령어의 출력 결과나 입/출력을 리다이렉션 심볼(Redirection Symbol)을 사용하여 방향을 재지정 할 수 있다. 방향을 재 지정함으로 인해 기본 출력 방향이 모니터인 것을 file로 변경이 가능하다.
bash shell, Cent OS, centos, eof, FD, Pipe, redirection, Shell, 방향 재지정, 배시 쉘, 쉘, 에러 재지정, 입력 재지정, 출력 재지정, 파이프