GNU/Linux
Schale
Suche…
Einführung
Die Shell führt ein Programm als Antwort auf ihre Aufforderung aus. Wenn Sie einen Befehl eingeben, sucht die Shell nach dem Programm und führt es dann aus. Wenn Sie beispielsweise den Befehl ls eingeben, sucht die Shell nach dem Dienstprogramm / Programm namens ls und führt es dann in der Shell aus. Die Argumente und Optionen, die Sie mit den Dienstprogrammen angeben, können sich auf das Ergebnis auswirken. Die Shell wird auch als CLI oder Command Line Interface bezeichnet.
Standardshell ändern
Die meisten modernen Distributionen werden mit BASH ( B Ane A Gain SH Ell) vorinstalliert und als Standardshell konfiguriert.
Der Befehl (eigentlich eine ausführbare binäre, eine ELF) , die für den Wechsel in shells Linux verantwortlich ist chsh
(CH ange sh ell).
Wir können zunächst mit Hilfe des Befehls chsh -l
überprüfen, welche Shells auf unserem Computer bereits installiert und konfiguriert sind. Dadurch wird ein ähnliches Ergebnis ausgegeben:
[user@localhost ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/usr/bin/fish
In einigen Linux-Distributionen ist chsh -l
ungültig. In diesem Fall finden Sie die Liste aller verfügbaren Shells in der Datei / etc / shells. Sie können den Inhalt der Datei mit cat
:
[user@localhost ~]$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/usr/bin/fish
Jetzt können wir unsere neue Standard-Shell auswählen, zB fish
, und sie mit chsh -s
konfigurieren.
[user@localhost ~]$ chsh -s /usr/bin/fish
Changing shell for user.
Password:
Shell changed.
Jetzt müssen Sie nur noch einen Abmelde-Anmeldezyklus durchführen und die neue Standard-Shell genießen.
Wenn Sie die Standard-Shell für einen anderen Benutzer ändern möchten und über Administratorrechte auf dem Computer verfügen, können Sie dies durch die Verwendung von chsh
als root
. Vorausgesetzt, wir möchten die Standard-Shell von user_2
in fish ändern, verwenden wir denselben Befehl wie zuvor, aber mit dem Benutzernamen des anderen Benutzers, chsh -s /usr/bin/fish user_2
.
Um zu überprüfen, was die aktuelle Standard-Shell ist, können wir die Umgebungsvariable $SHELL
anzeigen, die auf den Pfad zu unserer Standard-Shell verweist. Nach unserer Änderung würden wir erwarten, dass ein ähnliches Ergebnis erzielt wird.
~ echo $SHELL
/usr/bin/fish
chsh
Optionen:
-s shell
Legt die Shell als Login-Shell fest.
-l
, --list-shells
Drucken Sie die Liste der in / etc / shells aufgelisteten Shells und beenden Sie das Programm.
-h
, --help
Drucken Sie eine Nutzungsmeldung und beenden Sie das Programm.
-v
, --version
Versionsinformationen drucken und beenden.
Grundlegende Shell-Dienstprogramme
Anpassen der Shell-Eingabeaufforderung
Die Standard-Eingabeaufforderung kann geändert werden, um sie anders und kurz auszusehen. Wenn das aktuelle Verzeichnis lang ist, wird die Standardeingabeaufforderung zu groß. In diesen Fällen ist die Verwendung von PS1
hilfreich. Ein kurzer und individueller Befehl, schön und elegant. In der nachstehenden Tabelle wurde PS1
mit einer Reihe von Argumenten verwendet, um verschiedene Formen von Shell-Eingabeaufforderungen anzuzeigen. Die Standard-Eingabeaufforderung sieht bruce@gotham ~ $
so aus: user@host ~ $
In meinem Fall sieht es so aus: bruce@gotham ~ $
. Es kann gemäß der folgenden Tabelle geändert werden:
Befehl | Nützlichkeit |
---|---|
PS1 = '\ w $' | ~ $ Shell-Eingabeaufforderung als Verzeichnisname. In diesem Fall lautet das Stammverzeichnis das Stammverzeichnis. |
PS1 = '\ h $' | gotham $ shell prompt als Hostname |
PS1 = '\ u $' | bruce $ shell prompt als Benutzername |
PS1 = '\ t $' | 22:37:31 $ Shell-Eingabeaufforderung im 24-Stunden-Format |
PS1 = '@ $' | 10:37 PM Shell-Eingabeaufforderung im 12-Stunden-Format |
PS1 = '! $ ' | 732 zeigt die Verlaufsnummer des Befehls anstelle der Shell-Eingabeaufforderung an |
PS1 = "Dude $" | dude $ zeigt die Shell-Eingabeaufforderung so an, wie Sie es möchten |
Einige grundlegende Shellbefehle
Befehl | Nützlichkeit |
---|---|
Ctrl-k | schneiden / töten |
Ctrl-y | Ruck / Paste |
Ctrl-a | Der Cursor wird an den Zeilenanfang gesetzt |
Ctrl-e | Der Cursor wird zum Ende der Zeile gebracht |
Ctrl-d | löscht das Zeichen nach / am Cursor |
Ctrl-l | löscht den Bildschirm / das Terminal |
Ctrl-u | löscht alles zwischen Eingabeaufforderung und dem Cursor |
Ctrl-_ | macht das letzte in der Kommandozeile eingegebene Objekt rückgängig |
Ctrl-c | unterbricht / stoppt den Job / Prozess, der im Vordergrund ausgeführt wird |
Ctrl-r | Rückwärtssuche im Verlauf |
~/.bash_history | speichert die letzten 500 Befehle / Ereignisse, die in der Shell verwendet werden |
history | zeigt den Befehlsverlauf an |
history | grep <key-word> | Zeigt alle Befehle im Verlauf mit dem Schlüsselwort <Schlüsselwort> an (nützlich, wenn Sie sich an einen Teil des Befehls erinnern, der in der Vergangenheit verwendet wurde). |
Erstellen Sie Ihren eigenen Befehlsalias
Wenn Sie müde sind, lange Befehle in bash zu verwenden, können Sie einen eigenen Befehlsalias erstellen.
Am besten können Sie dazu eine Datei namens .bash_aliases in Ihrem Home-Ordner ändern (oder erstellen, wenn sie noch nicht vorhanden ist). Die allgemeine Syntax lautet:
alias command_alias='actual_command'
Dabei ist actual_command
der Befehl, den Sie umbenennen, und command_alias
der neue Name, den Sie ihm gegeben haben. Zum Beispiel
alias install='sudo apt-get -y install'
ordnet den neuen Befehlsalias install
dem aktuellen Befehl sudo apt-get -y install
. Das heißt, wenn Sie install in einem Terminal verwenden, wird dies von bash als sudo apt-get -y install interpretiert.
Suchen Sie eine Datei auf Ihrem System
Mit bash können Sie eine Datei mit dem Befehl locate
leicht finden. Angenommen, Sie suchen nach der Datei mykey.pem:
locate mykey.pem
Manchmal haben Dateien merkwürdige Namen, zum Beispiel haben Sie möglicherweise eine Datei wie random7897_mykey_0fidw.pem
. Angenommen, Sie suchen nach dieser Datei, aber Sie erinnern sich nur an die Teile mykey und pem. Sie können den Befehl locate
mit grep
wie grep
kombinieren:
locate pem | grep mykey
Das würde alle Ergebnisse bringen, die beide Stücke enthalten.
Beachten Sie, dass nicht bei allen Systemen das locate
installiert ist und viele, bei denen es nicht aktiviert wurde. locate
ist schnell und effizient, da es regelmäßig Ihr System durchsucht und die Namen und Speicherorte für jede Datei im Cache speichert. Wenn diese Datenerfassung jedoch nicht aktiviert ist, können Sie nichts darüber erfahren. Sie können mit updatedb
die im Cache gespeicherten Daten zu Dateien aktualisieren auf Ihrem Dateisystem den Dateisystem - Scan , um manuell auslösen.
Sollten Sie keine Arbeits haben locate
, können Sie auf dem zurückgreifen find
Dienstprogramm:
find / -name mykey.pem -print
ist in etwa gleichbedeutend mit locate mykey.pem
, muss jedoch jedes Mal, wenn Sie es ausführen, die Dateisysteme für die betreffende Datei locate mykey.pem
, anstatt zwischengespeicherte Daten zu verwenden. Dies ist offensichtlich langsamer und weniger effizient, jedoch in Echtzeit. Der find
Dienstprogramm kann viel mehr tun , als Dateien zu finden, aber eine vollständige Beschreibung seiner Fähigkeiten sprengt den Rahmen dieses Beispiels.