ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • shell 특성 1
    linux/centOS 2018. 6. 14. 14:11

     

     쉘은 명령행에서 입력되거나 스크립트 파일에서 읽어 들이는 명령어들을 해석함으로써 사용자와 커널의 중계(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로 변경이 가능하다.

     

     

    (3) 입력 재지정(입력 리다이렉션, Redirection stdin)

     

    입력 재지정은 표준입력(Stdin)에서 입력을 받지 않고, 다른쪽에서 입력을 받는 것을 입력 재지정 (Redirection stdin)이라고 한다. 원래 특별한 지정이 없다면, 키보드에서 입력을 받지만 다른쪽 방향에서 입력을 받는 것을 말한다. 파일 기술자 0번은 생략 가능하다.

     

    [형식]

    CMD < filename (표준입력)

    CMD 0< filename (표준입력 - 파일 기술자 0)

     

     

    (4) 출력 재지정(출력 리다이렉션, Redirection stdout)

     

    출력 재지정은 정상정인 출력 결과를 표준출력(모니터)으로 출력을 하지 않고, 다른 쪽으로 출력하는 것을 출력 재지정(Redirection stdout)이라고 한다. 원래 특별한 지정이 없다면, 모니터로 출력되지만 다른 쪽 방향으로 출력하는 것을 말한다. 파일 기술자 1번은 생략 가능하다.

     

    [명령어 형식]

    CMD > filename /* 표준출력, 덮어쓰기 기능 */

    CMD 1> filename /* 표준출력, 덮어쓰기 기능 */

    CMD >> filename /* 표준출력, 이어쓰기 기능 */

    CMD 1>> filename /* 표준출력, 이어쓰기 기능 */

     

     

    (5) 에러 재지정(에러 리다이렉션, Redirection stderr)

     

    에러 재지정은 표준 에러로 출력하지 않고, 다른 쪽으로 출력하는 것을 에러 재지정(Redirection stderr)이라고 한다. 원래 특별한 지정이 없다면, 모니터로 출력을 하지만 다른 쪽으로 출력하는 것을 말한다. 파일 기술자 2번은 생략 불가능하다. 방향 재지정자를 1번과 동일하게 사용하여 1번 파일 기술자와 구별하기 위해 생략 불가능하다.

     

    형식]

    CMD 2> filename /* 표준에러출력 */

    CMD 2>> filename /* 표준에러출력 */

     

     

     

    ☆ 파이프 (pipe) 

     

    : 파이프(Pipe)? 앞에 실행한 명령어의 출력 결과를 뒤에 실행하는 명령어의 입력 값으로 넣어 준다. 앞의 출력 결과를 뒤에 실행하는 명령어의 입력 결과로 보내줌으로 인해 파이프(|)를 사용하면 여러 명령을 동시에 연결하여 사용 할 수가 있다.

     

    ls -al명령을 사용하게 되면 모든 파일을 보여주므로 한 화면을 넘는 많은 파일을 보여 주게 될 때 "ls -al | more" 를 쓰게 되면 ls 명령에 대한 결과를 more 명령을 통해 확인해 볼 수 있다.

     

    [명령어 형식]

    # CMD | CMD

     

     

    [EX] '|'(Pipe) 실습

    # ps -ef /* 프로세스의 모든 정보 출력 */

    # ps -ef | less /* CMD | less : 한 페이지가 넘는 페이지 출력 방법 지정 */

     

    ※ 참고 ※

    tee? 파이프 중간에 사용하여 입력을 출력으로 보내기 전에 파일로 기록

     

    옵션

    -a, --append

    덮어쓰지 않고 주어진 화일에 표준입력을 추가한다.

     

     

    [EX] 출력 결과를 파일로 저장

     

    # CMD > file.log

    # CMD | tee file.log

     

     

    ☆ bash shell 의 기능

     

    # set -o /* 쉘 자체의 기능 전체 목록 확인 */

    # set -o vi /* 쉘 자체의 기능 중 vi 기능을 ON */

    # set +o vi /* 쉘 자체의 기능 중 vi 기능을 OFF */

     

    (1) 로그아웃 <Ctrl+D> 방지하기 (ignoreeof)

     

    쉘 프롬프트 상태에서 <Ctrl+D>의 역할은 파일의 끝을 알려주거나 현재 쉘프롬프트를 종료하는 기능을 가지고 있다. 잘못하여 <Ctrl+D>를 누르게 되면 관리자가 작업하던 중 쉘프롬프트가 종료되면서 로그아웃이 되어 버린다. 관리자가 작업 중에 <Ctrl+D>를 눌러 로그아웃이 되는 것을 막기 위해 쉘의 기능중 ignoreeof를 이용하여 로그아웃 방지 기능을 설정 하도록 한다. <Ctrl+D>를 이용한 로그아웃 방지 기능이 설정되면 exit를 이용하여 로그아웃을 하도록 한다.

     

    set -o ignoreeof

     

     

    EOF(End Of File)의 의미를 갖는 키 <CTRL + D>

    파일의 끝(EOF)

    현재 쉘(프로그램) 종료

     

    (2) 덮어쓰기 방지기능 (noclobber)

     

    방향 재 지정자(Redirection Stdout, '>')를 이용하면 기존에 존재하는 파일이름에 새로운 내용으로 덮어쓰기가 가능 했었다. 중요한 파일의 경우 파일의 이름이 존재하는지 모른 채 덮어쓰기를 할 우려가 있기 때문에 덮어쓰기 방지 기능을 이용하여 중요한 파일등에 덮어쓰기가 되지 않도록 파일의 내용을 보호 할 수가 있다.

     

    set o noclobber

     

    'linux > centOS' 카테고리의 다른 글

    shell 특성 3  (0) 2018.06.17
    shell 특성 2  (0) 2018.06.15
    압축과 아카이빙  (0) 2018.06.13
    검색 관련 명령어  (0) 2018.06.13
    유용한 명령어  (0) 2018.06.12

    댓글

Designed by Tistory.