리눅스: 쉘
SHELL 이 무엇인가?
SHELL 과 KERNEL은 무엇인가?
이번시간에는 SHELL에 대해서 알아보는 강의이다.
단어의 뜻을 살펴보자면 SHELL은 껍데기 혹은 주변, KERNEL은 알맹이, 핵심이라는 뜻을 가지고 있다.
일단 이미지를 통해서 개념을 각각 어떤 느낌인지 확인하자!
우리가 컴퓨터를 사용한다는 것은 기계를 동작시켜서 원하는 일을 하는 것이다.
커널이 하드웨어를 감싸고 있다. 하드웨어 물리적인 기계를 직접적으로 제어하는 운영체제에서 가장 중심이 되는 코어가 바로 커널이다.
그렇다면 쉘은? 사용자라고 한다. 사용자는 우리가 될 수 있다.
우리가 리눅스에서 명령을 쉘에게 입력하면 쉘이 커널이라는 프로그램이 알아 들을 수 있게 명령을 재해석해서 커널에게 전달해주는 역활이다. 쉽게말해서 컴파일러 역할이라고 생각해도 좋을 것 같다.(하지만 컴파일러보다는 더 많은 일을 하겠지?)
그렇다면 왜 커널과 쉘을 한덩어리로 만들지 않고 분리한 것인가?
쉘은 사용자가 사용하는 명령어를 해석하는 프로그램이다. 이 뜻은 쉘이 여러가지가 있다고 존재하면 사용가 사용할 수 있는 다양성이 증가하기때문이다라고 짐작한다고 한다.
우리가 지금까지 써왔던 쉘은 어떤 쉘이며 다른 쉘을 사용하면서 커널과 다른점을 한번 확인해보자!
쉘이 무엇인가를 들어내는 것이 목표이다.
bash 쉘과 zsh과 어떤 차이가 있는가?
부모가 같기 때문에 비슷한 성향이다. 하지만 같은 명령어를 사용해도 결과가 다르게 나온다.
결과는 같지만 zsh이 편의성이 더 높다. bash가 조금 더 정직하게 입력해줘야 한다.
사용자가 입력하는 명령어들의 편의성이 각각의 쉘마다 다르다.
커널과 쉘이 분리되어 있어서 사용자가 본인과 맞는 쉘을 사용하면 더 편의성이 높아진다.
원하는 쉘을 다운 받아서 본인에게 최적화된 환경을 만들 수 있다.
이번 시간의 주제는 쉘 스크립트!
쉘 스크립트는 무엇인가?
스트립트는 대본, 각본이라는 뜻을 가지고 있다. 대본은 배우들이 어떤 순서대로 움직여야할지 흐름이 적여있다.
여러개의 명령을 순차적으로 실행하는 것을 통해서 업무를 처리해야할 때가 있다.
이런 순서를 어디에 적어두고 재사용할 수 있으면 좋지 않을까?
필요할 때마다 스크립트를 저장해놓았다가 불러와서 실행시키면 편할 것이다. 그래서 쉘에서 실행되는 명령들을 어딘가에 적어두는 방법을 알아볼 것이다.
이렇게 적어 둔 것을 컴퓨터가 그대로 실행하는 방법을 확인하자!
쉘 스크립트 분야는 프로그래밍 언어분야이다. 그래서 이번에는 쉘 스크립트가 어떤 것이고 이것이 자동화된 여러가지 기능들을 수행할 수 있다는 것을 보여줄 수 있다.
예시
예를 들어서 log라는 파일을 자동으로 백업을 해주는 루틴이 있다고 하자. 이를 일반적으로 명령어를 쳐서 실행하면 적어도 4~5개의 명령어를 거쳐서 실행되게 한다. 하지만 쉘 스크립트를 이용해서 미리 지정을 해두면 위와같이 번거롭게 치지 않아도 된다.
쉘 스크립트를 만들어보자. 쉘 또한 프로그램이다. 그러면 이 프로그램은 어디에 위치해 있을까?
#!/bin/bash
애초에 프로그램을 작성할 때, bash 프로그램을 사용했기 때문에 위에 첫번째 줄은 bash를 통해 명령어 해석하라는 뜻이다.
우리가 작성하고 있는 백업이라는 프로그램을 실행시켰을때, 위에 줄을 보고 밑에 작성하는 코드들이 bin/bash라는 프로그램을 통해서 해석하는 것이다 라는 뜻이다.
bash가 가지고 있는 문법이 있다. 이 문법대로 코드를 작성해야 한다.
만약에 현재 디렉토리에 bak라는 디렉토리가 없다면 만들고, 있다면 만들지 않는다.
그리고 현재 디렉토리에 log파일을 bak 디렉토리에 넣는다.
if [ -d bak]; 현재 디렉토리에 bak라는 디렉토리가 존재하는가?
then mkdir bak 디렉토리가 없다면 만든다.
fi 라고 써주는 것은 조건문이 끝났다는 것이다.
이 부분은 디렉토리가 없다는 것을 확인할 수 있다.
그리고 cp *.log bak 현재 디렉토리 bak파일을 bak디렉토리에 저장한다.
그러면 backup이라는 파일이 나온다. 파일을 실행시키려면 ./파일이름 을 치면 된다.
하지만 에러가 뜬다. 왜냐하면 리눅스에서는 이 파일이 프로그램인지 아직 모르기 때문이다.
그러기 위해서는 권한을 바꿔 줘야한다. 권한을 바꿔 줄 때는 chmod라는 명령어를 사용한다. 이 부분은 권한 부분에서 더 자세하게 배우자.
이렇게 쉘 스크립트가 어떤 개념인지 간단하게 확인했다.