박봉달의 개발생활

[프로그래밍:서버] UNIX #6 : 유닉스 셸의 종류와 기능, 환경 변수 본문

IT/UNIX

[프로그래밍:서버] UNIX #6 : 유닉스 셸의 종류와 기능, 환경 변수

박봉달 2021. 1. 16. 18:15
728x90

 

안녕하세요!

박봉달입니다!

 

유닉스는 특히 서버에 많이 쓰이는 운영체제입니다

우리가 많이 쓰는 윈도우와는 다른 방식으로 구성되어있는데요,

오늘은 유닉스(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 : 터미널 정의


 

이상으로 유닉스 포스팅을 마칩니다!

정리한 내용이 나중에 쓰이길 바라며 포스트를 마칩니다 :)

 

 

728x90
반응형