GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist Ihre Lieblings-Shell für die Arbeit als Systemadministrator?

Sie haben vielleicht schon einmal den Ausdruck gehört:„Wenn alles, was du hast, ein Hammer ist, sehen alle Probleme wie Nägel aus.“ Das gilt nicht für die wunderbare Welt der POSIX-Shells. Für den Uneingeweihten ist ein leuchtend schwarzer Bildschirm mit grünem Text dasselbe wie jeder andere leuchtend schwarze Bildschirm mit grünem Text, aber viele Systemadministratoren wissen, dass die von Ihnen gewählte Shell jede Facette Ihrer Interaktion mit Ihrem Computer verändern kann.

Es ist nicht ungewöhnlich, dies auf die harte Tour herauszufinden, normalerweise unter Druck. Sobald Sie jedoch die Ohnmacht erfahren, die falsche Syntax in eine unbekannte Shell einzugeben, entwickeln Sie schnell eine Bindung zu der, in der Sie sich wohl fühlen. Trotzdem haben die meisten populären Shells Vorzüge, die dazu führen, dass verschiedene Systemadministratoren sie als Standardschnittstelle festlegen . Wenn Sie ein wenig Zeit mit jedem verbringen, werden Sie vielleicht feststellen, dass Sie einen neuen Favoriten entwickeln oder sich zumindest in einer zuverlässigen Backup-Shell niederlassen können.

Hier sind einige der beliebtesten Shells und was Benutzer an ihnen lieben.

Asche und Dash

Die Almquist-Shell wurde als Klon der berühmten Bourne-Shell entwickelt (nicht zu verwechseln mit der Bourne Again Shell, auch bekannt als Bash). Es wurde absichtlich leicht gehalten, wahrscheinlich aus dem gleichen Grund, aus dem Zeilenbearbeitung und Historie ursprünglich ausgeschlossen wurden:Kenneth Almquist war der Meinung, dass zusätzliche UX-Funktionen außerhalb der Shell gehörten. Jahrzehnte später ist die Shell immer noch eine beliebte kleine und einfache Shell. Es wurde mit den ersten Versionen von Android ausgeliefert und war viele Jahre lang eine gängige Standard-Shell für die minimale Boot-Umgebung von Linux-Distributionen.

Wie bei vielen POSIX-Shells ist die Verwendung von Ash nominell jedem vertraut, der an eine Konsole gewöhnt ist. Sie geben Befehle ein; Sie erhalten eine Ausgabe. Einige der zusätzlichen Funktionen sind vorhanden, während andere fehlen. Wenn Sie beispielsweise daran gewöhnt sind, Tastaturkürzel im Emacs- oder Vim-Stil zu verwenden, werden Sie feststellen, dass sie in Ash merklich fehlen. Sie können sie jedoch mit -E aktivieren (solange sie zur Kompilierzeit eingefügt wurden). (für Emacs) oder -V (für Vim) Option. Verlauf (eigentlich der fc eingebauter Befehl in Ash) ist auch nicht selbstverständlich, je nachdem, wie Ash kompiliert wurde. Es gibt keine Arrays und der eingebaute Befehl trap akzeptiert keine Optionen.

Dash ist eine Almquist-Shell und tatsächlich eine Portierung von Ash von NetBSD auf Debian Linux und steht für Debian Almquist Shell .

Ashs beste Eigenschaft ist gleichzeitig seine größte Einschränkung. Es ist eine minimale Shell, wenn Sie also nach Einfachheit suchen, dann ist dies die richtige Shell für Sie.

Bash

Die Bourne-Again-Shell (Bash) wurde vom GNU-Projekt erstellt, um die proprietäre Bourne-Shell zu ersetzen (die selbst erstellt wurde, um die Shell von Ken Thompson zu ersetzen). Heute ist Bash mehr als nur eine Shell:Es ist eine legitime Programmiersprache, eines der Hauptwerkzeuge des findigen Systemadministrators und fast eine kulturelle Ikone für Nicht-Programmierer, die eine schnelle und schmutzige Automatisierung benötigen. Wenn Sie einen Tag in einer Linux-Shell verbringen können, können Sie ein Bash-Skript entwickeln, um sich selbst zu ersetzen. Es ist einfach, direkt und überraschend leistungsfähig, mit Funktionen wie Arrays, einem Verzeichnisstapel, Traps, Parsing von Teilzeichenfolgen, Emacs- oder Vim-Tastaturkürzeln und vielem mehr.

Ein gemeinsames Argument dagegen Bash ist seine Größe, die auf meinem System etwa 1 MB beträgt, verglichen mit 200 KB für Ash. Ein weiterer Grund ist seine Komplexität. Bash ist so funktionsreich, dass ein in reinem POSIX geschriebenes Skript zwar in Bash ausgeführt wird, dies jedoch nicht immer für ein Bash-Skript gilt, das versucht, in einer reinen POSIX-Shell ausgeführt zu werden. Während Bash einen POSIX-Modus hat, sind seine zusätzlichen "Bashisms" normalerweise zu ansprechend, um sie zu ignorieren. Die gute Nachricht ist, dass Bash Open Source ist, also kann es leicht installiert werden, um ein Skript voller Bash-Ismen auszuführen, aber einige Benutzer sind trotzdem grundsätzlich dagegen.

