나는 이렇게 학습한다/Etc

리눅스 #쉘과 커널, 쉘 스크립트

daco2020 2021. 9. 14. 16:16

 오늘 배운 것 

커널 : 알멩이, 핵심

쉘 : 껍데기, 주변

>>> 사용자가 명령을 입력하면 그 명령을 컴퓨터가 이해할 수 있도록 하는 프로그램이 쉘(shell)입니다. 

(쉘 : 사람이 이용하기 쉬운 명령어로 커널에게 전달하는 것)

쉘과 커널이 분리된 이유는 무엇일까?

쉘은 사람의 명령어를 해석하는 역할. 즉 사용자 입장에서 편한 쉘 프로그램을 사용하면 각자 취향에 맞게 커널을 제어할 수 있기 때문에 분리 된 것이 아닐까 추정됨.

다양한 쉘 프로그램을 사용해보면 쉘과 커널에 대한 이해도가 높아질 것

 

bash vs zsh

zsh이 추가적인 기능을 갖고 있기 때문에 보다 더 편리하다는 평가를 받고 있다.

ex. 

cd dir1 Music

>>> dir1 디렉토리에서 Music 다이렉트로 이동가능

cd /U [+ 탭]

>>> 이니셜과 탭을 이용해 자동 완성 기능 사용가능

이렇듯 자신의 취향에 맞는 쉘을 다운받아 리눅스를 이용할 수 있음

 

 

Shell script

자주 반복 사용하는 또는 어쩌다 사용하더라도 복잡한 명령어라면? 

어딘가에 저장해두었다가 불러와서 실행시키면 편하다!

>>> 쉘 스크립트로 자동화하여 사용할 수 있다

 

*.log

* : 와일드카드(조커카드) 같은 것으로 공통된 사항이 아닌 상이한 내용 모두 포함한다는 뜻이다.

if [ 조건 ]; than = if 조건문 이다음 아래에 탭키 1번 누르고 명령어 적기

! = <> 라는 뜻

fi = if 조건문 종료

nano backup


<backup>

#!/bin/bash
if ! [ -d bak ]; then
        mkdir bak
fi
cp *.log bak

// 코드 해석

6행 bash shall 명령어로 수행하라
7행 만약 디렉토리 bak 이 없다면
8행 디렉토리 bak 를 만들어라
9행 if 종결
10행 확장자 .log 를 사용하는 모든 파일을 디렉토리 bak 에 복사해라
bash-3.2$ nano backup
bash-3.2$ ls -l
total 8
-rw-r--r--  1 daco  staff    0  9 14 15:19 a.log
-rw-r--r--  1 daco  staff    0  9 14 15:19 b.log
-rw-r--r--  1 daco  staff   62  9 14 15:31 backup
drwxr-xr-x  5 daco  staff  160  9 14 15:20 bak
-rw-r--r--  1 daco  staff    0  9 14 15:19 c.log
bash-3.2$ ./backup

bash: ./backup: Permission denied
// backup 을 실행할 권한이 없다는 메시지
bash-3.2$ chmod +x backup
// backup 을 실핼할 수 있도록 x 를 추가하는 명령어

bash-3.2$ ls -l
total 8
-rw-r--r--  1 daco  staff    0  9 14 15:19 a.log
-rw-r--r--  1 daco  staff    0  9 14 15:19 b.log
-rwxr-xr-x  1 daco  staff   62  9 14 15:31 backup
drwxr-xr-x  5 daco  staff  160  9 14 15:20 bak
-rw-r--r--  1 daco  staff    0  9 14 15:19 c.log
bash-3.2$ ./backup
bash-3.2$ rm -rf bak
bash-3.2$ ls -l
total 8
-rw-r--r--  1 daco  staff   0  9 14 15:19 a.log
-rw-r--r--  1 daco  staff   0  9 14 15:19 b.log
-rwxr-xr-x  1 daco  staff  62  9 14 15:31 backup
-rw-r--r--  1 daco  staff   0  9 14 15:19 c.log
bash-3.2$ ./backup
bash-3.2$ ls -l
total 8
-rw-r--r--  1 daco  staff    0  9 14 15:19 a.log
-rw-r--r--  1 daco  staff    0  9 14 15:19 b.log
-rwxr-xr-x  1 daco  staff   62  9 14 15:31 backup
drwxr-xr-x  5 daco  staff  160  9 14 16:04 bak
-rw-r--r--  1 daco  staff    0  9 14 15:19 c.log
bash-3.2$ ls -l bak
total 0
-rw-r--r--  1 daco  staff  0  9 14 16:04 a.log
-rw-r--r--  1 daco  staff  0  9 14 16:04 b.log
-rw-r--r--  1 daco  staff  0  9 14 16:04 c.log
bash-3.2$

// backup 이 정상적으로 실행되는 것을 볼 수 있다.
// 이것을 '쉘 스크립트' 라고 한다.

 

 

 


 

 

 오늘 느낀 것 

뭔가 슬슬 복잡하고 명령어를 외우기가 쉽지 않아 보인다. 매일매일 자주 쓴다면 모를까. 이건 외워도 며칠만 지나도 다 잊어버릴 것 같다. 어쨌든 오늘은 쉘이란 것을 배웠고, 쉘이라는 프로그램이 다양하다는 것을 알았고, 또 함수처럼 명령어들의 조합을 저장하여 원할 때 꺼내 쓸 수 있다는 것을 알게되었다. 뭐랄까 코딩이랑 비슷한 면도 없잖아 있는 것 같다. 리눅스 mysql 코딩 등 왜 분리되어 있는 걸까 하는 생각도 든다. 물론 용도가 서로 다르긴 하지만 여기저기 열어놓고 쓰기에는 불편하지 않나?