본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스]셸 환경변수, 프롬프트(Prompt)란, PS1과 PS2 차이점, 관련 문제

리눅스 완전 정복 : 리눅스 목차

 

셸에 대해서 포스팅하면서 셸의 기능에서 환경변수에 관한 내용도 살짝쿵 언급했었는데 기억하시나요? :)

 

셸 환경변수를 살펴보기 앞서, 셸 변수 표현 방법을 보고 갑시다. 변수명 출력할 때 사용하는 명령어가 환경변수 확인할 때 계속 쓰이거든요 ㅎㅎ

 

 변수

프로그래밍 언어를 조금이라도 배워본 분은 변수가 무엇인지 너무나 잘 알거예요. 

쉽게 간단히 말하면 데이터를 담기 위한 그릇(?) 상자(?) 공간에 이름을 붙인 거죠

리눅스에서는 변수에다가 값을 집어넣을 때 

'변수명=값' 형태로 지정해서 사용합니다. int, float 이런 타입 선언은 안해요. 대신 모든 값은 그냥 문자열 String으로 취급합니다. 주의해야 할 것은 띄어쓰기가 있으면 안돼요.

띄어쓰기를 안에 넣으면 빨간색 네모에서 볼 수 있듯이 command를 찾을 수 없다면서 에러가 납니다.

파란색 박스처럼 공간 없이 써주기!

 

변수 값을 출력할 때는 변수명 앞에 $를 붙이고 echo명령으로 확인할 수 있습니다. 근데 얘도 마찬가지로 띄어쓰기를 조심해야 해요. 왜냐면 echo자체는 그냥 쓰이면 문자열을 출력하는 명령어로 쓰이기 때문이예요

그래서 ~$ echo $ city 했을 경우 $ city가 출력된 거랍니다. ㅎㅎ

 

변수를 해제하고 싶을 때는 unset키워드를 사용합니다.

# unset 변수명 

변수 해제

 

셸 환경변수란?

환경변수란 프롬프트 변경, PATH 변경 등과 같이 셸의 환경을 정의하는 중요한 역할을 수행하는 변수를 말해요. 

셸을 공부하는 데 있어 가장 중요한 것 중 하나가 환경변수의 이해입니다. 셸은 여러가지 환경변수를 사용하는데 이 환경변수는 사용자가 임의로 본인의 의지에 따라 값의 변경이 가능합니다. 하지만 미리 정의된 환경변수의 이름을 변경할 수는 없습니다. 환경변수는 미리 예약된 변수명을 사용해요. 

 

설정된 환경 변수는 앞의 셸 변수에서 살펴봤듯이 'echo $환경변수이름' 형식으로 명령어를 실행하면 확인할 수 있고 

전체 환경변수의 값은 env 명령으로 확인 가능합니다.

 

그럼 bash 셸의 주요 환경변수를 살펴볼까요?

 변수  

 내용 

 변수  

 내용 

 HOME  

 현재 사용자의 홈 디렉터리 

 PATH 

 실행 파일을 찾는 디렉터리 경로

 LANG 

 기본 지원되는 언어  

 PWD 

 사용자의 현재 작업 디렉터리 

 TERM

 로그인 터미널 타입 

 SHELL 

 사용자의 로그인 셸 

 USER 

 사용자의 이름 

 DISPLAY 

 X윈도에서 프로그램 실행 시 출력되는 창 

 COLUMNS

 현재 터미널의 컬럼 수  

 LINES 

 현재 터미널 라인 수 

 PS1

 1차 명령 프롬프트 변수 

 PS2 

 2차 프롬프트 변수 

 BASH 

 bash 셸의 경로 

 BASH_VERSION 

 bash 버전 

 HISTFILE 

 히스토리 파일의 절대 경로 

 HISTSIZE 

 히스토리 파일에 저장되는 명령어(줄)의 개수 

 HISTFILESIZE

 히스토리 파일의 크기 

 HOSTNAME 

 시스템의 호스트명 

 MAIL

 도착한 메일이 저장되는 경로  

 LOGNAME  

 로그인 이름 

 TMOUT

 사용자가 로그인 한 후 일정 시간 동안 작업을 하지 않을 경우에 로그아웃시키는 시간으로 단위는 초

 UID  

 사용자의 UID 

 OSTYPE 

 운영체제 타입 

HOME, PATH

HOME과 PATH는 Windows에서도 많이 봐서 익숙할거예요. 자바 설치할 때마다 환경변수 가서 JAVA_HOME이랑 PATH값 잡아줬잖아요 ㅎㅎ 윈도우에서도 뭔가를 설치할 때 자동으로 경로를 잡아주거나, 아니면 우리가 수동으로 실행 경로를 설정하잖아요. 여기서의 환경변수도 같은 의미를 가지고 있습니다. 

만약에 사용자가 /usr/bin/df와 같이 FULL 경로를 입력했다면 /usr/bin 디렉터리에 있는 df이라는 명령어를 바로 실행할 수 있으나 사용자가 df이라고만 입력하면 셸은 pr이라는 명령어가 어느 디렉터리에 있는지 알 수 없어요. 이 때 셸이 df라는 명령어를 어디에서 찾을 수 있는지 정의해주는 환경변수가 PATH입니다.

 

ex) echo $PATH

PATH=$PATH:$HOME/data

-> PATH 변수 값을 확인한 후, PATH 변수에 $HOME/data라는 경로를 추가한다.

 

PWD

PWD 환경 변수는 기초 명령어에서 배운 명령어 pwd랑 이름이 같죠?

결과도 같아요 ㅎㅎ현재위치를 출력해줍니다. 

 

