Linux에서 터미널과 Shell이 ​​두 개의 별도 프로그램인 이유는 무엇입니까?

Linux에서 터미널과 Shell이 ​​두 개의 별도 프로그램인 이유는 무엇입니까?

Windows에서는 CLI를 사용할 때 하나의 프로그램( cmd.exe)만 사용됩니다. 입력을 에 보내면 결과 cmd.execmd.exe출력됩니다(화면에 출력 표시).

여기에 이미지 설명을 입력하세요.

그러나 Linux에서는 Terminal과 Shell이라는 두 가지 프로그램이 사용됩니다.

gnome-terminal입력을 터미널(예: ) 로 보내고 터미널 gnome-terminal은 이 입력을 셸(예: bash)로 보낸 다음 bash출력을 로 보내고 셸 gnome-terminal에서 gnome-terminal출력을 사용자에게 보냅니다.

여기에 이미지 설명을 입력하세요.

내 질문은: Windows에서와 같은 하나의 프로그램 대신 Linux에서 터미널과 셸이 두 개의 별도 프로그램인 이유는 무엇입니까?

답변1

귀하의 전제가 잘못되었습니다. Windows에서 "터미널"의 역할은 conhost.exe에서 어느 정도 수행됩니다. 콘솔 하위 시스템은 Linux의 터미널이 상호 교환 가능하도록 설계되지 않았습니다(그리고 콘솔 모드를 시작할 때와 같은 다른 차이점도 있습니다). 프로세스(예: 아직 콘솔에 연결되지 않은 cmd.exe), 프로세스를 시작하는 시스템 라이브러리가 프로세스를 생성하지만 이는 별도의 프로세스에 의해 관리되는 별도의 계층입니다.

답변2

나는 1) 역사 때문이고, 2) 좋은 생각이기 때문이라고 말하고 싶습니다.

보통 우리는 전화 gnome-terminal하거나 xterm단말기로에뮬레이터. 과거에는 그래픽 사용자 인터페이스가 없었기 때문에 터미널 에뮬레이터도 없었습니다. 모든 것이 정확합니다화면과 키보드가 직렬 케이블을 통해 연결된 터미널, 장치컴퓨터에. Shell은 당시에도 유용했으며 터미널에서 명령을 받을 수 있도록 지원하도록 작성되었습니다. (모든 파일 설명자에서 올 수 있지만 중요하지 않습니다.)

Linux 가상 터미널 및 GUI와 같은 경우 기존 소프트웨어가 제대로 작동하거나 최소한 최소한의 변경만으로 작동할 수 있도록 원래 터미널을 에뮬레이트하는 것이 유용합니다. 이는 쉘뿐만 아니라 "터미널"과 인터페이스하는 다른 프로그램도 의미합니다. ( ls??? vi)emacs

또한 디커플링은 터미널 에뮬레이터와 셸을 독립적으로 교체할 수 있도록 하는 좋은 아이디어입니다. xterm에서 Bash를 사용하거나 gnome 터미널에서 zsh를 사용하거나 SSH 연결을 통해 Bash를 사용할 수 있습니다.

이 선택은 조각들이 서로 묶여 있으면 더욱 어려워집니다.


cmd.exe그런데, 터미널 에뮬레이션 부분 자체의 구현 에 대해서도 잘 모르겠습니다 . Windows의 컴파일러에 대해 다룬 지 꽤 시간이 지났지만, 제가 정확하게 기억한다면 해당 내용을 다루지 않는 튜토리얼에서 찾을 수 있습니다 cmd.exe.여기그리고여기.

답변3

gnome-terminalbash기본 응용 프로그램으로 실행되지만 xtermgnome-terminal시리즈는 쉘뿐만 아니라 임의의 명령을 실행하도록 설계되었습니다. 예를 들어 다음을 실행할 수 있습니다.

xterm -e /bin/bash
xterm -e /usr/local/bin/fish
xterm -e tail -f /var/log/messages
xterm -e man ls

마지막 경우 xterm은 ls 매뉴얼 페이지를 표시하고 xterm종료하면 종료됩니다.

/var/log/messages의 경우 xterm 옵션을 사용하여 글꼴을 설정하거나 색상을 변경할 수 있습니다.

구문 은 명령을 실행하는 데 gnome-terminal에도 사용됩니다 -e.

답변4

제 생각에는 Linux에서는 여러 개의 쉘을 가질 수 있기 때문입니다(bash ksh....)

Windows에는 cmd라는 프로그램이 하나만 있습니다. 이제 Microsoft는 더 많은 기능을 추가하려면 2개의 프로그램이 필요합니다(Power Shell).

Linux에서는 요구 사항을 개선하기 위해 쉘을 변경하십시오.

관련 정보