Shell의 기본

Seong Woong Kim·2023년 3월 7일
0

Linux / Ubuntu

목록 보기
12/14

💡 이 문서는 한빛미디어 - 이것이 우분투/리눅스다를 기반으로 공부하면서 체화를 위해 정리하는 글입니다. 💡



셸(Shell)이란??


정의


리눅스의 셸은 명령어와 프로그램을 실행할 때 사용하는 인터페이스입니다.

셸은 사용자가 입력한 명령을 해석해 커널로 전달하거나, 커널의 처리 결과를 사용자에게 전달하는 역할을 합니다.

  • 쉽게 말해, Server(B)의 ‘텍스트 모드’나 X windows의 ‘터미널’처럼 명령을 입력하는 환경이라고 생각해도 무방합니다.

셸의 구조


기능


1. 명령어 해석기 기능

사용자와 커널 사이에서 명령을 해석하여 전달 (대화식 사용)

2. 프로그래밍 기능

셸 자체 내에 프로그래밍 기능이 있어서 프로그램을 작성할 수 있음

셸 프로그래밍 기능을 이용하면 여러 명령을 사용해 반복적으로 수행하는 작업을 하나의 프로그램으로 제작 가능

  • 셸 프로그램 = Shell Script

3. 사용자 환경설정 기능

초기화 파일 기능을 이용해 사용자의 환경을 설정할 수 있음

로그인할 때 이 초기화 파일이 실행되서 사용자의 초기 환경이 설정됨.

셸을 공부하는데 가장 중요한 것 중 하나가 환경변수의 이해

리눅스의 셰션 변수들을 정의하여 사용자가 리눅스 환경을 설정 가능


종류와 특징


1. Bourne Shell 계열


Bourne Shell (sh)

유닉스 셸의 오리지널, 최초의 본격적인 셸

  • 모든 유닉스 시스템에서 사용할 수 있지만 미흡한 점이 많음

  • 1974년 ‘Stephen Bourne’이 개발한 최초의 셸

가장 큰 단점은 상호대화식 방식을 취하고 있지 않음

프롬프트 - 일반 유저는 $ 프롬프트 / root 유저는 # 프롬프트 사용

  • /bin/sh

Korn Shell (ksh)

1983년 AT&T사의 벨 연구소에서 근무하던 데이비드 콘이 개발했음

Korn Shell 역시 오리지널 bourne shell (sh) 을 확장해서 만들었고, 벨 연구소 사용자들의 요청으로 C 셸의 많은 기능들을 추가

C 셸의 특징들을 모두 제공하면서 처리 속도도 빠른 장점

  • /bin/ksh

Bourne Again Shell (bash)

1989년 브라이언 폭스가 GNU 프로젝트를 위해 개발

우분투와 페도라에서 기본적으로 사용하는 셸 (Linux 표준 셸로 채택)

korn shell과 다르게 무료여서 급속히 전파됐음

Bourne Shell (sh)을 기반으로 Korn Shell(ksh)C shell (csh)의 좋은 점만 합한 것이라고 보면 됨

bash는 리눅스 뿐만 아니라 GNU 운영체제, 맥 OS X 등 다양한 OS에서 사용중

  • /bin/bash

  • 프롬프트 - 일반 유저는 $ 프롬프트 / root 유저는 # 프롬프트 사용

특징

  • Alias 기능 (명령 단축 기능)

  • History 기능 ( 또는 )

  • 연산 기능

  • Job Control 기능

  • 자동 이름 완성 기능 (tab)

  • 프롬프트 제어 기능

  • 명령 편집 기능

  • POSIX와 호환 가능


Z Shell (zsh)

확장형 Bourne Shell, Korn Shell의 재작성 셸

강력한 history기능

향상된 명령행 편집 기능

  • /bin/zsh



2. C Shell 계열


C Shell (csh)

1978년 버클리 대학의 빌 조이가 C 언어로 개발

Bourne Shell의 사용성을 높인 셸

강력한 프로그램 작성 기능을 가지고 있고 C와 비슷

  • 크기가 커지고, 속도가 느려진 단점

  • 편리한 기능 때문에 일반 사용자들이 즐겨 사용했던 셸

  • /bin/csh


tc Shell (tcsh)

csh의 기능을 강화한 Shell

확장 C 셸로, BSD 계열에서 많이 사용

명령어 편집 기능 제공

/bin/tcsh


사용 중인 셸 확인

echo $SHELL
or
env | grep SHELL




Shell의 명령문 처리 방법


셸 명령문은 명령문과 함께 여러 가지 옵션이나 인자(Argument)를 사용할 수 있으며 형식은 다음과 같습니다.

(프롬프트) 명령 [옵션...] [인자...]

e.g.

# ls -l
# rm -rf /mydir
# find . / -name "*.conf"




환경 변수


셸은 여러가지 환경 변수 값을 갖는데, 설정된 환경 변수는 echo $환경변수이름 형식으로 명령을 실행하면 확인 가능

예를 들어 호스트 이름을 출력하려면 echo $HOSTNAME 명령 실행

💡 환경 변수란 ?? 💡

  • 환경 변수란 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임
  • OS(ex) 윈도우, 리눅스 등)의 환경변수는 시스템의 실행 파일이 놓여 있는 디렉터리의 지정 등 OS 상세서 동작하는 응용소프트웨어가 참조하기 위한 설정이 기록된다
  • 깊숙이 있는 응용프로그램을 쉽게 꺼내쓰기 위해서 미리 변수로 등록해 놓는 것을 말한다.

환경 변수 예시

환경 변수 값을 변경하려면 export 환경변수=값 형식을 실행

그 외의 환경 변수는 printenv 명령을 실행하면 출력됨

일부 환경 변수는 printenv 명령을 실행해도 나타나지 않음





📚 REFRENCE 📚

  1. 이것이 우분투/리눅스다 - 한빛미디어
  2. https://jhnyang.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4%EC%85%B8Shell%EC%9D%B4%EB%9E%80-%EC%85%B8%EC%9D%98-%EB%B3%80%EA%B2%BD-%EC%89%98-%EA%B0%9C%EB%85%90-%EA%B8%B0%EB%8A%A5-%EC%A2%85%EB%A5%98%EC%99%80-%ED%8A%B9%EC%A7%95sh-bash-csh-tcsh-ksh
  3. https://velog.io/@naneun/Linux-%EC%89%98Shell%EC%9D%B4%EB%9E%80
profile
성장과 연구하는 자세를 추구하는 AI 연구개발자

0개의 댓글