Bash ist eine flexible und leistungsstarke Shell und hat andere Shells als Standard auf vielen Systemen verdrängt. Lernen Sie Bash, und Sie werden eine moderne und funktionsreiche Shell erleben, die alle Anzeichen dafür zeigt, dass sie im Laufe ihrer Entwicklung freundlicher und freundlicher wird.

[ Jetzt herunterladen:Eine Anleitung für Systemadministratoren zum Bash-Skripting. ]

Busybox

BusyBox ist eine Multi-Call-Binärdatei, die viele gängige POSIX-Dienstprogramme in einer einzigen ausführbaren Datei kombiniert. Mit anderen Worten, es ist die zentrale All-in-One-Binärdatei der POSIX-Benutzeroberfläche. Wenn es aus dem Quellcode installiert wird, platziert es eine busybox ausführbar in der Bibliothek Ihres Systems, und es wird von Ihnen erwartet, dass Sie darauf verlinken, wenn Sie individuelle Befehle für sich und Ihre Benutzer erstellen. Zum Beispiel:

$ ln --symbolic /lib64/busybox/busybox gzip
$ gzip --help 
BusyBox v1.28.1 (2020-07-13 11:42:31 NZST) multi-call binary.

Usage: gzip [-cfkdt123456789] [FILE]...

In weniger als 1 MB erhalten Sie ungefähr 400 Befehle, einschließlich ls , CD , cp , mv , grep , ps , Kennwort , ausschalten , printf , sed , Komprimierungsprogramme, Prozessverwaltung und vieles mehr. Die meisten dieser Befehle sind im Vergleich zu ihren GNU-Äquivalenten minimal, aber je nach Anwendungsfall sind sie wahrscheinlich ausreichend. Ebenso ist die interaktive Shell von Busybox Ash, erfüllt also die POSIX-Spezifikationen und bietet sonst wenig.

Csh oder Tcsh

Die C-Shell (csh ) und seine spätere Inkarnation tcsh , verwenden Sie eine C-ähnliche (oder C++ oder Java, falls Sie damit besser vertraut sind) Syntax. Hier ist zum Beispiel ein if Schleife in Bash:

v=1

if [[ $v == 1 ]]
  then
  echo "verbose"
fi

Und hier ist dasselbe in Csh:

set v=1

if ($v == 1) then
  echo "verbose"
endif

Der Unterschied ist subtil, aber für Leute, die an die Syntax von C und ähnlichen Sprachen gewöhnt sind, gibt es genug kleine Unterschiede, um ihre Erfahrung spürbar zu verbessern. Einige eingebaute Befehle fehlen auch. Beispielsweise gibt es keinen type oder hash Befehle in tcsh , und Sie können keine eigenen Funktionen definieren.

Während csh leidet etwas unter seinem Alter, tcsh ist ein gutes Update und hat fast die gleichen Fähigkeiten wie Bash, wenn auch von Zeit zu Zeit mit einer anderen Syntax.

Fisch

Die Fish Shell nennt sich stolz „eine moderne Muschel für die 90er“. Es hat alle Vorteile robuster Shells wie Bash und Zsh, aber mit zusätzlichen Funktionen wie Syntaxhervorhebung, einer fish_config Befehl und vieles mehr. Sein Ziel ist es, dem Benutzer zusätzlichen Kontext und ein besseres Konfigurationsverwaltungssystem als nur eine einzige .bashrc bereitzustellen .

Hier und da gibt es leichte Unterschiede in der Syntax. Dies ist beispielsweise eine Funktionsdefinition für Bash:

function sshrm() { 
  /usr/bin/sed -i "$1d" $HOME/.ssh/known_hosts
}

Das gleiche jedoch in Fish:

function sshrm
  /usr/bin/sed -i "$1d" $HOME/.ssh/known_hosts
end

Fans von Fish lieben seine einfachen Themenfunktionen und die Art und Weise, wie es standardmäßig auf ein Verzeichnis mit Konfigurationsdateien statt auf eine .bashrc setzt Datei, die bestenfalls andere dot-Dateien bezieht.

Korn

Die Korn-Shell (ksh ) wurde von David Korn entwickelt und 1983 veröffentlicht. Während sowohl Bash als auch tcsh als Standard-Shells für gängige POSIX-Systeme ausgeliefert wurden, ist die Korn-Shell weitgehend eine "alternative" Shell geblieben. Aber wenn es um alternative Shells geht, ksh hat sich gut geschlagen, und als Microsoft Powershell auf Tech-Konferenzen vorstellte, nannten sie die Korn-Shell als Haupteinfluss.

Es gibt einige verschiedene Versionen der Korn-Shell (mksh, ksh93, ksh93u+, ksh2020 und andere), aber die offiziellen Zweige werden auf Github von AT&T gepflegt.

