터미널과 쉘의 관계... 옳바르게 이해하고 있는 건가요...

익명 사용자의 이미지

리눅스를 공부 중인 한 학생입니다.

터미널과 쉘의 관계? 비슷한 주제를 책에서 찾아볼 수 없어서
구글링을 시도했는데 제 마음에 충족되지 못해서 계속 알아보고 있습니다.(영어 문서가 많은 것 같은데... 영어로 막혀버려서...)

쉘이란 사용자의 요청에 따른 명령어를 해석하여 커널에 전달해 주고 커널의 처리 결과를 사용자에게 전달해주는 명령어 해석기!(즉 커널과 사용자를 연결해주는 인터페이스? 소프트웨어?)
쉘 종류는 또한 sh, bash 등 많다!

터미널은 사용자가 키보드로 입력한 명령어를 쉘에게 전달하고, 커널 처리 결과를 쉘이 받아 그걸 또 터미널에게 전달하여 모니터로 보이게 하는 소프트웨어이다!
즉 쉘의 입/출력을 담당하는 소프트웨어
그래서 터미널에서 쉘 종류를 변경할 수 있다.

H/W - OS/Kernel - Shell - Terminal - User
이런 형식인 것 같습니다.

그런데 여기서 의문점이 듭니다.

bash 쉘로 ls 명령어 위치가
/usr/bin/ls로 뜨고

sh 쉘도 ls 명령어 위치가
/usr/bin/ls로 bash 쉘로 동일합니다.

그럼 쉘 종류가 많은 이유가
쉘 스크립트 문법이 다르기 때문인가요?

만약 이것이 맞는다면 bash 쉘에서 작성한 스크립트가 sh 쉘에서 동작하지 않을 수 있는 건가요?

죄송하지만 마지막으로

터미널은 소프트웨어
콘솔은 물리적 터미널이라고 하는 데 정확한 계념이 머릿속에서 잡히질 않습니다...

저의 궁금증을 해결해 주시면 감사하겠습니다.
감사합니다.

작성자...의 이미지

죄송합니다... 제목 맞춤법...

Prentice의 이미지

https://kldp.org/node/134965

전공자가 아니라 셸과 터미널의 순서는 지금도 헷갈리는데... 도움되는 글이면 좋겠습니다.

Prentice의 이미지

셸의 종류가 다양한 이유는 셸을 만들고 싶어 하는 사람이 많아서(?!!) 다양한 것일지도요. 아무튼 bash에서 도는 스크립트가 sh에서는 안 돌 수도 있고 그런 원인이 되는 (bash에서만 도는) 표현(?)을 bashism이라고 부르기도 합니다.

...!의 이미지

콘솔은 하드웨어 입니다. 물리적인 모니터와 키보드를 생각하시면 되겠지요. 아니면 펀치 카드와 프린터를 상상하셔도 좋구요. 사용자와 물리적으로 직접 상호 작용하는, 즉 "말단(일상 언어의 terminal)" 장치들입니다.

쉘(또는 일반적인 프로그램) 입장에서는 매번 하드웨어를 직접 다루기보다는 어떤 논리적인 입출력 장치(즉 소프트웨어)를 다루는 편이 좋습니다. 하드웨어에 대한 추상화이지요. 구체적인 입출력 하드웨어에 대한 제어는 다른 레이어를 하나 더 두는 거지요. 이런 추상화된 입출력 장치를 (기술적인 용어로서) 터미널이라고 부릅니다. 그런데 이런 구분은 많은 사람들이 그다지 신경쓰지 않기 때문에 그냥 말단 하드웨어를 터미널이라고 부르기도 합니다.

쉘은 OS와 최종 사용자 사이의 논리적인 상호 작용을 담당합니다. 명령을 커널에 전달한다는 것은 맞지 않는 말입니다. 사용자는 커널과 직접 대화할 일이 거의 없습니다. 사용자는 애플리케이션 또는 시스템 소프트웨어를 (뭐 애플리케이션과 시스템의 구분은 좀 모호합니다. 여하튼 어떤 프로그램을) 사용하지요. 프로그램이 시스템 콜을 통해 커널과 대화합니다. 쉘은 사용자가 프로그램을 사용하기 위한 수단입니다. 쉘은 프로그램 이름과 인자를 받아서 그걸 실행하고 실행 결과를 사용자에게 전달하는 역할을 합니다. 이게 실제로는 말처럼 그리 간단한게 아니어서 쉘은 프로그램(프로세스)를 관리하기 위한 여러 기능을 가지고 있습니다. 터미널은 단순히 사용자와 쉘 사이에 문자열을 전달하는 역할만을 하고 쉘은 문자열을 적당히 해석해서 (프로그램 이름과 인자를 추출하고 파이프, 리다이렉션, 반복 처리 등등을 위한 문법을 해석하는 거지요) 실제로 프로그램을 실행합니다. 또 이미 실행 중인 프로세스와 통신하고 프로세스를 제어하기 위한 수단도 제공합니다. OS 입장에서는 쉘도 그냥 프로그램중 하나일 뿐입니다. 다른 프로그램과 다를 것이 아무것도 없습니다.

쉘의 종류가 다르면 문법도 다릅니다. 당연히 어떤 쉘에서는 작동하는 쉘스크립트가 다른 쉘에서는 돌아가지 않을 수 있습니다. 쉘이 꼭 문자열을 가지고 사용자와 상호 작용할 필요도 없습니다. 데스크탑 환경도 쉘이라고 부를 수 있습니다. Gnome이 하는 역할과 bash가 하는 역할이 크게 다르지 않습니다. 형식이 텍스트냐 그래픽이냐하는 차이가 있을 뿐이지요 (https://en.wikipedia.org/wiki/Shell_(computing)#Graphical_shells).

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.