Was ist der Unterschied zwischen Terminal, Konsole, Shell und Befehlszeile?

211

Was ist der Unterschied zwischen Terminal, Konsole, Shell und Befehlszeile?

Akiva
quelle
1
(1/2) Agent Cool ist größtenteils korrekt, aber die Definition der von ihm bereitgestellten Konsole ist angesichts dieses Themas veraltet. Sein Link enthält die richtigen Informationen, wenn Sie ihm folgen. Lesen Sie die gesamte Definition unter seinem Link. Konsole wird lose verwendet, um eine Menge ähnlicher Dinge zu bezeichnen, aber am wichtigsten ist, dass es sich in der Regel um die von LOCAL ATTACHED verwendeten Ein- und Ausgabegeräte handelt, z. B. Tastatur, Display und möglicherweise Maus.
0xSheepdog
1
(2/2) Dies mag wie ein pedantischer Punkt erscheinen, aber als erfahrener Systemadministrator werde ich Ihnen sagen, dass dies nicht der Fall ist . Wenn ein System ein Problem hat und vollständig abgestürzt / heruntergefahren / offline zu sein scheint, sollten Sie die physische Konsole des Systems überprüfen , um festzustellen, ob es noch funktioniert, aber einfach die Netzwerkverbindung verloren hat. Dieses kleine Detail könnte Ihnen Daten, Informationsverarbeitung usw. ersparen oder kosten. Pedantisch, ja. Aber wichtig.
0xSheepdog
6
@ 0xSheepdog Möglicherweise möchten Sie diese Kommentare zu einer vollständigen Antwort erweitern (einschließlich Definitionen oder Erklärungen für die anderen Begriffe), die als solche veröffentlicht werden. Es ist nicht schlecht für eine Frage, mehrere Antworten zu haben (außer vielleicht, wenn sie genau die gleichen Informationen und auf die gleiche Weise vermitteln). Ich bin mir nicht sicher, warum die wichtige Praxis, eine Maschine lokal zu überprüfen, darin besteht, die physische Benutzerschnittstelle als Konsole zu kennen / zu bezeichnen, aber es gibt vielleicht ein Argument dafür, dass es für eine effektive Kommunikation mit Kollegen oder die Verwendung von Dokumentation wichtig ist. (Sie könnten das in Ihrer Antwort klarstellen.)
Eliah Kagan
4
Aufgrund ihrer engen Beziehung (siehe alle guten Antworten) werden diese Begriffe manchmal synonym verwendet, was Sie wahrscheinlich dazu gebracht hat, dies zu fragen.
Mark

Antworten:

143

Kurze Antwort:

  • terminal = Umgebung für Texteingabe / -ausgabe
  • Konsole = physisches Terminal
  • Shell = Befehlszeileninterpreter

Lange Antwort:

Konsole und Terminal sind eng miteinander verbunden. Ursprünglich bedeuteten sie ein Gerät, mit dem man mit einem Computer interagieren konnte: In den Anfängen von Unix bedeutete dies ein Gerät im Teleprinter- Stil, das einer Schreibmaschine ähnelte, manchmal auch als Teletypewriter oder kurz „tty“ bezeichnet. Der Name „Terminal“ kam aus elektronischer Sicht und der Name „Konsole“ aus Möbelsicht. Sehr früh in der Unix-Geschichte wurden elektronische Tastaturen und Displays zur Norm für Terminals.

Terminal

In der Unix-Terminologie ist ein Terminal eine bestimmte Art von Gerätedatei, die eine Reihe zusätzlicher Befehle ( ioctls ) implementiert, die über das Lesen und Schreiben hinausgehen. Einige Terminals werden vom Kernel im Auftrag eines Hardwaregeräts bereitgestellt, z. B. mit Eingaben über die Tastatur und Ausgaben über einen Textmodusbildschirm oder mit Ein- und Ausgaben über eine serielle Leitung. Andere Terminals, manchmal als Pseudo-Terminals oder Pseudo-Terminals bezeichnet, werden (über eine dünne Kernel-Schicht) von Programmen bereitgestellt, die als Terminal-Emulatoren bezeichnet werden . Einige Arten von Terminalemulatoren umfassen:

  • GUI-Anwendungen, die im X Window System ausgeführt werden : Xterm , Gnome Terminal, Konsole, Terminator usw.
  • Screen und tmux , die eine Isolationsschicht zwischen einem Programm und einem anderen Terminal bilden
  • Ssh , das ein Terminal auf einem Computer mit Programmen auf einem anderen Computer verbindet
  • Erwarten Sie für die Skripterstellung Terminal-Interaktionen

Das Wort Terminal kann auch eine traditionellere Bedeutung eines Geräts haben, über das man mit einem Computer interagiert, typischerweise mit einer Tastatur und einem Display. Beispielsweise ist ein X-Terminal eine Art Thin Client , ein Spezialcomputer, dessen einziger Zweck darin besteht, Tastatur, Bildschirm, Maus und gelegentlich andere Peripheriegeräte für die menschliche Interaktion zu steuern, wobei die eigentlichen Anwendungen auf einem anderen, leistungsstärkeren Computer ausgeführt werden.

Konsole

