박봉달의 개발생활
[프로그래밍:서버] UNIX #6 : 유닉스 셸의 종류와 기능, 환경 변수 본문
안녕하세요!
박봉달입니다!
유닉스는 특히 서버에 많이 쓰이는 운영체제입니다
우리가 많이 쓰는 윈도우와는 다른 방식으로 구성되어있는데요,
오늘은 유닉스(Unix) 의 셸의 종류와 기능에 대해서 알아보도록 하겠습니다!
1. 유닉스 셸의 기능과 종류
* 셸(Shell)
- 사용자와 커널 사이의 중간 역할
- 명령을 해석하고 실행 결과를 알려주는 역할
- 사용자의 명령 입력 편의를 위한 환경 설정
* 셸의 기능
- 명령어 해석 기능
- 사용자와 커널 사이에 명령 해석하여 전달
- 사용자가 로그인 하면 셸이 자동으로 실행되어 명령을 입력하기를 기다림 -> 로그인 셸
- 프롬프트 : 셸이 사용자의 명령을 기다리고 있음을 나타내는 표시
- 로그인 셸 : /etc/passwd 파일에 사용자별로 지정
* 프로그래밍 기능
- 셸은 자체 내에 프로그래밍 기능이 있어 반복적으로 수행하는 작업을 하나의 프로그램으로 작성 가능
- 이러한 셸 프로그램을 셸 스크립트 라고 지칭함
* 사용자 환경 설정 기능
- 사용자 환경을 설정할 수 있도록 초기화 파일 기능 제공
- 명령을 찾아오는 경로 설정
- 파일과 디렉터리를 생성시 기본 권한 설정
- 다양한 환경 변수 등을 설정
- 사용자 별로 사용 환경의 특성을 초기화 파일에 설정
- 로그인 시, 초기화 파일이 실행됨
2. 셸의 종류
* 본 셸 (Bourne shell)
- 유닉스 V7에 처음 등장한 최초의 셸
- 개발자의 이름인 스티븐 본의 이름을 딴 셸
- 초기에 단순하고 처리 속도가 빨라서 많이 사용
- 경로를 확인해보면 배시 셸과 심벌릭 링크로 연결됨
- 지금도 시스템 관리 작업을 수행하는 많은 셸 스크립트는 본 셸을 기반으로 함
- 히스토리, 에일리어스, 작업 제어 등 사용자의 편의를 위한 기능을 제공하지 못해 다른 셸들이 등장
- 본 셸의 경로를 확인해보면 배시 셸과 심벌릭 링크로 연결됨
* C 셸 (C shell)
- 캘리포티아 대학 빌 조이가 개발
- 2BSD 유닉스에 포함되어 발표
- 본 셸에는 없는 에일리어스나 히스토리 같은 사용자 편의 기능 포함
- C언어와 구문 형식이 같아 C셸이라는 이름 가짐
- C셸의 명령 이름 -> csh
* 콘 셸 (Korn shell)
- 1980년대 데이비드 콘이 개발
- 유닉스 SVR 4에 포함되어 발표
- C셸과 달리 본 셸과의 호환성 유지하고 C셸의 특징도 모두 제공하면서 처리 속도도 빠름
- 콘 셸의 명령 이름 -> ksh
* 배시 셸 (bash shell)
- 본 셸을 기반으로 개발된 셸
- 본 셸과 호환성 유지하면서 C셸, 콘셸의 편리한 기능 포함
- 배시 셸의 명령 이름 -> bash
- 배시 셸의 모든 버전은 GPL 라이선스에 의거 자유롭게 사용 가능
- 리눅스의 기본 셸로 제공됨
* 셸 종류 알아보기
- 프롬프트 모양 참조
- $ : 본 셸, 배시 셸, 콘 셸의 기본 프롬프트
- % : C셸의 기본 프롬프트
- 사용자 정보 확인 : /etc/passwd 파일
- 가장 앞에 나온 정보가 로그인 ID
- 가장 마지막에 나온 /bin/bash가 기본 셸
- 현 UNIX의 셸 종류 알아보기 : ps
- 현 UNIX의 셸의 경로 알아보기 : ls -l /bin/sh
* 로그인 셸과 서브 셸
- 로그인 셸 : 사용자가 로그인 한 직후 자동 생성되는 기본 셸
- 프롬프트에서 다른 셸을 실행할 수 있는데 이를 서브 셸이라고 함
- 서브 셸은 또 다른 서브 셸 생성 가능
- 서브 셸을 종료하는 명령 : ^d(Ctrl+d), exit 등
- 로그인 셸에서 로그아웃 하면 접속 해제
3. 셸의 사용법 및 환경 변수
* 배시 셸의 사용법
- 현재 환경 변수의 전체 목록 : declare 명령어
- 표준 입출력 장치
- 표준 입력 장치 : 셸이 작업을 수행하는데 필요한 정보를 받아들이는 장치
- 표준 출력 장치 : 실행 결과 내보내는 장치
- 표준 오류 장치 : 오류 메세제를 내보내는 장치
* 입출력 방향 바꾸기
- 1) 표준 입출력 장치
- 파일 관리를 위해 붙이는 일련 변호
- 입출력 장치를 변경할 때는 이 파일 디스크립터 사용
- 장치를 파일로 바꾸는 것을 리다이렉션이라고 함
파일 디스크립터 |
파일 디스크립터 대신 사용하는 이름 |
정의 |
0 |
stdin |
명령의 표준 입력 |
1 |
stdout |
명령의 표준 출력 |
2 |
stderr |
명령의 표준 오류 |
- 2) 방향 바꾸기
- 출력 재지정
- 입력 재지정
- >, >> (stdoutㅡㄹ 파일로 저장 또는 추가)
- < (파일을 stdin으로 전달)
- 3) 파이프(|)
- Process 연결 (stdout을 stdin으로 전달)
- Process 간의 데이터 흐름은 자동으로 조절됨
- 4) 출력 리다이렉션
- > : 기존 파일의 내용을 삭제하고 새로 결과 저장
- >> : 기존 파일의 내용 뒤에 결과를 추가
- 1 : 파일 디스크립터 1번 (표준 출력, 화면)
- 셸은 >를 사용한 리다이렉션에서 지정한 이름의 파일이 없으면 파일을 생성해서 명령 수행 결과를 저장
- 파일이 있으면 이전의 내용이 없어지고 명령의 수행 결과로 대체
* 파일에 내용 추가하기 : >
-기능 : 파일에 내용을 추가
- 형식 : 명령 >> 파일명
- 지정한 파일이 있는 경우 : 기존 파일의 끝에 명령의 실행 결과 추가
- 지정한 파일 없는 경우 : 파일 생성
* 오류 방향 바꾸기
- 1) 오류 리다이렉션 : 표준 오류 메세지를 파일에 저장
- 표준 오류도 기본적으로 화면에 출력되며 표준 출력처럼 리다이렉션 가능
- 표준 출력 리다이렉션 -> 오류 메세지는 리다이렉션 안됨
- 오류 리다이렉션에서는 파일 디스크립터 번호를 생략 불가
- 표준 출력과 표준 오류를 한번에 리다이렉션
- 2) 입력 리다이렉션 : 표준 입력을 바꿈
- 명령 (파일디스크립터 번호) < 파일명
- 명령 < 파일명
* 배시 셸의 환경 변수 설정 방법
- 1) export 명령어를 통해 실행 : 1만 적용 (재부팅 시 초기화)
- 2) .bashrc 파일 설정을 수정
1) export PATH=$PATH:$JAVA_HOME/bin
2) $vi~/.bashrc
...
파일의 아랫쪽에
export PATH=$PATH:$JAVA_HOME/bin
추가
* 배시 셸의 환경 변수 - CDPATH
- cd 명령에서 사용되는 변수 설정
- cd 명령 대상 디렉토리가 상대적 경로의 이름으로 지정된 경우 처음에 현재 디렉토리에서 대상 디렉토리 찾음
- 대상을 찾을 수 없는 경우 : 대상 디렉토리를 찾고 변경이 완료 될 때까지 CDPATH 변수에 나열된 경로 이름을 연속해 검색
- 대상 디렉토리를 찾을 수 없는 경우 : 현재 작업 디렉토리가 수정되지 않은 채 남음
* 배시 셸의 환경 변수
- HOME : 사용자의 홈 디렉토리에 대한 경로 설정
- LANG : 로케일을 설정
- LOGNAME : 현재 로그인한 사용자의 이름 정의, 참조만 해야하고 재설정하면 안됨
- MAIL : 사용자의 메일함에 대한 경로 설정
- MANPATH : 사용가능한 매뉴얼 페이지의 계층 설정, Solaris 11 부터 이 변수는 더이상 필요하지 않음
- PATH : 사용자가 명령을 입력 시 프로그램 찾기 위해 검색 디렉토리 순서 지정
- PS1 : bash 또는 ksh93 셸에 대한 셸 프롬프트 정의
- SHELL : maek, vi 등 다른 도구에서 사용되는 기본 셸 설정
- TERMINFO : 대체 terminfo 데이터베이스가 저장되는 디렉토리의 이름 지정, /etc/profile 또는 /etc/.login 파일에서 변수 사용, 시스템은 사용자가 정의한 TERMINFO 경로 먼저 검사
- TERM : 터미널 정의
이상으로 유닉스 포스팅을 마칩니다!
정리한 내용이 나중에 쓰이길 바라며 포스트를 마칩니다 :)
'IT > UNIX' 카테고리의 다른 글
[프로그래밍:서버] UNIX #7 : 쉘 스크립트와 쉘 변수, 예약 변수 (0) | 2021.01.25 |
---|---|
[프로그래밍:서버] UNIX #5 : vi 에디터 개요와 활용 / 명령어 (0) | 2021.01.13 |
[프로그래밍:서버] UNIX #4: 디렉토리 생성/삭제 (0) | 2021.01.05 |
[프로그래밍:서버] UNIX #3 : 유닉스 디렉토리의 개요 (0) | 2021.01.04 |
[프로그래밍:서버] UNIX #2 : 퍼미션/소유자 관리 (0) | 2020.12.30 |