쉘 이란 명령어와 프로그램을 실행할 때 사용하는 인터페이스로 사용자의 명령어를 해석하고 운영체제가 알아들을 수 있게 지시해 준다.
쉘은 윈도우, 유닉스, 리눅스 등 어느 운영체제에서나 꼭 필요하다.
Bourne shell (sh)
최초의 쉘로 대부분의 리눅스에 기본적으로 설치가 되어 있다. 설치 위치는 /bin/sh 이다.
C shell (csh)
sh의 사용성을 높이거 더욱 강력하게 만들어 졌다. C언어 기반이고, 이로 인해 강력한 프로그램 작성 기능을 지니고 있다.
설치 위치는 /bin/csh 이다.
tee-see-shell (tcsh)
csh에 명령 행 완성과 명령 행 편집 기능을 추가한 것이다. 설치 위치는 /bin/tcsh 이다.
Z shell (zsh)
많은 쉘들의 기능을 지니고 있다. 따라서 많은 개선 사항들이 적용된 확장형 sh이다.
설치 위치는 /bin/zsh 이다.
Bourne-again shell (bash)
현시대에 가장 많이 사용하는 shell이다.
GNU 운영체제, 리눅스, 맥 OS 등이 기본 쉘로 채택하고 있다.
csh와 sh의 기능들을 많이 포함하고 있으며 쉘 스크립트에서 주로 사용된다.
설치 위치는 /bin/bash 이다.
이 밖에도 더 많은 쉘들이 있지만 bash 가 가장 많이 사용된다.
쉘 명령문은 여러가지 옵션이나 인자값들을 활용한다.
대표적인 것들 몇가지만 알아보자.
ls
현재 디렉토리의 내용을 보여주는 명령어로 -al 옵션과 같이 사용될 경우 디렉토리 내의 폴더에 대한 권한, 숨겨진 파일 등 좀 더 자세히 살펴볼 수 있다.
mkdir
디렉토리를 생성하는 명령어 이다.
cd
디렉토리를 이동하는 명령어로 cd 뒤에 경로를 추가하여 해당 디렉토리로 이동이 가능하다.
cp, mv, rm
파일 복사, 이동, 제거의 명령어들이다.
위와 같이 폴더나 파일을 다루는것 외에도 쉘 스크립트를 활용하여 쉘의 명령을 제어하거나 확인할 수 있다.
echo "asdfsadfasdf"
출력문으로 원하는 문자열을 출력 가능하다.
변수
변수=값 을 통해 선언하며 변수를 사용할 때는 $를 붙여서 표기한다.
예를들어 N=hi 로 변수에 대한 값을 넣어 줬다면 echo $N 을 통해 변수를 활용할 수 있다.
함수
함수명(){ ... }과 같이 선언을 해 준후 함수를 호출하여 사용할 수 있다.
반복문
List = "1 2 3 4 5"
for i in ${List}
do
echo "$i"
done
while [ 조건 ]
do
echo "문자열"
done
다른 언어들과 같이 반복문에는 for문과 while문 등이 존재한다.
if [ 조건 ] then
. . .
fi
if [ 조건 ] then
. . .
elif [ 조건 ] then
. . .
else
. . .
fi
다른언어돠 마찬가지로 if를 사용하여 조건문을 나타낼 수 있다.
이 밖에도 다양한 문법들을 통해 좀 더 깊고 다양한 코드를 구성할 수 있다.
유닉스
유닉스는 교육 및 연구기관에서 주로 사용되는 범용 다중 사용자 방식의 시분할 운영체제이다.
다양한 시스템 사이에서 서로 이식할 수 있고, 멀티 태스킹과 다중 사용자를 지원하도록 설계되었다.
유닉스는 서버에 특화된 운영체제로 포털이나 대기업의 서버에 주로 사용되며 보안이 뛰어나다.
리눅스
리눅스는 다중 사용자, 다중 작업, 다중 스레드를 지원하는 네트워크 운영체제이다.
유닉스에서 파생된 운영체제로 오픈소스이다.
코어 레이어, 쉘 레이어, 응용 계층으로 추상화 할 수 있다.
코어레이어
커널 계층으로 유닉스/리눅스 시스템의 기반으로 하드웨어 플랫폼에 직접 연결되어 시스템의 다양한 리소스를 제어 및 관리하고 프로세스의 운영을 효과적으로 구성하며, 하드웨어의 기능을 확장한다.
쉘 레이어
쉘 계층은 사용자와 상호작용 하기 위한 인터페이스이다.
사용자가 프롬프트 명령을 입력하면 쉘은 이를 해석하고 실행하여 결과를 출력한다.
시스템에서 제공하는 명령어들을 사용하여 작업을 빠르고 쉽게 수행할 수 있다.
응용 계층
응용 계층은 X Window 프로토콜을 기반으로 하는 그래픽 환경을 제공한다.
참고 : https://yutube.site/52?category=949536
쉘 스크립트는 유닉스와 리눅스 시스템을 관리하는 수단으로 많이 사용된다. 특히 시스템을 점검할 때 있어서 내,외부 명령어의 결과를 재가공 할 경우 많이 사용한다.
추가적으로 단순 반복 작업을 단순화 하고 자동화 하여 관리자의 수고를 덜 수 있다는 점 때문에 쉘 스크립트를 많이 사용한다.
다음은 사용 예시들이다.
서버 상태 감시
서버의 상태를 감시할 때 주로 ping 을 사용한다. ping을 통해 서버의 작동 여부를 확인할 수 있다.
서버가 적을 경우 명령어를 직접 입력하여 실행할 수 있지만 서버가 많아진다면 직접 입력하여 실행하기 어려워 진다.
또한 서버관리 시스템이나 네트워크 관리 시스템을 도입하여 좀 더 세부적으로 관리할 수 있지만 단순히 서버의 작동 여부만을 확인하기 위해 사용하는 것은 너무 복잡해 질 수 있다.
따라서 쉘 스크립트를 이용하여 많은 양의 서버를 간단하게 관리할 수 있다.
데몬 프로세스의 시작과 정지
시스템을 관리할 때 수행하는 많은 절차 중 데몬 프로세스의 시작, 정지가 많이 포함된다.
이 프로세스가 단순한 프로세스라면 간단한 명령어를 통해 시작, 정지 시킬 수 있지만 여러 프로세스가 엮여있다면 단순 명령어를 통해서 시작, 정지하는 것은 어려운 일이 될 것이다.
쉘 스크립트를 이용하여 좀 더 간단하게 할 수 있다.
crontab을 이용한 자동화
쉘 스크립트를 이용하여 다양한 일을 할 수 있지만 주기적으로 해야하는 항목들이라면 매번 쉘 스크립트를 실행시켜 주는 것 역시 번거로운 일이다.
crontab을 이용하여 주기를 설정해 준다면 그 주기마다 쉘 스크립트가 자동으로 시행되도록 할 수 있다.
프로세스 개수 점검
시스템 관리자는 프로세스 가동 여부를 점검한다. 대부분의 프로그램들이 단일 프로세스 보다는 여러 프로세스로 구성된 경우가 많기 때문에 관리자들은 프로그램 구성 별 프로세스 개수를 점검하여 일차적 시스템 이상 유무를 판단할 수 있다.
이 밖에도 주요 설정 파일 권한 점검, DNS Zone transfer 설정 점검, 디스크 상태 및 파일 시스템 점검 등 시스템을 점검하는데 있어서 쉘 스크립트를 많이 사용하게 된다.
맥북을 사용하기 때문에 맥북 기준으로 작성하겠다.
맥북은 macOS를 사용하는데 macOS는 유닉스 기반의 os이다. 따라서 리눅스의 기능들을 어느정도는 사용할 수 있다.
하지만 리눅스에서 가능한 것이지만 macOS에서는 할 수 없는 것들이 꽤 있다.
가상머신을 통해 맥북에서도 리눅스를 사용할 수 있다.
운영체제 내에 가상 환경을 만들어 다른 운영체제를 실행할 수 있도록 해준다.
VirtualBox, Vmware, Parallels 등을 통해 가상환경을 구축할 수 있다. 이 때 운영체제 역시 다운받아서 적용해 주어야 한다.
가상 환경을 만들어 준 후, 로컬 컴퓨터로 원격 접속을 하면 로컬 컴퓨터에서 리눅스를 사용할 수 있게 된다.
가상 머신의 장점은 운영체제 간 쉬운 전환, 안전한 환경, 설치가 용이 하다는 점이 있다.
가상 머신의 단점으로는 가상 시스템의 운영체제는 시스템 리소스에 대한 전체 엑세스 권한을 가지고 있지 않고, 무거운 프로그램을 실행한다면 컴퓨터에 부하가 가해질 것이다.
참고 : https://anchoki.tistory.com/923
리눅스의 기본 쉘들은 Bash를 사용한다.
Zsh는 Bash 명령어가 대부분 호환이 됨과 동시에 더 좋은 기능들과 사용성들을 제공한다.
Oh-My-Zsh를 통해 Zsh의 플러그인과 테마를 쉽게 관리할 수 있다.