Eine Konsole ist im Allgemeinen ein Terminal im physischen Sinne, das definitionsgemäß das primäre Terminal ist, das direkt mit einer Maschine verbunden ist. Die Konsole erscheint dem Betriebssystem als (kernelimplementierte) Terminals. Auf einigen Systemen wie Linux und FreeBSD erscheint die Konsole als mehrere Terminals (ttys) (spezielle Tastenkombinationen schalten zwischen diesen Terminals um). Um die Sache zu verwechseln, kann der Name, der jedem bestimmten Terminal gegeben wird, "Konsole", "virtuelle Konsole", "virtuelles Terminal" und andere Variationen sein.

Siehe auch Warum ist ein virtuelles Terminal "virtuell" und was / warum / wo ist das "echte" Terminal? .

Befehlszeile [Schnittstelle]

Eine Befehlszeile ist eine Schnittstelle, bei der der Benutzer einen Befehl eingibt (der als Folge von Zeichen ausgedrückt wird - normalerweise ein Befehlsname, gefolgt von einigen Parametern) und die ReturnTaste drückt , um diesen Befehl auszuführen.

Schale

Eine Shell ist die Hauptschnittstelle, die Benutzern beim Anmelden angezeigt wird und deren Hauptzweck darin besteht, andere Programme zu starten. (Ich weiß nicht, ob die ursprüngliche Metapher lautet, dass die Shell die Heimumgebung für den Benutzer ist oder dass die Shell das ist, in dem andere Programme ausgeführt werden.)

In Unix-Kreisen hat sich Shell auf eine Befehlszeilen-Shell spezialisiert , die sich darauf konzentriert, den Namen der zu startenden Anwendung einzugeben, gefolgt von den Namen der Dateien oder anderen Objekte, auf die die Anwendung reagieren soll, und die Eingabetaste zu drücken. In anderen Umgebungen (mit Ausnahme der Gnome-Shell) wird das Wort "Shell" normalerweise nicht verwendet. Bei Fenstersystemen handelt es sich beispielsweise um „ Fenstermanager “ und „ Desktop-Umgebungen “, nicht um eine „Shell“.

Es gibt viele verschiedene Unix-Shells. Ubuntus Standard-Shell ist Bash (wie die meisten anderen Linux-Distributionen). Zu den beliebten Alternativen gehören zsh (mit Schwerpunkt auf Leistung und Anpassbarkeit) und fish (mit Schwerpunkt auf Einfachheit).

Befehlszeilen-Shells enthalten Flusssteuerungskonstrukte zum Kombinieren von Befehlen. Benutzer können nicht nur Befehle an einer interaktiven Eingabeaufforderung eingeben, sondern auch Skripts schreiben. Die gebräuchlichsten Shells haben eine gemeinsame Syntax, die auf der Bourne_shell basiert . Bei der Erörterung der " Shell-Programmierung " wird die Shell fast immer als eine Bourne-artige Shell impliziert. Einige Shells, die häufig für Skripte verwendet werden, aber keine erweiterten interaktiven Funktionen bieten, umfassen die Korn-Shell (ksh) und viele Ash- Varianten. Auf so ziemlich jedem Unix-ähnlichen System ist eine Bourne-Shell installiert /bin/sh, normalerweise ash, ksh oder bash. Unter Ubuntu /bin/shist Dash eine Ash-Variante (ausgewählt, weil sie schneller ist und weniger Speicher benötigt als bash).

In der Unix-Systemadministration ist die Shell eines Benutzers das Programm, das beim Anmelden aufgerufen wird. Normale Benutzerkonten verfügen über eine Befehlszeilen-Shell, Benutzer mit eingeschränktem Zugriff haben jedoch möglicherweise eine eingeschränkte Shell oder einen anderen spezifischen Befehl (z. B. für die Dateiübertragung) -nur Konten).