LANG, TERM, SHELL, USER

환경 설정이 어떻게 되어있는지 echo로 몇 개를 확인해볼게요

현재 언어는 영어로 되어 있고 로그인한 터미널의 종류는 리눅스네요

echo $SHELL은 저번시간에 셸 확인하는 법으로 알려줬었는데 이제 이게 정확히 뭘 의미하는지 알겠죠?! SHELL 환경변수를 출력한거였어요 ㅎㅎ

USER환경변수: ubuntu로 처음에 로그인 했더니 USER 환경변수 출력결과로 ubuntu가 떴어요

 

그 다음 echo $PS1 인데요 PS는 프롬프트를 뜻해요. 그런데 프롬프트가 무엇인지 모르는 분들을 위해서~! 프롬프트가 무엇일까요?

 

프롬프트(Prompt)란?

컴퓨터가 입력을 받아들일 준비가 되어서 기다리고 있다고 알려주는 메세지입니다.

cmd창에서 > 이런식으로 표시된게 프롬프트고

리눅스 terminal에서 ~$또는 # 이렇게 뜨는게 프롬프트예요

[cmd 창에서의 프롬프트]

[터미널 창에서의 프롬프트]

 

PS1 프롬프트와 PS2 프롬프트의 차이점

환경변수 목록에 PS1이 있고 PS2가 있네요. PS1과 PS2 프롬프트 차이점은 무엇일까요?

MS도스 또는 윈도우의 도스창에서는 프롬프트 Prompt가 1 종류뿐이지만 리눅스에는 2종류가 있어요.

하나가 PS1 프롬프트이고 또 다른 하나가 PS2입니다.

보통 우리가 작업하는 터미널은 PS1 프롬프트예요. 여기다가 명령어를 입력하면서 작업하는데요 그런데 그 명령어가 완전히 입력되지 않았을 때에는 '>'가 떠요

'명령어가 완전히 입력되지 않았으니 더 입력하라는' 이러한 형태('>')의 단순한 프롬프트로 변하게 돼요. 얘가 PS2 프롬프트 입니다. 

 

echo $PS1

echo $PS1 하면 프롬프트1의 포맷 정보를 출력해줘요 

근데 위에 수행한 사진들을 보면 뭔 이상한 문자열들의 조합이 출력됐죠. 여기서 역슬레시와 \는 같은 기호입니다. 

그리고 기호들은 각각 어떤 형식을 뜻해요 예를 들어 \u는 현재 사용자의 이름을 나타낸답니다. 아직 프롬프트 형식 기호가 무엇을 의미하는지 모르기 때문에 이해가 안가는거예요 나중에 프롬프트 모양도 바꾸고 색상도 바꾸고 변경하는 실습을 해볼 거니 그냥 이런 것을 의미하는구나 훑고 넘어갑시다.

 

레드햇 계일 경우 

[사용자명@호스트명 현재폴더명]$ 형식을 갖습니다

우분투일 경우 사진처럼

${debian_chroot:+($debian_chroot)}\u@\h:\w\$

을 가져요

 

즉 이말은

얘가 \u@\h:\w\$ 형식이라는 말, \u@만 봐도 \u 사용자를 나타난다 했으니까 ubuntu@ 맞네요!

PS관련 환경설정은 이정도로 얘가 뭘 의미하는지만 이해하고 넘어갈게요.

 

echo로 각각의 환경변수 결과를 확인했으니 이어서~ 환경변수 전체 설정 한 번에 보기

env 명령어를 사용하면 전체 환경변수 값을 보여줘요

[env 명령어를 입력했을 때]

 

 

문제

리눅스마스터 2급 2016년 1회 기출

다음 중 셸의 환경변수에 대한 설명으로 틀린 것은?

1. 프롬프트 변경, PATH 변경과 같이 셸의 환경을 정의하는 역할을 수행하는 변수이다.

2. 미리 예약된 변수명을 사용한다.

3. bash에서는 소문자로 된 변수로 구성되어 있다.

4. 현재 설정된 전체 환경변수의 값은 env 명령으로 확인 가능하다.

 

다음 중 셸 사용 시 기본으로 지원되는 언어를 확인하려 할 때 알맞은 것은?

1. echo $PWD
2. echo $TERM

3. echo $LANG

4. echo $USER

 

다음 중 히스토리 파일의 스택크기를 변경하려 할 때 환경변수로 알맞은 것은?

1. HISTSIZE

2. HISTFILE

3. HISTORY

4. HISTFILESIZE

 

다음 중 bash에서 사용자가 로그인한 후 일정시간 동안 작업을 하지 않을 경우에 로그아웃 시키는 환경변수로 알맞은 것은?

1. HOSTNAME

2. TMOUT

3. TERM

4. UID

 

리눅스마스터 2급 2016년 2회 기출

다음 조건으로 bash 셸에서 변수를 설정하고 확인하려 할 때 알맞은 것은?

-----------------------------------------------------------------------------------

ㄱ. city 변수값은 seoul로 지정한다

ㄴ. echo 명령으로 city 변수값을 출력한다.

-----------------------------------------------------------------------------------

1. ㄱ. city=seoul ㄴ. echo $city

2. ㄱ. city=seoul ㄴ. echo $CITY

3. ㄱ. seoul=city ㄴ. echo $CITY

4. ㄱ. seoul=city ㄴ. echo $city

 

리눅스마스터 2급 2016년 3회 기출

다음 중 현재 셸에 선언된 모든 환경 변수를 확인하는 명령어로 알맞은 것은?

1. test

2. env

3. ksh

4. while