본문 바로가기
Programming/ETC

[Shell] (Linux, Unix) 쉘 이란?

by 코딩의성지 2020. 10. 16.

하이 ... 정말 오랜만에 글을 쓴다. 요즘 유튜브를 시작했는데.. ㅎㅎ

관심있으신 분들은 구독과 좋아요 부탁드린다 ...!!

 

오늘 준비한 내용은 쉘 스크립트 관련된 내용이다. 이게 프로그래밍이냐 하실수도 있지만 어떻게 보면 프로그래밍이라고도 할수 있으니 카테고리를 프로그래밍으로 잡았다. 이 쉘 스크립트를 이해할 수 있고 짤수 있다면 굉장히 많은 것을 할수가 있으니 여러분들께 꼭 공부해보시길 추천드린다.

 

쉘이란?

쉘은 명령어와 프로그램을 실행할 때 사용하는 인터페이스이다. 쉽게 말해서 쉘은 운영체제에서 사용자가 입력하는 명령을 읽고 해석해서 대신 실행해주는 프로그램이라고 생각하시면 된다.

 

쉘은 윈도우든 리눅스든 유닉스든 어느 운영체제나 필수적으로 필요한 존재이다.

 

그리고 쉘을 사용하기 위해서는 여러분은 운영체제에 로그인을 해야한다. 사용자가 로그인을 시도하면 운영체제가 로그인을 해주는 프로그램을 실행하게 되고 id, 패스워드를 검증한 뒤 쉘을 실행하고 거기에 사용자의 세션을 넘겨주게 된다.

 

 

기본적으로 여러분과 제가 지금 실습하고 있는 Cent OS의 쉘은 Bash 쉘이다. bash 쉘은 리눅스에서 지원되는 기본쉘인데 사용자가 계정을 생성할 때 특별하게 지정하지 않으면 기본적으로 지정되는 쉘이다.

 

bash 쉘의 특징은 다음과 같다.

- Alias 기능
- History 기능
- 연산기능
- Job Control 기능
- 자동 이름 완성 기능
- 프롬프트 제어 기능
- 명령 편집 기능

 

우리가 CentOS 에서 사용하던 쉘은 대화형 쉘이라고 한다. 아래 캡처 사진을 보자.

프롬프트(#) 옆에 명령어를 입력하면 해당 명령을 실행하고나서, 다시 프롬프트(#) 이 표시되어 다음 명령을 기다린다. 마치 대화를 하는 것처럼 말이다.

 

쉘의 명령문 처리방법

쉘 명령문은 명령문과 함께 여러가지 옵션 혹은 인자값을 사용할 수 있다.

보통은 아래의 형식을 따른다.

# 명령어 [옵션...] [인자...]

 

예를들면 아래와 같다.

# ls -al
# find . / -name "*.jsp"

 

쉘 환경변수

쉘을 잘 다루기 위해서는 환경변수를 잘 이해하는것이 중요하다. 쉘은 여러가지 환경변수를 제공하는데, 이 환경변수는 임의로 사용자가 값을 변경해서 사용할 수 있다. (다만 미리 정의된 환경변수의 이름은 변경되진 않는다.)

 

환경변수는 쉘의 종류에 따라 설정하는 방법이 다 다르다.
리눅스 bash 쉘에서는 env 명령을 통해 환경변수 확인가능하다.

 

쉘의 환경변수는

echo $환경변수이름

의 명령어 실행을 통해 확인할 수 있다.

 

아래의 표는 주요 환경변수를 정리해 놓은 표이다.

환경변수 내용
HOME 현재 사용자 홈 디렉토리
PATH 실행파일을 찾기 위한 디렉토리의 경로
LANG 기본 지원 언어
PWD 사용자가 현재 작업중인 디렉터리
TERM 로그인 터미널 타입
SHELL 로그인해서 사용하고 있는 쉘
USER 현재 사용자 이름
DISPLAY X 디스플레이 이름
COLUMNS 현재 터미널 컬럼의 수
LINES 현재 터미널 라인의 수
PS1 1차 명령 프롬프트 변수
PS2 2차 명령 프롬프트 (보통의 경우 '>')
BASH bash 쉘 경로
BASH_VERSION bash 버전
HISTFILE 히스토리 파일 경로
HISTSIZE 히스토리 파일에 저장되는 갯수
HOSTNAME 호스트 명
USERNAME 현재 사용자 이름
LOGNAME 로그인 명
LS_COLORS ls 명령어 확장자 색상 옵션
MAIL 메일 보관 경로
OSTYPE 운영체제 타입

 


쉘의 환경변수는 로그인 할때 설정된다. 모든 계정에 공통적으로 적용되는 글로벌 프로파일과 로그인 계정에서 사용하는 환경설정인 계정 프로파일이 있다.

이 프로파일의 파일 위치와 이름은 운영체제와 쉘에 따라 조금씩 다르다. 

sh,ksh 은 /etc/profile 과 사용자 홈 디렉토리의 .profile
리눅스 bash 는 /etc/profile 과 /etc/bashrc 랑 사용자 홈 디렉토리의 .bashrc
csh는 /etc/csh.login 랑 사용자 홈 디렉토리의 .cshrc

 

가 프로파일의 위치인데 , 리눅스 bash를가지고 살짝 구체적으로 설명을 드리자면 

/etc/profile과 /etc/bashrc는 모든 계정에 공통적으로 적용이 되고, .bashrc 은 해당하는 로그인 계정에서만 사용하는 환경설정이 된다.

그렇기때문에 .bashrc 은 각 계정의 홈 디렉토리 아래에 존재하게 된다.

 

그러니깐 만약 root로 로그인을 하면 먼저 /etc/profile과 /etc/bashrc을 읽어들여서 적용하고 그다음 루트의 홈 디렉토리 아래에 있는 루트의 .bashrc 을 읽어 들인다.

 

만약 root가 아닌 banker라는 계정으로 로그인을 하면 /etc/profile과 /etc/bashrc을 읽어 들이고 banker의 홈 디렉토리에 있는 .bashrc 을 읽어 들이는 것이다.

 

그리고 여러분들이 만약 환경변수의 값을 변경하려면 

export 환경변수=값

을 실행해주면된다. 그외의 환경변수는 

printenv

를 실행해주면 출력이 된다. 다만 일부 환경변수는 printenv명령어를 실행해도 나타나지 않을 수 있다.

 

 

오늘은 여기까지만 작성하도록하겠다. 끝.

 

 

참고자료

우재남, 20190401, 이것이리눅스다, 한빛소프트

반응형

댓글