Windows에서는 CLI를 사용할 때 하나의 프로그램( cmd.exe
)만 사용합니다. 입력을 에 보내고 cmd.exe
, cmd.exe
차례로 출력을 보냅니다(화면에 출력 표시).
그러나 Linux에는 터미널과 셸이라는 두 가지 프로그램이 사용됩니다.
입력을 터미널(예: 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
단말기에에뮬레이터. 옛날에는 그래픽 사용자 인터페이스가 없었기 때문에 터미널 에뮬레이터도 없었습니다. 거기 있던 모든 것이 적절했습니다.터미널, 직렬 케이블을 통해 연결된 화면과 키보드가 있는 장치컴퓨터에. 당시에도 쉘은 유용했으며 터미널에서 명령을 받을 수 있도록 작성되었습니다. (아마도 임의의 파일 설명자에서 온 것일 수 있지만 그것은 중요하지 않습니다.)
Linux 가상 터미널 및 GUI와 같은 것을 사용하면 원래 터미널을 에뮬레이트하여 오래된 소프트웨어가 작동하거나 최소한 최소한의 변경만으로 작동하도록 하는 것이 유용했습니다. 이는 쉘뿐만 아니라 "터미널"과 인터페이스하는 다른 프로그램도 의미합니다. ( ls
? vi
? emacs
?)
또한 터미널 에뮬레이터와 쉘을 서로 독립적으로 교체할 수 있으므로 분리하는 것이 좋습니다. xterm에서 Bash를 사용하거나 gnome-terminal에서 zsh를 사용하거나 SSH 연결을 통해 Bash를 사용할 수 있습니다.
부품이 서로 묶여 있다면 이 선택이 더 어려울 것입니다.
cmd.exe
덧붙여서, 터미널 에뮬레이션 부분 자체를 구현하는 것에 대해서도 잘 모르겠습니다 . 한동안 Windows에서 컴파일러를 건드리지 않았지만 올바르게 기억하면 별도의 작업 없이 "콘솔 응용 프로그램"을 만드는 것이 가능합니다.cmd.exe
. 보다여기그리고여기.
답변3
gnome-terminal
bash
기본 응용 프로그램으로 실행되지만 xterm
및 gnome-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에서는 요구 사항을 개선하기 위해 셸만 변경하면 됩니다.