Gae Ko's Blog

[리눅스] Shell , Kenel , Shell Script 란? 본문

프로그래밍언어/기타 등등

[리눅스] Shell , Kenel , Shell Script 란?

Gae Ko 2018. 1. 19. 02:56

SHELL VS KERNEL 


SHELL이란?

우리가 도스상에서 내리는 대부분의 명령은 command.com이라는 파일이 처리합니다. 전문가들이 말하는 용어로 command.com파일은 운영체제의 쉘(shell)프로그램이라고 말한다. 쉘 프로그램은 사용자가 내린 명령을 운영체제가 수행할 수 있도록 명령을 입력받고 이를 컴퓨터의 운영체제에 전달하는 일을 한다. 다시 말해 사용자가 내린 명령을 운영체제가 수행할 수 있도록 통역해주는 일을 한다.


그럼 실질적인 운영체제의 핵심은 무엇일까?


운영체제의 핵심은 커널(kernel)부분이다. 실질적으로 사용자가 내린 명령을 수행하면서 컴퓨터의 하드웨어를 조작하는 파일이다.

이처럼 실질적으로 사용자의 명령을 수행하면서 파일의 입출력을 담당하고, 하드웨어를 관리하는 프로그램을 커널이라고 한다. 


쉘은 사용자가 내린 명령을 커널이 이해할 수 있도록 통역해준다.


그렇다면 왜 쉘과 커널을 구분할까?


운영체제의 핵심은 커널이다. 그러나 기계적인 부분이 많기 때문에 사용자가 바로 명령어로 커널을 제어하기는 매우 어렵다. 그래서 사용자가 내린 명령을 운영체제의 핵심인 커널 부분이 이해할 수 있도록 번역해주는 장치가 필요하다. 이 번역장치에 해당하는 프로그램이 바로 쉘 프로그램이다. 

 

다음의 그림을 통해 쉽게 생각하여 보자.


사용자가 shell을 이용해 kernel로 하드웨어를 조정한다는 그림.


사용자마다 사용하는 shell의 종류가 다름을 보여주는 그림.



사용자가 shell을 통해 명령을 보내면 유닉스 kernel에 요청을 하면 그 결과를 가져와서 사용자에게 그 결과를 보여준다.



// 교육서버로 Xshell 을 쓰고 있는데 shell이라는 뜻이 이런 거구나...!!! 신기하당

// Xshell은 유닉스를 사용하기 위한 원격 접속 클라이언트  


 → 쉘 이라는 구체적인 카테고리에 속하는 bash라는 프로그램을 사용하고 있다는 뜻.


사용자가 쉘에게 보내는 명령이 하나일 수도 있지만 대부분 많은 경우 하나의 명령으로 업무가 끝나는게 아니라 

여러 개의 명령이 순차적으로 실행하는 걸 통해서 하나의 업무가 이루어진다.


그 명령의 순서 또는 각본을 어딘가에 적어놓고 나중에 재사용할 수 있도록 하는게 쉘 스크립트(shell script) 

다시 말해서 쉘 스크립트를 통해 자동화된 작업을 처리할 수 있다.



echo $0 의 출력결과는 현재 사용하는 쉘의 정보를 알려준다. (출력결과 앞에 '-'가 앞에 붙을 경우 로그인시 설정되는 기본 쉘임을 알려줌)

현재 bash라는 쉘 프로그램을 사용하고 있음을 알 수 있다. 

그리고 /bin 이란 기본적인 명령어가 저장된 디렉토리로, ls 명령어를 이용하여 그 내부를 살펴보면 위 사진과 같다.

저걸 통해 우리가 사용하는 명령어들이 쉘 스크립트 파일형태로 존재하여 작동함을 알 수 있다.


▶ 쉘 스크립트 예시 


다음은 new_file라는 이름의 디렉토리를 만들라고 하는데 new_file라는 이름의 디렉토리가 있는지 확인해서 없으면 만들고 확장자가 log인 모든 파일을 그 디렉토리 안에 복사하는 그런 명령들이 포함된 쉘 스크립트를 짜본 것이다.

1
2
3
4
5
6
7
#!/bin/bash
if ! [ -d new_file ]; then 
    mkdir new_file
fi
 
cd *.log new_file
 
cs


쉘 스크립트 작성시, 가장 첫 라인에 #!/bin/bash 를 기제하여야함.

#!/bin/bash 

운영체제는 이 코드를 보고 아래에 작성되는 코드들이 bin디렉토리 아래에 있는 bash라는 프로그램을 통해서 해석되어야 한다는 사실을 앎.


직접 해본 과정을 설명하면 다음과 같다. (원래 안적을라 했는데 신기해서 다음에 또 볼라고 올린당 ㅎ.ㅎ)


일단 touch명령어를 사용해 확장자가 log인 세 개의 빈파일을 생성한다. 그리고 ls -l로 생성된 세 개의 파일을 확인할 수 있다.

그리고 make라는 쉘 스크립트를 작성한다. 스크립트 내 코드는 위 코드와 동일하다.


make라는 쉘스크립트를 생성하고 다시 ls -l로 생성된 make를 확인하자. 

make가 있는 행의 맨 앞부분에 -rw-rw-r-- 라고 되있는 부분을 볼 수 있는데 맨 뒤 -- 는 실행할 수 없는 파일이라는 뜻으로 -x로 끝나야 실행가능한 파일이라는 뜻이다. 그러니까 지금 쉘 스크립트를 생성하였는데 리눅스가 이 파일이 실행가능한 파일임을 알려줘야 한다. 


실행기능을 추가해주는 명령어는 chmod +x FILENAME 

make파일에 실핼기능을 추가해주고 나서 다시 ls -l로 확인하면 이름이 초록색으로 바뀐 거 뿐만 아니라 -x로 바뀐 것도 볼 수 있다.  


이제 make를 실행시켜보자 → ./make 

현재 디렉토리에 있는 make 파일을 실행시켜라 라는 명령어 

실행시킨 후 현재 디렉토리에 new_file라는 디렉토리가 새로 생긴 것을 볼 수 있다.

make의 스크립트 코드 내용을 생각하면 제대로 되고 있다. 그럼 이제 저 디렉토리 안에 확장자가 log인 파일들이 복사가 됬는지 확인해보자.



결과를 보니 아주 잘 실행이 되었다. (뿌듯 ㅎ)



사실 암호학 과제를 하다가 확장자가 'sh'라는 파일과 '파일 스크립트'가 무엇인지 몰라서 구글링을 하게 되었는데

이를 통해 쉘과 커널이 무엇인지와 쉘 스크립트가 무엇인지 알게 되었다. 

과제 설명을 더 잘 이해하게 되었다. ㅎ_____ㅎ  


참고 : https://opentutorials.org/course/2598/14204

'프로그래밍언어 > 기타 등등' 카테고리의 다른 글

SSH란 무엇인가? // 링크  (0) 2018.01.19