Die Arbeitsteilung zwischen Terminal und Shell ist nicht ganz offensichtlich. Hier sind ihre Hauptaufgaben.

  • Eingabe: Das Terminal wandelt Tasten in Steuersequenzen um (zB Left\e[D). Die Shell wandelt Steuersequenzen in Befehle um (zB \e[Dbackward-char).
  • Line Edition, Eingabehistorie und Vervollständigung werden von der Shell bereitgestellt.
    • Das Terminal kann stattdessen eine eigene Zeilenedition, -historie und -vervollständigung bereitstellen und nur dann eine Zeile an die Shell senden, wenn sie zur Ausführung bereit ist. Das einzige gemeinsame Terminal, das auf diese Weise funktioniert, befindet sich M-x shellin Emacs.
  • Ausgabe: Die Shell gibt Anweisungen wie „Anzeige foo“, „Vordergrundfarbe auf Grün umschalten“, „Cursor in nächste Zeile bewegen“ usw. aus. Das Terminal reagiert auf diese Anweisungen.
  • Die Eingabeaufforderung ist lediglich ein Shell-Konzept.
  • Die Shell sieht nie die Ausgabe der von ihr ausgeführten Befehle (sofern nicht umgeleitet). Die Ausgabehistorie (Scrollback) ist ein reines Terminalkonzept.
  • Inter-Anwendungskopie-Paste wird durch das Terminal ( in der Regel mit der Maus oder Tastenfolge wie vorgesehen Ctrl+ Shift+ Voder Shift+ Insert). Die Shell kann auch einen eigenen internen Copy-Paste-Mechanismus haben (zB Meta+ Wund Ctrl+ Y).
  • Die Auftragssteuerung (Starten und Verwalten von Programmen im Hintergrund) wird hauptsächlich von der Shell ausgeführt. Es ist jedoch das Terminal, das Tastenkombinationen wie Ctrl+ Cum den Vordergrundjob abzubrechen und Ctrl+ Zum ihn auszusetzen, verarbeitet.

Von Unix & Linux recycelt

Gilles
quelle
1
Ich würde nicht damit einverstanden sein, dass Terminal ein geeigneter Begriff für eine Endgerätedatei ist und / oder der Code für die Terminalbehandlung im Kernel (tty ioctls, raw / cooked, Basic Line Editting). terminal = das Zeug, das mit Escape-Codes umgeht, Tastendrücke in Zeichen umwandelt und auf einem Bildschirm zeichnet (oder auf Papier / Band druckt). Siehe meine Antwort für weitere Details.
Peter Cordes
2
@PeterCordes Auf dieser Detailebene gibt es keinen Unterschied. POSIX definiert Terminal als Synonym für ein Endgerät im Sinne einer Gerätedatei. Das ist die Unix-Bedeutung. Zufällig handelt es sich dabei um das Zeug, das mit Escape-Codes umgeht, Tastendrücke in Zeichen umwandelt und auf einem Bildschirm zeichnet (oder über das Netzwerk überträgt oder in eine Datei protokolliert usw.).
Gilles
2
hm, ja das terminal ist auch in diesem sinne gewöhnungsbedürftig. Unter der Annahme, dass sich an einem Ende des Endgeräts, das der Kernel verarbeitet, ein Terminal-Emulator oder ein serieller Port mit einer angeschlossenen Terminal-Appliance befindet. Die Kernel-Tty-Behandlung (im gekochten Modus) behandelt nur einige Steuercodes (Signale auf ^ c, Zeilenbearbeitung auf ^ u / ^? (Löschen). Ich versuche, eine Linie zwischen dem Tty-Code und dem Teil von Linux zu ziehen Das implementiert ein VT100-ähnliches Terminal auf einer Grafikkarte und einer USB / ps2 / AT-Tastatur. Sie können Linux ohne das kompilieren, aber nicht ohne tty.
Peter Cordes
3
@PeterCordes In der Kernel-Konfiguration kann die Unterstützung für Terminals weggelassen werden (dies ist nützlich für einige seltene eingebettete Systeme, in denen der Speicher extrem knapp ist). es wird kontrolliert von CONFIG_TTY. Die Unterstützung für Terminalemulatoren (genauer gesagt Pseudoterminals - „Terminalemulator“ enthält nicht immer telnetd, screen, expect,…) wird von gesteuert CONFIG_UNIX98_PTYS. Die Unterstützung für die Anzeige im PC-Textmodus und für Tastaturen oder ähnliches wird von gesteuert CONFIG_VT. Siehe drivers/tty/Kconfigin der Kernelquelle.
Gilles
2
Hoppla, ich hatte in letzter Zeit keine Kernelquelle. CONFIG_TTY wurde erst 2012 hinzugefügt. Wie auch immer, das hilft hoffentlich jedem, der versucht, den Kopf über die verschiedenen Teile des Puzzles zu wickeln und darüber, wie sie zusammenpassen.
Peter Cordes
60

Eine visuelle Darstellung.

Terminal

Etwas, an das man sich setzen und wie ein Chef arbeiten kann.

Terminal

Konsole

Einige Hardware, die ein paar Sachen macht.

Konsole

Ein weiteres Beispiel für eine Konsole wäre eine Videospielkonsole wie ein Super Nintendo [wo Sie Actraiser spielen können].

Schale

Grundsätzlich eine Anwendung zum Ausführen von Befehlen.

SchaleSchale

Befehlszeile [Schnittstelle]

Grundsätzlich alles, in das Sie Befehle eingeben.

CLICLI

Akiva
quelle
8
Du hast meine Idee gestohlen - ich wollte im Grunde die gleiche Antwort geben. Sie können also eine positive Bewertung abgeben. Der Punkt ist natürlich, dass, während diese Begriffe heutzutage meist synonym sind, Begriffe wie "Terminal" und "Konsole" ihren Ursprung in älteren Computerkonzepten haben.
Thomasrutter
2
Guter Versuch. Einfach und leicht
Ein Umar Mukthar
19

Aus dem Linux Information Project :

Terminal : Technisch gesehen ist ein Terminalfenster, das auch als Terminalemulator bezeichnet wird, ein reines Textfenster in einer grafischen Benutzeroberfläche (GUI), die eine Konsole emuliert.

In unseren Worten: Eine GUI-Anwendung, über die wir auf die Konsole eines Benutzers zugreifen können.

Konsole : Eine Instrumententafel mit den Bedienelementen für einen Computer

Shell : Eine Shell ist ein Programm, das die traditionelle Nur-Text-Benutzeroberfläche für Linux und andere Unix-ähnliche Betriebssysteme bereitstellt

Befehlszeile : Eine Befehlszeile ist die Leerstelle rechts von der Eingabeaufforderung in einem Volltextanzeigemodus auf einem Computermonitor (normalerweise eine CRT- oder LCD-Anzeige), in die ein Benutzer Befehle und Daten eingibt

rɑːdʒɑ
quelle
5
"Terminal" steht für einen physischen Nur-Text-Bildschirm. Was Sie sagen, ist eigentlich "Terminal-Emulator".
Registrierter Benutzer
2
@RegisteredUser Ein Terminalemulator ist eine Art Terminal. Das Wort Terminal ist nicht auf physische Terminals beschränkt (das übliche Wort dafür ist Konsole ).
Gilles
2
Diese Definition der Befehlszeile ist falsch. Eine Befehlszeile ist nicht auf einen Volltextanzeigemodus beschränkt.
Gilles
1
@ Gilles Ich habe es von One Web-Link gepackt. Sie haben die richtige Antwort gut erwähnt.
Donnerstag,
5
@AgentCool Ich stelle Ihre Fähigkeit zum Kopieren und Einfügen nicht in Frage. Ich frage Sie nach der Wahl der Quelle. Was Sie posten, liegt in Ihrer Verantwortung, unabhängig davon, ob Sie es geschrieben haben oder nicht.
Gilles
15

Die Antworten hier scheinen sehr gut zu sein. Sie sind jedoch zu trocken und technisch für meinen Geschmack, also gebe ich ein Take.

Terminal ist das Ende von etwas - wo es endet. Wenn Sie beispielsweise in einer Stadt mit der U-Bahn fahren, ist der Bahnhof, an dem Sie aussteigen, Ihr Terminal. Oder auf einem Flughafen wird der Ort als Terminal betrachtet, an dem Personen aus dem Flughafen aussteigen, wenn sie ihr Zielland erreichen. Der Grund, warum das Terminal am Flughafen heutzutage sowohl der Ort ist, an dem Sie Leute an Bord bringen, als auch der Ort, an dem Sie sie aus dem Flugzeug bringen, ist aus offensichtlichen wirtschaftlichen Gründen.

Der Zweck eines Computers besteht darin, Daten abzurufen, etwas damit zu tun und das Ergebnis auszuspucken. Somit ist das Terminal ein beliebiges Gerät, von dem Sie das Ergebnis der Berechnung abrufen können (z. B. ein Bildschirm). Es ist einfach passiert, dass Sie in den ersten Computern normalerweise die Eingabe (Tastatur) und Ausgabe (Bildschirm) als ein einzelnes Gerät hatten. Aus diesem Grund werden Terminals heutzutage als Ein- / Ausgabegeräte betrachtet. Eine Maus, Tastatur, Bildschirm, Kamera, sie sind alle Terminals.

Shell ist eine OS-Sache. Auf einem Computer haben Sie den Kernel, der unter Ubuntu zum Beispiel der Linux-Teil ist. Da der Kernel nun wirklich niedrig ist, wird eine Shell bereitgestellt - ein Programm, mit dem der Benutzer auf einfache Weise mit dem Kernel interagieren kann. Das ist zum Beispiel BASH.

Konsole ist (aus einem Wörterbuch)

Eine ebene Fläche, die die Bedienelemente für eine Maschine, ein elektrisches Gerät usw. enthält.

Deshalb gelten in der Musikindustrie das Board mit allen Knöpfen oder in einem Space Shuttle der Kommandotisch als Konsolen. Super Nintendo und PS2 werden in der Vergangenheit auch als Konsolen bezeichnet, da die ersten derartigen Unterhaltungsgeräte wie Kisten mit einer Reihe von Knöpfen aussahen.

Die Befehlszeile ist nur eine Schnittstelle - das Gegenteil von GUI. Es gibt nämlich zwei Arten von Schnittstellen auf einem Computer; CLI (Command Line Interface) und GUI (Graphical User Interface). Der Hauptunterschied besteht darin, dass der erste von der Tastatur eingegeben wird, während der zweite von der Maus eingegeben wird.

Pithikos
quelle
1
Was meinst du mit "das Gegenteil von GUI"?
Koray Tugay
2
Mit Gegenteil meine ich, dass Sie entweder CLI oder GUI haben. Ich habe jetzt etwas mehr in der Antwort geklärt.
Pithikos,
12

Um meine Antwort zusammenzufassen:

Shell ist ein Programm, das processesBefehle und returnsAusgaben ausführt , wie Bash in Linux.

Terminal ist ein Programm , bei dem es sich bei runeiner Shell in der Vergangenheit um ein physisches Gerät handelte (bevor Terminals mit Tastaturen überwacht wurden, handelte es sich um Teletypen ). Anschließend wurde das Konzept in eine Software wie Gnome-Terminal übertragen .

Also öffne ich Gnome-Terminal und es erscheint ein schwarzes Fenster, in dem Shell ausgeführt wird, damit ich meine Befehle ausführen kann.

Konsole ist eine spezielle Art von Terminal , es war auch ein physisches Gerät. Beispiel in Linux wir haben , virtual consoledie ich ihnen durch Kombination zugreifen Ctrl+ Alt+ F1 to F7.

Konsole bedeutet manchmal, dass Tastatur und Monitor physisch an diesen Computer angeschlossen sind.

nux
quelle
11

Diese Begriffe passen oft zusammen, sodass die Benutzer einen der Begriffe verwenden, um auf die Sammlung zu verweisen. (dh es ist normalerweise aus dem Kontext ersichtlich, dass sie ein Terminalfenster bedeuten, das eine Schnittstelle zu einer Befehlszeilen-Shell bereitstellt).

Damit dies nicht zu langwierig wird, sage ich xterm nur als Ersatz für XTerm / Gnome Terminal / Konsole / mrxvt / etc / etc. Gleiches gilt für bash.

Die Konsole hat mehrere andere spezifische Bedeutungen. Lassen Sie dies also vorerst weg.

Terminal : Etwas, das die menschliche Interaktion mit Programmen über einen bidirektionalen Strom von ASCII / UTF8 / anderen Zeichen ermöglicht, normalerweise mit VT100 oder einer ähnlichen Escape-Code-Verarbeitung. (ZB Rücktaste, Löschen, Pfeiltasten usw. erzeugen Escape-Codes. Programme können Escape-Codes drucken, um den Cursor auf dem Terminalbildschirm zu bewegen, zu fettem Text und / oder Farbe zu wechseln, den Bildschirm zu löschen oder zu scrollen usw.) Früher war dies oft ein dediziertes Gerät mit einem Bildschirm und einer Tastatur sowie einer seriellen Schnittstelle. Jetzt ist es normalerweise ein Programm wie xterm.

Es gibt Gerätedateien für Programme zum Lesen / Schreiben von / zu Terminals, und auf die andere Seite der virtuellen Terminals kann auch als Gerätedatei zugegriffen werden. Hier schreibt xterm Ihre Eingabe, damit bash sie lesen kann.

Jedes Terminal, einschließlich virtueller Terminals, bietet grundlegende Funktionen zur Zeilenbearbeitung, wenn es sich im gekochten (im Gegensatz zum rohen) Modus befindet. Dies wird durch den Kernel-Code erledigt. Es ist Bash, das die Zeilenbearbeitung bereitstellt, die Sie mit den Pfeiltasten ausführen können. (Versuchen catSie, auszuführen und zu tippen, wenn Sie sehen möchten, wie die grundlegende, vom Kernel bereitgestellte Zeilenbearbeitung aussieht. Die Rücktaste funktioniert und einige andere Dinge, die Ihren Stty-Einstellungen entsprechen.)

Obwohl sich hinter den Endgeräten eine Menge Kernel-Code befindet, wird dieser als Code für die Endgerätehandhabung und nicht als Endgerät selbst bezeichnet.

Edit: Gilles hat mich davon überzeugt, dass es die richtige Verwendung ist, sich auf ein tty als Terminal zu beziehen. Terminalemulatoren und interaktive Programme, die mit einem Terminal verbunden ausgeführt werden, hängen alle von der vom Kernel implementierten Terminalsemantik ab. (Der größte Teil dieses Verhaltens ist von POSIX standardisiert und unter Linux / * BSD / anderen Unix-Betriebssystemen identisch.) Ein Vollbild-Texteditor hängt vom Verhalten von Unix-tty-Inhalten sowie von der Handhabung des Escape-Codes für Cursorbewegungen ab. und viele andere Funktionen des Terminal-Emulators.

Ein physischer VT100 mit einem Bildschirm, einer Tastatur und einem seriellen Anschluss ist jedoch eine Instanz eines Terminals. Es ist nicht erforderlich, dass ein Unix-Kernel am anderen Ende der seriellen Schnittstelle vollständig ist. Etwas völlig anderes könnte darin bestehen, Escape-Codes und ASCII-Text zu senden und denselben zu empfangen. Es wäre jedoch nur ein VT100, kein Unix-Terminal. Ein Terminal-Emulator und die Unix-Semantik bilden das Gesamtpaket eines Unix-Terminals, auf dem ein Programm wie bash normalerweise ausgeführt wird.

Die Befehlszeile ist ein Benutzerschnittstellenstil, bei dem Sie etwas eingeben und dann die Eingabetaste drücken, um etwas auszuführen. Es wird auch als Abkürzung für eine Befehlszeilen-Shell wie Bash oder MS-DOS verwendet, aber Sie können auch sagen, dass es sich um ein Befehlszeilen-Tool für so etwas wie fdisk handelt. Betrachtet man nur Programme, die ein Terminal für ihre Benutzeroberfläche verwenden, sind die beiden Hauptfamilien Befehlszeile und Vollbildtext (z. B. ein Editor wie vi oder emacs -nw).

Befehlszeilenprogramme, die normalerweise auf Terminals ausgeführt werden, funktionieren immer noch mit in Dateien umgeleiteten Eingaben und Ausgaben. Terminalbasierte Vollbildprogramme wie Editoren oder E-Mail-Clients sind jedoch nur interaktiv und funktionieren nicht.

Eine Shell ist ein Programm zum Starten anderer Programme. In einem Unix-Kontext ist dies eine Befehlszeilen-Shell (dh eine Bourne-Shell oder eine C-Shell-Entsprechung). Unix-Shells können ihre Eingaben auch aus Dateien, dh Shellskripten, lesen. Es handelt sich um vollständige Programmiersprachen mit Variablen, Schleifen und Bedingungen, und viele Programme sind in Bash geschrieben (oder /bin/shfür mehr Portabilität nur mit den POSIX-Shell-Funktionen). Es ist auch leicht möglich, ein schnelles for i in *.something; do some_program "$i";done in eine interaktive Shell zu schreiben .

Alles in allem empfängt eine Shell wie bash (oder ein anderes Programm, das Sie durch Ausführen eines Shell-Befehls gestartet haben) Zeichen vom /dev/pts/NEndgerät, nachdem xterm Ihre Eingabe auf die Seite des Pseudoterminals geschrieben hat. Wenn Sie ausführen catund dann drücken ^c, wird der Kernel-Tty-Code auf das reagieren ^cund einen SIGINTan den Vordergrund-Prozess auf diesem Terminal senden . (Beachten Sie die Verwendung des TerminalsIn diesem Zusammenhang bedeutet dies, dass Unix tty kein Terminal-Emulator oder etwas ist, das an eine serielle Schnittstelle angeschlossen ist.) Dies geschieht, weil die Shell das Terminal vor dem Starten eines Programms in den "gekochten" Modus versetzt, was bedeutet, dass der Kernel auf bestimmte Steuerelemente einwirkt. Sequenzen. (Der tty-Code hat immer noch nichts mit der Verarbeitung von VT100-Escape-Codes zu tun, sondern nur mit wenigen Low-ASCII-Steuercodes.) Wenn Sie anstelle von xterm das Linux-Konsolenterminal verwenden, führt der Kernel die VT100-Emulation durch mit all dem Zeug umgehen. Linux kann ohne die Unterstützung von virtuellen Konsolenterminals kompiliert werden, jedoch nicht ohne die Unterstützung von tty.

Konsole wird manchmal als Synonym für Terminal verwendet (KDE hat sogar einen Terminalemulator namens Konsole).

Wie 0xSheepdog hervorhebt, hat es auch eine andere Bedeutung: lokal angeschlossene Hardware für die menschliche Interaktion.

In einem Kernel-Kontext hat die Konsole eine andere spezifische Bedeutung: Auf diesem Terminal werden Boot-Meldungen geschrieben. Dies kann eine serielle Schnittstelle sein. Normalerweise ist es natürlich die vom Kernel zusätzlich zu den Treibern für Grafikhardware und USB / ps2 / AT-Tastaturen implementierte Textkonsole. Wenn Sie Linux console=tty0 console=ttyS0,115200n8über die Befehlszeile booten , erhalten Sie Kernelmeldungen auf Ihrem Bildschirm UND an der seriellen Schnittstelle.

Linux implementiert virtuelle Konsolen ( /dev/tty1bis N ). Sie können mit Ctrl+ Alt+ tauschen, welchen Bildschirm / welche physische Tastatur Sie steuern . Typische Linux-Distributionen erstellen 6 und starten auf allen. Selbst wenn Sie X11 nicht starten können oder wollen, können Sie sich 6-mal anmelden und zwischen Befehlen, Manpages und was auch immer wechseln, ohne Ausführen eines Programms wie Bildschirm. Linux (der Kernel) enthält einen Terminalemulator im VT100-Stil, der eine Terminalschnittstelle über Ihren Bildschirm und Ihre Tastatur auf den virtuellen Konsolen bereitstellt.FNgetty

Das Standard - 6 virtuelle Terminals mit Login fordert deshalb Ctrl+ Alt+ F7Sie zurück zu Ihrer X11 - Sitzung wird: der X - Server packt die nächste verfügbare virtuelle Konsole. (Der X-Server wird jedoch /dev/input/...direkt geöffnet , anstatt Ihre Tastendrücke abzurufen /dev/tty7.)

"Auf eine Textkonsole tauschen" bedeutet also, Ctrl+ Alt+ zu drücken F1und dieses Terminal zu verwenden. Früher, als Computer langsam waren und nicht viel RAM hatten, verbrachten einige Leute viel Zeit auf den Textkonsolen, da sie schnell waren, konnten Sie eine nette Schriftart einstellen und sogar die Terminalgröße ändern, um kleinere Zeichen zu haben, aber haben mehr auf einmal auf dem Bildschirm. Alt+ Leftund Alt+ Rightzur vorherigen / nächsten Konsole wechseln. (X11 deaktiviert dies natürlich für seine Konsole, wobei nur die Ctrl+ Alt+ -Kombination übrig bleibt.)FN

So Konsole ist nur einer dieser Begriffe , die nicht eine einzige wohldefinierte technische Bedeutung hat. Es hat ein paar verschiedene. (Abhängig davon, wie Sie das Terminal im Vergleich zum Terminal und dem Umgang mit dem Terminal beurteilen, kann man sagen, dass Terminal auch mehrere Bedeutungen hat.)

Peter Cordes
quelle
2
Konsole bedeutet, dass das "Haupt" -Physikalische Terminal nicht nur in einem Kernel-Kontext ist. Es ist die gleiche Bedeutung in /dev/console. Konsole ist nicht besonders vieldeutig - obwohl sie gelegentlich im allgemeinen Sinne von Terminal verwendet wird, ist dies ziemlich selten (seltener als Terminal , das speziell für eine Konsole verwendet wird).
Gilles
1
richtig, ja, echo foo | sudo tee / dev / console> / dev / null wird auf dem Bildschirm gedruckt, wenn sich Ihre aktuelle VT im Textmodus befindet (einschließlich der Framebuffer-Konsole, nicht nur im VGA-Textmodus). Wenn Sie mit der Konsole über eine serielle Schnittstelle gebootet haben, würde es dort hingehen. Man könnte sagen, dass / dev / console die Gerätedatei für alles ist, was der Kernel als Systemkonsole behandelt. Nichts anderes im System braucht eine Vorstellung zu haben, eine Konsole tty überhaupt zu sein (außer Boot-Recovery - Material , das eine Shell auf der Konsole TTY beginnt , wenn das System in dem Modus Multi-User nicht mehr startet normalerweise von initrd.)
Peter Cordes
1
Der xorg X-Server (strings / usr / bin / Xorg) verwendet / dev / console nicht, um Hardwarezugriff zu erhalten. Es verwendet / dev / tty0 und / dev / tty% d und / dev / vc /% d, um sich auf seiner eigenen VT einzurichten. Ich bin mir ziemlich sicher, dass Xorg auf einem PC, der mit der Kernel-Konsole über eine serielle Schnittstelle gestartet wurde, noch einwandfrei läuft. Und dass die virtuellen Terminals im Textmodus immer noch funktionieren würden. Je mehr ich das bedenke, desto mehr neige ich dazu, die Konsole in einem Kernel-Kontext als nur ein spezielles Terminal anzusehen, das beim Booten ausgewählt wird. (Linux kann seine Konsolenmeldungen tatsächlich auf mehreren Terminals gleichzeitig ausgeben, wenn Sie dazu aufgefordert werden.)
Peter Cordes
6

Ich denke, dass in den Anfangszeiten von Timesharing-Computern jeder Benutzer ein Terminal hatte (wenn er eines bekommen konnte!), Aber nur die Systembetreiber hatten eine Konsole. Die Konsole kann beispielsweise zum Neustarten der Maschine oder zum Abrufen von Systemdiagnosen verwendet werden, die über Benutzerterminals nicht möglich waren. Die Konsole befand sich im Maschinenraum, einem festen Bestandteil des Computers, während die Terminals entfernt sein konnten. Die Konsole würde auch Hardware-Anzeigen und Schalter enthalten, nicht nur Texteingabe und -ausgabe.

Ich würde sagen, dass die Befehlszeile ein Bereich ist, in dem ein Benutzer einen Befehl eingeben kann, während die Shell das Programm ist, das diesen Befehl interpretiert / befolgt. Der Begriff "Shell" bezieht sich ganz besonders auf Unix-Derivate. "Kommandozeile" ist eher in der Windows / DOS-Tradition. Das Äquivalent auf Großrechnern wird normalerweise als "Jobsteuerungssprache" bezeichnet.

Es ist klar, dass diese ursprünglichen Unterscheidungen im Laufe der Zeit im Zuge des technologischen Wandels verschwommen sind.

Michael Kay
quelle
3

Benutzerorientierte Kurzantwort:

Befehlszeile - Die Zeile, in der Sie Befehle eingeben. In der Regel wurde angegeben, dass Sie etwas im Textmodusfenster (Befehlszeilenschnittstelle) ausführen müssen, das von Ihrem Betriebssystem bereitgestellt wird.

Shell - das eigentliche Programm, das vom Betriebssystem ausgeführt wird, um eingegebene Daten zu verarbeiten command line. Daher der Name - benutzerfreundliche Shell für nicht-benutzerfreundlichen Betriebssystemkern. Es bietet eine Eingabeaufforderung, z. B. $oder >, führt eigene Befehle und Apps aus. Sie arbeiten immer durch das shellProgramm und arbeiten niemals direkt mit der Konsole oder dem Terminal.

Konsole - ist ein Fenster, in dem Ihre Textmodus-Programme ausgeführt werden. Dieses Fenster verarbeitet Tastendrücke und weiß, dass es Breite und Höhe ist. Kann Vollbild sein.

Terminal - ist ein Gerät mit Display für Menschen, das Zeicheneingaben akzeptiert und anzeigt. Es gibt keine Rückmeldung an den Benutzer über Höhe oder Breite (nur Hacks) oder Tastaturtastendrücke - nur Zeichen werden dorthin geleitet. Terminal verarbeitet spezielle Sequenzen in diesem Stream, um Dinge einzufärben, den Bildschirm aufzuräumen und andere unangenehme Dinge zu tun. Terminals sind schuppig, weil es leicht ist, Dinge durcheinander zu bringen, wenn die Datei, die Sie ausgeben, diese speziellen Sequenzen enthält. Sie sind in Netzwerk- und Geräte-Debug-Interfaces beliebt, da Sie nur einen einzigen Stream zum Senden der Ausgabe und Steuern des Ausgabegeräts tapbenötigen und einfach ins Gespräch kommen können, ohne ein Fenster initialisieren oder erstellen zu müssen.

serielle Konsole - ist eine Konsole, die den Eingabestream wie ein Terminal verarbeitet.

anatoly techtonik
quelle
3

Dies ist ein vages Thema, da die Begriffe sehr vieldeutig sind. Ich empfehle nachdrücklich, die Links zu lesen, die ich in dieser Antwort bereitgestellt habe, die auch meine Quellen für diese Antwort sind.

Eine Shell ist die Ebene über dem Kernel:

  • Es interpretiert die vom Benutzer eingegebenen Befehle und verarbeitet sie. Die Shell hat im Gegensatz zu Benutzern Zugriff auf den Kernel. Benutzer können nur über die Eingabe von Befehlen über eine Shell und über Prozesse (dh das Ausführen von Programmen) auf den Kernel zugreifen. Programme verwenden Systemaufrufe, um auf die Kernelfunktionalität zuzugreifen. Alle Systemaufrufe zusammen bilden die System-API.
  • Beispiele für Shells sind in der zweiten Terminaldefinition angegeben.

Ein Terminal hat viele Bedeutungen:

  • (1) Ein Textterminal . Dies ist die Kombination eines Anzeigemonitors und einer Tastatur. Ein Kabel verband das Terminal mit dem Computer (oft indirekt). Es wurde als Terminal bezeichnet, da es sich am Terminalende dieses Kabels befand. Diese Terminals waren normalerweise physisch vom Computer getrennt, da zu früheren Zeiten viele Terminals an einen einzelnen Mainframe / Computer angeschlossen waren, sodass mehrere Benutzer gleichzeitig auf den Computer zugreifen konnten.
  • (2) Ein Terminalfenster, auch Terminalemulator genannt . Unter Linux ist ein Terminalfenster die Emulation einer Konsole, die in einem GUI-Fenster enthalten ist. Dies ist die CLI, in die Sie Ihren Text eingeben, und diese Eingabe wird von der von Ihnen verwendeten Shell gelesen. Es gibt viele Arten von Shells (z. B. bash, dash, ksh88) und Terminals (z. B. konsole, gnome).
  • (3) Eine Erklärung zu Pseudoterminals finden Sie hier . Hierbei handelt es sich um zwei Gerätedateien, die für die Kommunikation zwischen einem Prozess und einem Terminalemulator verwendet werden.

Eine Konsole hat viele Bedeutungen:

  • (1) eine Instrumententafel mit den Bedienelementen für einen Computer.
  • (2) Eine Systemkonsole aka Computerkonsole . Dies ist die Kombination aus Anzeigemonitor und Tastatur, die an einen Computer angeschlossen ist. Dies ist gleichbedeutend mit dem, was wir "Textterminal" nennen. Manchmal sind auch andere vom Benutzer eingegebene Peripheriegeräte wie eine Maus Teil einer Konsole.
  • (3) Eine Befehlszeilenschnittstelle, die den gesamten Bildschirm abdeckt. Dies steht im Gegensatz zu einem Terminalfenster, bei dem es sich um eine grafische Benutzeroberfläche mit einem X in der rechten oberen Ecke handelt, um sie zu schließen. Dies sind die beiden Anzeigemodi für CLI (Befehlszeilenschnittstellen) in Unix-ähnlichen Systemen. Ähnlich einem Terminalfenster kann die Konsole auch viele Shells ausführen.

Unter Betriebssystemen können Sie häufig mehrere Konsolen auf einer physischen Konsole ausführen (Konsolendefinition 2). Diese werden als virtuelle Konsolen aka virtuelle Terminals und kann durch zugegriffen werden ctrl+ alt+ FxKombinationen. Zum Beispiel, wenn Sie die dritte virtuelle Konsole öffnen möchten, verwenden Sie die Kombination ctrl+ alt+ F3.

Konsolen (Definition 3) mögen Ihnen als Anachronismus erscheinen, aber Experten sollten mit ihnen vertraut sein, da es viele Betriebssysteme gibt, die GUIs nicht unterstützen. Wenn eine GUI nicht mehr reagiert, funktioniert die Konsole möglicherweise weiterhin.

user1534664
quelle
2

Die meisten Terminals sind heutzutage streng genommen Terminalemulatoren . Es ist eine Art Rolle in der Funktionsweise eines UNIX-ähnlichen Systems und gleichzeitig die grundlegende Schnittstelle, die die Systeme bieten. Tatsächlich baut alles, einschließlich der GUI, darauf auf.
Umgangssprachlich kann sich "Endgerät" auch auf Endpunkte in einem Computernetzwerk mit einer Sterntopographie beziehen.

Konsole bezieht sich auf die (Hardware-) Schnittstellen für die Terminals. Dh es gibt serielle Konsolen und heutzutage meist virtuelle .
Das umgangssprachlich als "Konsole" bezeichnete Fenster ist eine Shell, die über eine virtuelle Konsole mit einem Terminal des Systems verbunden ist.

Früher, als Computer teuer waren, hatte eine Einrichtung möglicherweise einen Computer und mehrere Terminals, die über serielle Kabel ("serielle Konsole") mit ihm verbunden waren. Das Betriebssystem, die Operationen usw. wurden auf dem physischen Computer ausgeführt, die Ein- und Ausgabe erfolgte auf der Konsole (n).
Sie können zwischen virtuellen Terminals wechseln, indem Sie CTRL+ ALT+ F1(bis F6) drücken : ein Rest dieser Zeiten.
Heutzutage geht das Konzept der "Thin Clients" in diese Richtung zurück, bei der große Mengen an Ressourcen zentralisiert und gerade genug Hardware bereitgestellt werden, um eine hochmoderne Benutzeroberfläche am tatsächlichen Arbeitsplatz bereitzustellen.

Shell ist die "Engine", die Sie im Terminal sehen. Es bietet Interop mit dem System selbst und fügt nützliche Funktionen wie Auto-Vervollständigung, Variablen usw. hinzu
. Systemaufrufe ohne Shell sind ein bisschen wie Codierung assemblerund eine Shell gibt es zumindest C.

befehlszeile bezieht sich auf die methode des austauschs von eingabe und ausgabe über ein textfenster. Genau genommen ist die Zeile, in die Sie eingeben, die (aktuelle) Befehlszeile. Die Methode wird im Allgemeinen korrekter als Befehlszeilenschnittstelle oder CLI bezeichnet.

  1. Kernel
  2. bietet terminal
  3. Terminal ist über eine Konsole verbunden
  4. Konsole läuft Shell
  5. Befehle und Ausgaben werden über die Kommandozeile (Schnittstelle) ausgetauscht
Kennzeichen
quelle
1
Befehlszeilenanweisungen werden vom Kernel nicht verstanden, sondern von einer Shell. Das "Kerngerüst der Anweisungen, die der Kernel versteht" wären Systemaufrufe. Die "grundlegende UNIX-Befehlszeilenschnittstelle" ist eine Shell, es gibt keine Trennung zwischen dieser und den "netten Funktionen". Ein "Terminal-Emulator-Fenster" ist keine Konsole.
Gilles
1
@Gilles angepasst. Offensichtlich haben mich da einige Dinge verwirrt.
Mark