An Bash-Benutzer, ksh wird sich wahrscheinlich ziemlich vertraut anfühlen. Das Lesen eines Tutorials über Korn-Skripting ist fast dasselbe wie das Weiterlesen über Bash-Skripting. Sie können Ihre eigenen Funktionen definieren, Aliase erstellen, Schleifen schreiben und sogar Abschlussoptionen mit Registerkarten programmieren. Emacs-Tastenbelegungen sind standardmäßig aktiviert, aber Sie können zu vi wechseln Tastenkombinationen mit -o vi Option beim Start oder durch Platzieren von set -o vi in Ihrer ~/.environ.ksh Konfigurationsdatei.

Was Kornshell fehlt, wird Ihnen wahrscheinlich nicht sofort auffallen. Beispielsweise können Sie integrierte Befehle nicht aktivieren oder deaktivieren, und es gibt einen integrierten Befehl namens whence das macht die gleiche Aufgabe wie which ausführbar. Es gibt keinen typeset Befehl, aber Kornshell verfügt über Arrays mit den wichtigsten Suchfunktionen. Mit anderen Worten, obwohl es geringfügige Unterschiede gibt, ksh ist für jeden, der an Bash, Fish oder Zsh gewöhnt ist, einfach zu verwenden.

Zsh

Die Z-Shell (zsh ) ist eine interaktive Bourne-ähnliche POSIX-Shell, die für ihre Fülle an innovativen Funktionen bekannt ist. Z Shell-Benutzer zitieren oft die vielen Annehmlichkeiten und schreiben ihr die erhöhte Effizienz und umfassende Anpassung zu. Beim ersten Start bietet Zsh mehrere Konfigurationsoptionen, z. B. die Größe Ihres Verlaufs, Tastenkombinationen (Emacs oder Vim) und wie viele zusätzliche Funktionen Sie möchten. Sie können zum Beispiel die cd erstellen Befehl implizit, indem Zsh erlaubt wird, einen Verzeichniswechsel einzuleiten, wenn Sie einen nicht ausführbaren Pfad ohne Befehl angeben. Es gibt mehrere zusätzliche Funktionen, die Sie durch Bearbeiten der Datei .zshrc aktivieren oder deaktivieren können Konfigurationsdatei.

Es gibt ein paar subtile Unterschiede in der Syntax zwischen Bash und Zsh, aber nur wenige Befehle sind oft skriptgesteuert, sodass die Wahrscheinlichkeit, dass Sie Skripte anpassen müssen, gering ist. Zum Beispiel, um einen eingebauten Befehl in Bash zu deaktivieren:

$ enable -n cd

In Zsh ist der Befehl etwas intuitiver:

$ disable cd

Um zwischengespeicherte Befehlspfade in Bash neu zu erstellen, müssen Sie den vorhandenen löschen, aber in Zsh gibt es eine Option dafür:

$ hash -f

Es gibt auch kleine Vorteile für diejenigen, die von anderen Shells migrieren. Sie können zum Beispiel den whence verwenden Befehl in der Z-Shell, der Benutzern der Korn-Shell bekannt sein dürfte.

Zsh ist eine lustige und dynamische Mischung aus alten und neuen Funktionen, und es hat eine lebendige Community, die Themen und Plugins dafür entwickelt. Diese sind einfach zu installieren und fügen Ihrer Shell noch mehr Funktionalität hinzu, was Z Shell zu einem Anwärter auf die flexibelste verfügbare Shell macht.

Wählen Sie Ihre Muscheln

Wie bei Open Source üblich, müssen Sie sich nicht nur für eines der Tools entscheiden. Obwohl ich zu Hause ein begeisterter Bash-Benutzer bin, verwende ich oft standardmäßig tcsh aus Gewohnheit bei der Arbeit, weil viele der Skripte in der Branche für visuelle Effekte für C Shell geschrieben wurden. Bis heute schreibe ich zwanghaft Git-Hooks in tcsh aus diesem Grund.

Sie müssen Ihre Wahl der Schale nicht unbedingt begründen. Verwenden Sie, was für Sie und Ihr Team am besten funktioniert. Solange es Open Source ist, haben Sie eine gute Wahl getroffen.

[ Kostenloser Online-Kurs:Technischer Überblick zu Red Hat Enterprise Linux. ]


Linux
  1. Was ist Ihr Lieblings-Linux-Terminal-Trick?

  2. Was ist Ihr Lieblings-Linux-Paketmanager?

  3. Was ist Ihr Lieblings-Terminal-Emulator?

  4. Alles Gute zum Jubiläum GNOME:Was ist Ihre Lieblingsversion?

  5. Was ist Ihr Lieblings-Linux-Terminal-Emulator?

Was ist Ihre Lieblings-Linux-Distribution?

Linux-Systemadministratoren:Was ist Ihre Lieblings-IDE?

Ressourcen für die Programmierung von portablen Shells?

12 Bash-For-Loop-Beispiele für Ihr Linux-Shell-Scripting

Die 10 besten Spiele für Steam Deck:Was ist dein Favorit?

Was ist der Unterschied zwischen &> und >&in bash?