Marcel - eine modernere Shell für Linux
- 4124
- 689
- Henry Liebold
Marcel ist eine neue Hülle. Es ähnelt in vielerlei Hinsicht traditionellen Muscheln, aber es macht ein paar Dinge anders:
- Rohrleitungen: Alle Shells senden Rohre, um einen Text aus der Ausgabe eines Befehls an die Eingabe eines anderen zu senden. Marcel Pipes strukturierte Daten anstelle von Strings.
- Python: Marcel ist in Python implementiert und enthüllt Python auf verschiedene Weise. Wenn Sie in Ihren Befehlen ein bisschen Logik benötigen, können Sie es in Marcel in Python ausdrücken.
- Scripting: Marcel verfolgt einen ungewöhnlichen Ansatz zum Skripten. Sie können natürlich einfach eine Abfolge von Marcel -Befehlen in einer Textdatei schreiben und sie ausführen. Marcel bietet aber auch eine API in Form eines Python -Moduls. Sie können dieses Modul so importieren, um Python -Skripte auf weitaus bequemere Weise zu machen, als es mit einfachem Python möglich ist.
Marcel ist unter lizenziert GPLV3.
Installieren Sie Marcel Modern Shell unter Linux
Marcel verlangt Python 3.6 oder später. Es wurde auf Linux entwickelt und getestet und funktioniert meistens an Mac OS. (Wenn Sie den Port zu helfen möchten, um zu Port zu helfen Fenster, oder um die zu reparieren Mac OS Mängel, melden Sie sich.)
Installieren Marcel Für Ihre eigene Verwendung:
# python3 -m pip install marcel
Oder wenn Sie für alle Benutzer installieren möchten (e.G., Zu /usr/lokal
):
$ sudo python3 -m PIP Installation -Prefix /usr /Local Marcel
Sobald Sie installiert haben Marcel, Überprüfen Sie, ob es funktioniert, indem der Befehl ausgeführt wird Marcel, und dann am Marcel auffordern, die ausführen Ausführung Befehl:
$ marcelÜberprüfen Sie die Marcel Shell -Version
Anpassung von Marcel Shell
Sie können anpassen Marcel in der Datei ~/.Marcel.py
, Das wird beim Start gelesen (und bei der Änderung neu gelesen). Wie Sie aus dem Namen der Datei erkennen können, erfolgt die Anpassung von Marcel in Python.
Eine Sache, die Sie wahrscheinlich tun möchten, ist, die Eingabeaufforderung anzupassen. Zu diesem Zweck weisen Sie der eine Liste zu PROMPT Variable. Wenn Sie beispielsweise möchten, dass Ihre Eingabeaufforderung das aktuelle Verzeichnis ist, gedruckt in Grün, gefolgt von >
in blau gedruckt:
Eingabeaufforderung = [Farbe (0, 4, 0), Lambda: PWD, Farbe (0, 2, 5), '>']
Die resultierende Eingabeaufforderung sieht so aus:
Ändern Sie Marcel Shell -Eingabeaufforderung FarbeDies ersetzt die unergründlichen PS1
Konfiguration, die Sie in Bash tun müssen. Farbe (0, 4, 0) an Grün, (Die Argumente sind RGB Werte im Bereich 0-5). PWD ist die Umgebungsvariable, die Ihr aktuelles Verzeichnis darstellt, und das Präfix dieser Variablen mit Lambda:
generiert eine Funktion, die jedes Mal bewertet wird, wenn die Eingabeaufforderung angezeigt wird.
Der ~/.Marcel.py
kann auch Python -Module importieren. E.G., Wenn Sie die Funktionen des Mathematikmoduls in Ihren Marcel -Befehlen verwenden möchten:
vom Mathematikimport *
Sobald Sie dies getan haben, können Sie sich auf Symbole aus diesem Modul beziehen, e.G. Pi
:
Beachten Sie, dass Pi
ist Klammern. Allgemein, Marcel Verwendet Klammern, um Python -Ausdrücke abzugrenzen. So (Pi)
bewertet den Python -Ausdruck, der den Wert der Variablen abruft Pi. Sie können auf diese Weise auch auf traditionelle Umgebungsvariablen zugreifen, e.G. (BENUTZER) Und (HEIM), oder ein gültiger Python -Ausdruck, der sich auf Symbole in Marcels Namespace stützt.
Und Sie können natürlich Ihre eigenen Symbole definieren. Zum Beispiel, wenn Sie diese Funktionsdefinition in einsetzen ~/.Marcel.py
:
Def Factorial (n): f = 1 für i im Bereich (1, n + 1): f *= i return f
Dann können Sie die faktorielle Funktion in der Befehlszeile verwenden, e.G.
Erstellen Sie eigene Symbole in MarcelMarcel Shell -Beispiele
Hier lernen wir einige Beispiele für Befehle in der Marcel Shell lernen.
Finden Sie nach Erweiterung Dateigrößen
Erkunden Sie das aktuelle Verzeichnis rekursiv und gruppieren Sie die Dateien nach ihrer Erweiterung (e.G. .txt
, .py
und so weiter) und berechnen Sie die Gesamtdateigröße für jede Gruppe.
Sie können dies in Marcel wie folgt tun:
Finden Sie nach Erweiterung DateigrößenDer LS -Operator erstellt einen Strom von Dateiobjekten ((-fr
bedeutet rekursiv Besuche und zurückgeben nur Dateien).
Der Datei Objekte werden zum nächsten Befehl geleitet, Karte. Der Karte Gibt eine Python -Funktion in den äußersten Klammern an, die jede Datei einem Tupel, das die Erweiterung der Datei enthält. (Marcel ermöglicht das Lambda -Schlüsselwort weggelassen werden.)
Der Rot (Reduzieren) Operator, Gruppen nach dem ersten Teil des Tupels (Verlängerung) und dann die Größen innerhalb jeder Gruppe zusammenfassen. Das Ergebnis ist nach Erweiterung sortiert.
Host Executables und die Marcel Pipeline
Pipelines Kann eine Mischung aus Marcel -Operatoren und Host -Executables enthalten. Operatoren Rohrobjekte, jedoch an den Grenzen des Bedieners/an den ausführbaren Grenzen, stattdessen Marcel Pipes -Zeichenfolgen.
Beispiel /Bin/Bash
.
$ cat /etc /passwd \ | Karte (Zeile: Zeile.Split (':') \ | select (*Zeile: Zeile [-1] == '/bin/bash') \ | Karte (*Zeile: Zeile [0]) \ | Xargs EchoListen Sie Benutzerschalen auf
Katze ist eine Linux -ausführbare Datei. Es liest /etc/passwd, und Marcel verpflichten seinen Inhalt stromabwärts zur Marcel -Operator -Karte.
Das Klammern Argument zur Karte ist eine Python -Funktion, die die Linien am Teil der Leitungen spaltet :
Abschlüsse, die 7-Tupel ergeben. A wählen ist ein Marcel -Operator, dessen Argument eine Python -Funktion ist, die die Tupel identifiziert, in denen sich das letzte Feld befindet /Bin/Bash.
Der nächste Operator, eine andere Karte, behält das Benutzernamefeld jedes Eingangstuple bei. Endlich, Xargs Echo kombiniert die eingehenden Benutzernamen zu einer einzelnen Zeile, die in STDOut gedruckt ist.
Scripting in Marcel Shell
Während Python wird manchmal als eine Skriptsprache angesehen, es funktioniert eigentlich nicht gut für diesen Zweck. Das Problem ist, dass das Ausführen von Shell -Befehlen und andere ausführbare Ausführungsfähigkeiten von Python umständlich sind. Sie können verwenden Betriebssystem.System()
, Das ist einfach, aber oft unzureichend für den Umgang mit Stdin, Stdout und Stderr. Subprozess.Popen ()
ist leistungsfähiger, aber komplexer zu bedienen.
Marcels Ansatz ist es, ein Modul bereitzustellen, das Marcel -Operatoren in die Sprachfunktionen von Python integriert. Um ein früheres Beispiel zu überdenken, finden Sie hier den Python -Code für die Berechnung der Summe der Dateigrößen nach Erweiterung:
Von Marcel.API -Import * für ext, Größe in (ls (Datei = true, rekursiv = true) | Karte (Lambda f: (f).Suffix, f.Größe)) | Rot('.','+')): print (f' ext: size)
Die Shell -Befehle sind die gleichen wie zuvor, mit Ausnahme von syntaktischen Konventionen. So ls -fr
verwandelt sich in ls (Datei = true, rekursiv = wahr). Die Karte und die roten Operatoren sind auch da, wie in der Shell -Version mit Rohren verbunden. Der gesamte Shell -Befehl (ls… rot) ergibt einen Python -Iterator, damit der Befehl mit Python für eine Schleife verwendet werden kann.
Datenbankzugriff mit Marcel Shell
Sie können den Datenbankzugriff in Marcel Pipelines integrieren. Zuerst müssen Sie den Datenbankzugriff in der Konfigurationsdatei konfigurieren, ~/.Marcel.py
, e.G.
define_db (name = 'jao', driver = "psycopg2", dbname = "acme", user = "jao") db_default = 'Jao' '
Dies konfiguriert den Zugriff auf a Postgres Datenbank benannt Gipfel, Verwendung der psycopg2 Treiber. Verbindungen von Marcel werden mit dem hergestellt Jao Benutzer, und das Datenbankprofil wird benannt Jao. (Db_default gibt die an Jao Datenbankprofil als das, das verwendet wird, wenn kein Profil angegeben ist.) Mit dieser Konfiguration kann die Datenbank jetzt mit dem SQL -Operator e abgefragt werden.G.
SQL 'Wählen < 10' \ | out --csv --file ~/reorder.csv
Dieser Befehl fragt eine Tabelle mit dem Namen Teil, und füllt das Abfrageergebnis in die Datei ~/reordieren.CSV
, im CSV -Format.
Fernzugriff mit Marcel Shell
Ähnlich wie bei Datenbankzugriff kann der Remote -Zugriff in konfiguriert werden in ~/.Marcel.py
. Dies konfiguriert beispielsweise einen 4-Knoten-Cluster:
Define_remote (name = 'lab', user = "frankenstein", identity = "/home/frankenstein/.ssh/id_rsa ", host = ['10.0.0.100 ', '10.0.0.101 ', '10.0.0.102 ', '10.0.0.103 '])
Der Cluster kann als identifiziert werden ein Labor In Marcel -Befehlen. Die Benutzer- und Identitätsparameter geben Anmeldeinformationen an und die Gastgeber Der Parameter gibt die IP -Adressen der Knoten auf dem Cluster an.
Sobald der Cluster konfiguriert ist, können alle Knoten gleichzeitig betrieben werden. Zum Beispiel, um eine Liste von Prozessen zu erhalten Pids und Befehlszeilen über den Cluster:
@lab [PS | Karte (Proc: (Proc ".PID, Proc.Befehlszeile))]
Dies gibt einen Strom von (IP -Adresse, PID, Befehlszeile) Tupeln zurück.
Für weitere Informationen besuchen Sie:
- https: // www.Marceltheshell.org/
- https: // github.Com/Geophile/Marcel
Marcel ist ziemlich neu und unter aktiver Entwicklung. Machen Sie sich mit Kontakt, wenn Sie helfen möchten.
- « Bashtop - Ein Tool zur Überwachung von Ressourcen für Linux
- So erstellen Sie NIC -Teaming oder Bindung in CentOS 8 / Rhel 8 »