Unix shell

A Unix Shell ist eine Befehlszeile Dolmetscher oder Hülse Das liefert eine Befehlszeile Benutzeroberfläche zum Unix-artig Betriebssysteme. Die Schale ist beide interaktiv Befehlssprache und ein Skriptspracheund wird vom Betriebssystem verwendet, um die Ausführung des Systems zu steuern Shell -Skripte.[2]
Benutzer interagieren normalerweise mit einer Unix -Shell mit a Terminal-Emulator; Der direkte Betrieb über serielle Hardwareverbindungen oder jedoch Sichere Schale sind für Serversysteme üblich. Alle Unix -Shells liefern den Dateinamen Wildcarding, Rohrleitungen, Hier Dokumente, Befehlssubstitution, Variablen und Kontrollstrukturen zum Zustandstest und Wiederholung.
Konzept
Der allgemeinste Gefühl des Begriffs Hülse bedeutet jedes Programm, das Benutzer verwenden, um Befehle einzugeben. Eine Shell verbirgt die Details des zugrunde liegenden Betriebssystems und verwaltet die technischen Details des Betriebssystems Programmierschnittstelle, dies ist die Ebene des Betriebssystems, das Programme auf diesem Betriebssystem verwenden.
In UNIX-ähnlichen Betriebssystemen haben Benutzer in der Regel viele Möglichkeiten von Befehlszeileninterpretern für interaktive Sitzungen. Wenn ein Benutzer protokolliert in Das System interaktiv wird ein Shell -Programm für die Dauer der Sitzung automatisch ausgeführt. Die Art der Shell, die für jeden Benutzer angepasst werden kann, wird normalerweise im Profil des Benutzers gespeichert, beispielsweise im Lokal Passwd Datei oder in einem verteilten Konfigurationssystem wie z. Nis oder LDAP; Der Benutzer kann jedoch alle anderen verfügbaren Shell interaktiv ausführen.
Auf Hosts mit einem Fenstersystem, wie Mac OSEinige Benutzer verwenden die Shell möglicherweise nie direkt. Auf UNIX -Systemen war die Shell in der Vergangenheit die Implementierungssprache von Systemstart -Skripten, einschließlich des Programms, das ein Fenstersystem, Konfiguration der Netzwerke und viele andere wesentliche Funktionen startet. Einige Systemanbieter haben jedoch das herkömmliche Shell-basierte Startup-System ersetzt (drin) mit unterschiedlichen Ansätzen, wie z. systemd.
Frühe Muscheln
Die erste Unix -Shell war die Thompson Shell, Sch, geschrieben von Ken Thompson bei Bell Labs und verteilt mit den Versionen 1 bis 6 von Unix von 1971 bis 1975.[3] Obwohl es für moderne Maßstäbe rudimentär ist, führte es viele der grundlegenden Merkmale ein, die allen späteren Unix -Shells, einschließlich Rohrleitungen, einfache Kontrollstrukturen verwendet wurden wenn
und gehe zu
und Dateiname Wildcarding. Obwohl es nicht in der aktuellen Verwendung ist, ist es immer noch als Teil einiger erhältlich Alte Unix Systeme.
Es wurde nach dem modelliert Mehrheit Shell, entwickelt 1965 von American Software Engineer Glenda Schroeder. Schroeders Multics -Shell wurde selbst nachempfunden Runcom Programm Louis Pouzin dem Multics -Team gezeigt. Das "RC" -Suffix in einigen Unix -Konfigurationsdateien (zum Beispiel. ".VIMRC") ist ein Überrest der Runcom -Abstammung von Unix -Shells.[1][4]
Das PWB Shell oder Mashey Shell, Schwar eine nach oben kompatible Version der Thompson-Shell, die von verstärkt wurde John Mashey und andere und verteilt mit dem Programmer Workbench Unix, circa 1975–1977. Es konzentrierte sich darauf, die Shell -Programmierung praktisch zu machen, insbesondere in großen gemeinsamen Computerzentren. Es fügte Shell -Variablen hinzu (Vorläufer von Umgebungsvariablen, einschließlich des Suchpfad-Mechanismus, der sich zu $ path entwickelte), benutzergerichtete Shell-Skripte und Interrupt-Handling. Die Kontrollstrukturen wurden von if/goto bis if/dann/else/endif, switch/breaksw/endsw und während/Ende/Break/Weiter erweitert. Als die Shell -Programmierung weit verbreitet wurde, wurden diese externen Befehle zur Leistung in die Shell selbst eingebaut.
Aber die am weitesten verbreiteten und einflussreichsten der frühen Unix -Shells waren die Bourne Shell und die C Shell. Beide Shells wurden als Codierungsbasis und Modell für viele abgeleitete und arbeitsbezogene Shells mit erweiterten Merkmalssätzen verwendet.[5]
Bourne Shell
Das Bourne Shell, Schwar eine neue Unix -Shell von Stephen Bourne in Bell Labs.[6] Verteilt als Shell für UNIX Version 7 im Jahr 1979 wurde der Rest der grundlegenden Merkmale eingeführt, die allen späteren Unix -Shells, einschließlich Hier Dokumente, Befehlssubstitution, generischer Variablen und umfangreicher gebaut Kontrollstrukturen. Die Sprache, einschließlich der Verwendung eines umgekehrten Schlüsselworts, um das Ende eines Blocks zu markieren, wurde von beeinflusst von Algol 68.[7] Traditionell ist der Name des Bourne Shell -Programms Sch und sein Pfad in der Unix -Dateisystemhierarchie ist /bin/sh. Eine Reihe von kompatiblen Arbeitsalikes sind jedoch auch mit verschiedenen Verbesserungen und zusätzlichen Funktionen erhältlich. Auf vielen Systemen kann SH a sein symbolischer Link oder harte Verbindung zu einer dieser Alternativen:
- Almquist Shell (Asche): geschrieben als BSD-lizenziertes Ersatz für die Bourne-Shell; häufig in ressourcenbezogenen Umgebungen verwendet. Das sh von Freebsd, Netbsd (und ihre Derivate) basieren auf Asche, die zu sein wurde Posix konform.
- Busybox: Eine Reihe von UNIX -Dienstprogrammen für kleine und eingebettete Systeme, einschließlich 2 Schalen: Asche, ein Derivat der almquistischen Hülle; und Hush, eine unabhängige Implementierung einer Bourne -Shell.
- Debian Almquist Shell (Dash): ein moderner Ersatz für Asche in Debian und Ubuntu
- BOURNE-AND-SCHRAUB (Bash): geschrieben als Teil der GNU -Projekt eine Superet der Bourne -Shell -Funktionalität bereitstellen. Diese Shell ist installiert und ist die Standard -Interaktive -Shell für Benutzer an den meisten Linux Systeme.
- Kornshell (KSH): geschrieben von David Korn Basierend auf den Bourne Shell Quellen[8] während der Arbeit bei Bell Labs
- Public Domain Korn Shell (pdksh)
- Mirbs Korn Shell (mksh): ein Nachkomme der OpenBSD /bin/ksh und pdksh, die als Teil von entwickelt wurden Miros BSD
- Z Shell (ZSH): Eine relativ moderne Hülle, die ist rückwärtskompatibel mit verprügeln. Es ist die Standardschale in Kali Linux seit 2020.4 und Mac OS Seit 10.15 Catalina.
Das Posix Standard gibt seine Standardhülle als strenge Teilmenge des Korn Shell, eine verbesserte Version der Bourne Shell. Aus der Sicht eines Benutzers wurde die Bourne Shell sofort erkannt, wenn sie durch die charakteristische Standard -Befehlszeile Eingabenachweise, das Dollar -Zeichen, aktiv ($).
C Shell
Das C Shell, CSHwurde der C -Programmiersprache einschließlich der Kontrollstrukturen und der Expressionsgrammatik modelliert. Es wurde geschrieben von Bill Joy als Doktorand bei Universität von Kalifornien, Berkeleyund war weit verbreitet mit BSD UNIX.[9]
Die C Shell führte auch viele Funktionen für interaktive Arbeiten ein, einschließlich der Geschichte und Bearbeitung Mechanismen, Aliase, Verzeichnisstapel, Tilde Notation, CDPath, Jobkontrolle und Pfad Hashing. Auf vielen Systemen kann CSH a sein symbolischer Link oder harte Verbindung zu Tenex C Shell (TCSH), eine verbesserte Version der Originalversion von Joy. Obwohl die interaktiven Merkmale von CSH in die meisten anderen Shells kopiert wurden, wurde die Sprachstruktur nicht weit verbreitet. Das einzige arbeitende ist Hamilton C Shell, geschrieben von Nicole Hamilton, zuerst verteilt auf OS/2 im Jahr 1988 und auf Fenster seit 1992.[10]
Konfigurationsdateien
Shells lesen Konfigurationsdateien unter verschiedenen Umständen. Diese Dateien enthalten normalerweise Befehle für die Shell und werden beim Laden ausgeführt. Sie werden normalerweise verwendet, um wichtige Variablen einzustellen $ Pathund andere, die das Verhalten und das Aussehen der Hülle kontrollieren. Die Tabelle in diesem Abschnitt zeigt die Konfigurationsdateien für beliebte Shells.[11]
Konfigurationsdatei | Sch | ksh | CSH | TCSH | verprügeln | ZSH |
---|---|---|---|---|---|---|
/etc/.login | Anmeldung | Anmeldung | ||||
/etc/csh.cshrc | Jawohl | Jawohl | ||||
/etc/csh.login | Anmeldung | Anmeldung | ||||
~/.tcshrc | Jawohl | |||||
~/.cshrc | Jawohl | Jawohl[a] | ||||
~/etc/ksh.kshrc | int. | |||||
/etc/sh.shrc | int.[b] | |||||
$ Env (Typisch ~/.kshrc)[12] | int.[c][d] | int. | int.[e] | |||
~/.login | Anmeldung | Anmeldung | ||||
~/.logout | Anmeldung | Anmeldung | ||||
/etc/Profil | Anmeldung | Anmeldung | Anmeldung | Anmeldung[f] | ||
~/.profile | Anmeldung | Anmeldung | Anmeldung[g] | Anmeldung[f] | ||
~/.bash_profile | Anmeldung[g] | |||||
~/.bash_login | Anmeldung[g] | |||||
~/.bash_logout | Anmeldung | |||||
~/.bashrc | int.+n/login | |||||
/etc/zshenv | Jawohl | |||||
/etc/zprofile | Anmeldung | |||||
/etc/zshrc | int. | |||||
/etc/zlogin | Anmeldung | |||||
/etc/zlogout | Anmeldung | |||||
~/.zshenv | Jawohl | |||||
~/.zprofile | Anmeldung | |||||
~/.zshrc | int. | |||||
~/.zlogin | Anmeldung |
Erläuterung:
- leer bedeutet, dass eine Datei überhaupt nicht von einer Shell gelesen wird.
- "Ja" bedeutet, dass eine Datei beim Start immer von einer Shell gelesen wird.
- "Anmeldung" bedeutet, dass eine Datei gelesen wird, wenn die Shell eine Login -Shell ist.
- "N/Login" bedeutet, dass eine Datei gelesen wird, wenn die Shell keine Anmeldeschale ist.
- "Int." bedeutet, dass eine Datei gelesen wird, wenn die Shell interaktiv ist.
- ^ nur wenn ~/.tcshrc nicht gefunden
- ^ Nur neuere Versionen der Bourne Shell
- ^ Verfügbar auf Systemen, die die Option "User Portability Utilities" unterstützen; Der Wert der Variablen muss ein sein absolut Pfad, und es wird ignoriert, "wenn die realen und effektiven Benutzer -IDs des Benutzers oder effektive und effektive Gruppen -IDs unterschiedlich sind".[13]
- ^ $ Env ist $ Home/.shrc In neueren Versionen der Bourne Shell
- ^ Gleiches Verhalten wie Sch, aber nur wenn er aufgerufen wird als Sch (Bash 2+) oder, da Bash 4.2, auch wenn er aufgerufen wird ausdrücklich im POSIX -Kompatibilitätsmodus (mit Optionen -Posix oder -O posix).[14]
- ^ a b Nur im SH/KSH -Kompatibilitätsmodus (wenn er als Bash, SH, KSH aufgerufen wird)
- ^ a b c Die erste lesbare Datei in der Reihenfolge von ~/.bash_profile, ~/.bash_login und ~/.profile; und nur ~/.profile wenn aufgerufen wie Sch oder zumindest 4,2, wenn er aufgerufen wird ausdrücklich im POSIX -Kompatibilitätsmodus (mit Optionen -Posix oder -O posix)
Andere Muscheln
Variationen des UNIX -Shell -Konzepts, die nicht von Bourne Shell oder C Shell stammen, enthalten die folgenden:[15]
- es - EIN Funktionelle Programmierung RC-kompatible Hülle geschrieben Mitte der 1990er Jahre.
- Freundliche interaktive Hülle (Fisch) - Erstmals 2005 veröffentlicht.
- Power Shell - Ein objektorientierter Shell entwickelte sich ursprünglich für Windows OS und jetzt für MacOS und Linux verfügbar.
- Qshell - eine Schale auf der Ibm i Betriebssystem basierend auf Posix und X/offen Standards.
- rc - Die Standardschale auf Plan 9 von Bell Labs und Version 10 Unix geschrieben von Tom Duff. Ports wurden an verschiedene Unix-artig Betriebssysteme.
- scsh - EIN Planen Hülse.
- Wunsch - Eine Fensterschale für Tcl/tk.
Siehe auch
Verweise
- ^ a b Tom van Vleck (1995-02-05). "Unix und Multics". Multiders.org. Abgerufen 2012-08-14.
- ^ Bourne, Stephen R. (Oktober 1983). "Die Unix -Shell". BYTE. p. 187. Abgerufen 30. Januar 2015.
- ^ "V6 Thompson Shell Port - Geschichte". V6shell.org. Abgerufen 2012-08-14.
- ^ Louis Pouzin (2000-11-25). "Der Ursprung der Hülle". Multiders.org. Abgerufen 2012-08-14.
- ^ Nikolai Bezroukov (2015-08-13). "Einführung in die Unix -Shell -Geschichte". Softpanorama. Abgerufen 2016-08-21.
- ^ "Bourne Shell oder SH". Interview mit Steve Bourne. Computerwelt. 2009-03-05. Abgerufen 2016-08-21.
- ^ "Betreff: Spätblüte überprüft". Abgerufen 20. September 2014.
- ^ Korn, David G. (26. Oktober 1994), "KSH - Eine erweiterbare Sprache auf hoher Ebene", Proceedings of the Usenix 1994 Sehr hohe Sprachen Symposium, Usenix Association, abgerufen 5. Februar, 2015,
Anstatt eine neue Skriptsprache zu erfinden, haben wir ein Formulareintragssystem erstellt, indem wir die Bourne-Shell geändert haben und nach Bedarf integrierte Befehle hinzugefügt haben.
- ^ Harley Hahn, Harley Hahns Leitfaden zu Unix und Linux.
- ^ "Hamilton C Shell für Windows -Versionsnotizen 4.0". Abgerufen 20. September 2014.
- ^ "Verschiedene Unix -Shells". unixnote.com. 2010. Abgerufen 2016-08-21.
- ^ SCO UNIX -Gruppe, SCO Unixware 7 Dokumentation, 22. April 2004, abgerufen am 18. Oktober 2012.
- ^ "Shell -Befehlssprache". openGroup.org. Abgerufen 15. Juni 2015.
- ^ "Bash -Referenzhandbuch: Bash -Startdateien". gnu.org. Abgerufen 15. Juni 2015.
- ^ "FreeBSD -Ports: Shells". FreeBSD.org. 2014-03-30. Abgerufen 2014-04-05.