방학 불태우기 2

김민석·2021년 7월 20일
0

방학

목록 보기
2/16

Shell

쉘 이란 명령어와 프로그램을 실행할 때 사용하는 인터페이스로 사용자의 명령어를 해석하고 운영체제가 알아들을 수 있게 지시해 준다.

쉘은 윈도우, 유닉스, 리눅스 등 어느 운영체제에서나 꼭 필요하다.

쉘 종류

  1. Bourne shell (sh)
    최초의 쉘로 대부분의 리눅스에 기본적으로 설치가 되어 있다. 설치 위치는 /bin/sh 이다.

  2. C shell (csh)
    sh의 사용성을 높이거 더욱 강력하게 만들어 졌다. C언어 기반이고, 이로 인해 강력한 프로그램 작성 기능을 지니고 있다.
    설치 위치는 /bin/csh 이다.

  3. tee-see-shell (tcsh)
    csh에 명령 행 완성과 명령 행 편집 기능을 추가한 것이다. 설치 위치는 /bin/tcsh 이다.

  4. Z shell (zsh)
    많은 쉘들의 기능을 지니고 있다. 따라서 많은 개선 사항들이 적용된 확장형 sh이다.
    설치 위치는 /bin/zsh 이다.

  5. 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 설정 점검, 디스크 상태 및 파일 시스템 점검 등 시스템을 점검하는데 있어서 쉘 스크립트를 많이 사용하게 된다.

참고 : https://www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=40&dbnum=175565&mode=detail&type=techreport

리눅스와 비슷한 터미널 환경 설정하는 법

맥북을 사용하기 때문에 맥북 기준으로 작성하겠다.

맥북은 macOS를 사용하는데 macOS는 유닉스 기반의 os이다. 따라서 리눅스의 기능들을 어느정도는 사용할 수 있다.

하지만 리눅스에서 가능한 것이지만 macOS에서는 할 수 없는 것들이 꽤 있다.

가상머신을 통해 맥북에서도 리눅스를 사용할 수 있다.

가상머신

운영체제 내에 가상 환경을 만들어 다른 운영체제를 실행할 수 있도록 해준다.

VirtualBox, Vmware, Parallels 등을 통해 가상환경을 구축할 수 있다. 이 때 운영체제 역시 다운받아서 적용해 주어야 한다.

가상 환경을 만들어 준 후, 로컬 컴퓨터로 원격 접속을 하면 로컬 컴퓨터에서 리눅스를 사용할 수 있게 된다.

가상 머신의 장점은 운영체제 간 쉬운 전환, 안전한 환경, 설치가 용이 하다는 점이 있다.

가상 머신의 단점으로는 가상 시스템의 운영체제는 시스템 리소스에 대한 전체 엑세스 권한을 가지고 있지 않고, 무거운 프로그램을 실행한다면 컴퓨터에 부하가 가해질 것이다.

참고 : https://anchoki.tistory.com/923

터미널 쉽게 사용하기 - Zsh

리눅스의 기본 쉘들은 Bash를 사용한다.

Zsh는 Bash 명령어가 대부분 호환이 됨과 동시에 더 좋은 기능들과 사용성들을 제공한다.

Oh-My-Zsh를 통해 Zsh의 플러그인과 테마를 쉽게 관리할 수 있다.

참고 : https://black7375.tistory.com/15

profile
김민석의 학습 정리 블로그

0개의 댓글