Shell Environment
Computer Science/OpenSource+Git

Shell Environment

#Shell이란?

: A special-purpose utility to interpret command line

: Shell은 special-proposed utitlity로, 응용프로그램(utility)과 커널 사이에 위치해있으며 응용프로그램의 명령어와 커널이 대화를 하도록 만들어준다. 그래서 명령어 해석기라고 부른다.

-> 우리가 명령어를 입력하게 되면 컴퓨터에서는 쉘이 명령어를 받아 해석하여 커널에게 보내면, 커널은 우리가 내려주었던 동작을 하게되고, 그에 대한 결과를 사용자에게 전달하려고 다시 쉘에게 응답을 보내 사용자에게 전달된다.

 

EX) Bourne Shell-> C shell-> Korn Shell ->Bourne Again Shell(Bash)

: 세대를 거치면서 기능이 추가되었다.

-> Bash shell은 Brian Fox/GNU project를 통해 개발되었다.

 

#Bash

: Bash shell은 많은 리눅스 버전에서의 Default shell이며, 이는 Command Line Interpreter로, prompt를 통해 Command를 입력받아 사용자와 상호작용한다.

 

# Advantages/Disadvantages

: Shell program은 linux shell에 의해 작동하도록 디자인된 프로그램이다.

 

1) 장점

 - 사용하기 쉽다(shell program 작성이 코드를 작성하는 것 보다 훨씬 빠르다)

 - 프로그램의 요구사항 구현에는 기여하지 않지만, 본래 호환성이 없는 부분끼리 결합하기 위해 작동하는 코드인 글루코드로써 작동한다. -> Shell을 통해 여러 프로그램이 상호작용한다.

- 자주 사용되는 operation들을 자동화할 수 있다.

 

2) 단점

 - 문법이 어렵고, 에러 발생률이 높다. 

 - 다른 프로그래밍 언어에 비해 느리고, 모든 shell command마다 새로운 프로세스가 생성된다.

 - 오류가 큰 문제를 발생시킬 수 있다 : 커맨드 하나만으로 모든 파일을 삭제할수도..

 

 

#Shell Variables

- 쉘 변수란 프로그램 동작에 영향을 미치는 값들의 모임으로, 수행에 필요한 정보들이 있을 수 있다.

EX) PWD=/home/user/oss , PATH=/bin:/user/oss , HOME=/home/usr

- shell에 딸려있는 변수로, 새로 세팅하고, 사용하며, 값을 해제할 수도 있다.

 

1) Environment Variables: 환경변수

-> 각 parent process로부터 복사되어 자식에게 되물림되는 변수로, 모든 환경변수는 새로운 프로그램을 실행할때 부모 환경변수로부터 copy된다. 따라서 리눅스 쉘 전반에 적용되는 전역변수이다.

 

- 내장 환경변수(Built-in environment variables) 

: 리눅스에 의해 미리 정의된 환경변수가 존재하며, 이는 모두 대문자인 이름을 가져야 한다.

EX1) PATH

- PATH 명령어는 쉘이 COMMAND를 찾도록 도와준다.

- PATH에 들어있는 내용은 매번 shell에 command를 입력할때마다 쉘이 검색하는 디렉토리들의 리스트이다.

- directory를 더하고 싶을 때는 다음과 같이 입력한다.

export PATH=$PATH:새로 등록할 프로그램의 주소

- 환경변수를 등록하는 주요한 이유는 새로운 프로그램을 매번 sh명령어로 실행하여 매번 이 프로그램이 있는 폴더까지 와서 실행하는 게 아닌, 어디에서나 add 1 2와 같이 명령어처럼 바로 실행할 수 있게하기 위함이다.

 

EX2) cd: 디렉토리 변경, pwd : 현재 디렉토리 출력

2) 쉘 변수 설정

-> 쉘 변수를 설정할때는 공백이 있어서는 안되며, 설정된 환경변수를 확인하고 싶으면 set cmd를 사용한다.

-> 쉘 변수를 해제하고 싶으면 unset cmd를 사용한다.

 

3) 환경변수 설정

: 환경변수(쉘 전역변수)를 사용할때는 export cmd를 사용한다. 확인할 때는 env cmd 사용

 

-> 위 그림을 통해서 환경변수는 자식에게도 전파되지만, 쉘 변수인 no1은 자식 프로세스에서 출력되지 않는다.

 

+) export -n option을 통해서 환경변수를 일반 shell 변수로 바꿔 버릴 수 있다.

-> 함께 협업할때 각각 사용하는 version이 다를 수 있으므로 개발 시에 환경변수를 통해 미리 약속된 경로를 사용한다.

'Computer Science > OpenSource+Git' 카테고리의 다른 글

Linux Command and Redirection  (0) 2021.12.11
shell command 확장과 명령어 치환  (0) 2021.12.11
Git Branch Command  (0) 2021.10.24
Git Version Control Command  (0) 2021.10.24
Git Overview/ Linux Basic Command  (0) 2021.10.24