Marcel - kaasaegsem kest Linuxile


Marcel on uus kest. See sarnaneb mitmel viisil traditsiooniliste kestadega, kuid teeb mõnda asja erinevalt:

  • Torustik: kõik kestad kasutavad torusid teksti saatmiseks ühe käsu väljundist teise sisendisse. Marcel juhib stringide asemel struktureeritud andmeid.
  • Python: Marcel on Pythonis rakendatud ja paljastab Pythoni mitmel viisil. Kui vajate oma käskudesse natuke loogikat, võimaldab marcel seda Pythonis väljendada.
  • Skriptimine: Marcel suhtub skriptidesse ebatavaliselt. Võite loomulikult kirjutada tekstifaili marcel-käskude jada ja need täita. Kuid Marcel pakub ka Pythoni mooduli kujul API-d. Selle mooduli saate importida Pythoni skriptimiseks palju mugavamal viisil, kui see on tavalise Pythoni abil võimalik.

Marcelil on GPLv3 litsents.

Marcel Modern Shelli installimine Linuxi

Marcel nõuab Pythoni 3.6 või uuemat versiooni. See on välja töötatud ja Linuxis testitud ning töötab enamasti MacOS-is. (Kui soovite aidata Windowsi porteerimist või makOS-i puuduste kõrvaldamist, võtke ühendust.)

Marcel'i enda tarbeks installimiseks toimige järgmiselt.

# python3 -m pip install marcel

Või kui soovite installida kõigile kasutajatele (nt /usr/local ):

$ sudo python3 -m pip install --prefix /usr/local marcel

Kui olete marcel'i installinud, kontrollige, kas see töötab, käivitades käsu marcel, ja seejärel käivitage marssiviibul käsk versioon:

$ marcel

Marcel Shelli kohandamine

Marcelit saab kohandada failis ~/.marcel.py , mida käivitamisel loetakse (ja muudatuse korral uuesti loetakse). Nagu faili nimest aru saate, toimub Marceli kohandamine Pythonis.

Üks asi, mida soovite ilmselt teha, on viiba kohandamine. Selleks määrate loendi muutujale PROMPT. Näiteks kui soovite, et viip oleks praegune kataloog, mis on trükitud rohelisega, millele järgneb sinisega trükitud > :

PROMPT = [
    Color(0, 4, 0),
    lambda: PWD,
    Color(0, 2, 5),
    '> '
]

Saadud viip näeb välja selline:

See asendab määramatu PS1 konfiguratsiooni, mille peate tegema bashis. Värv (0, 4, 0) määrab rohelise (argumendid on RGB väärtused vahemikus 0-5). PWD on keskkonnamuutuja, mis tähistab teie praegust kataloogi ja selle muutuja eesliitega lambda: loob funktsiooni, mida hinnatakse iga kord, kui viip kuvatakse.

~/.marcel.py saab importida ka Pythoni mooduleid. Näiteks kui soovite oma marcel-käskudes kasutada matemaatikamooduli funktsioone:

from math import *

Kui olete selle teinud, saate viidata selle mooduli sümbolitele, nt. pi :

Pange tähele, et pi on sulgudes. Üldiselt kasutab marcel Pythoni avaldiste piiritlemiseks sulgudesid. Nii hindab (pi) Pythoni avaldist, mis võtab kätte muutuja pi väärtuse. Sel viisil pääseb juurde ka traditsioonilistele keskkonnamuutujatele, nt. (USER) ja (HOME) või mis tahes kehtiv Pythoni avaldis, mis tugineb Marceli nimeruumi sümbolitele.

Ja saate muidugi ise oma sümbolid määratleda. Näiteks kui lisate selle funktsiooni määratluse kausta ~/.marcel.py :

def factorial(n):
    f = 1
    for i in range(1, n + 1):
        f *= i
    return f

siis saab käsureal kasutada faktoriaalfunktsiooni, nt.

Marcel Shelli näited

Siit saame teada mõned näited marselli kestas olevatest käskudest.

Uurige praegust kataloogi rekursiivselt, rühmitage failid nende laienduse järgi (nt .txt , .py ja nii edasi) ning arvutage iga rühma kogu failimaht.

Marcelis saate seda teha järgmiselt:

Operaator ls loob failiobjektide voo ( -fr tähendab, et rekursiivselt külastatakse katalooge ja tagastatakse ainult failid).

Faili objektid suunatakse järgmise käsu, kaardi juurde. Kaart täpsustab äärmistes sulgudes Pythoni funktsiooni, mis kaardistab iga faili faili laiendit sisaldavasse ruudusse ja selle suuruse. (Marcel lubab lambda märksõna välja jätta.)

Punane (redutseeritav) operaator rühmitab dupleksi (pikenduse) esimese osa järgi ja võtab seejärel iga grupi suurused kokku. Tulemus sorteeritakse laienduse järgi.

Torujuhtmed võivad sisaldada segu marsioperaatoritest ja hosti käivitatavatest failidest. Operaatorid toruobjektid, kuid operaatori/käivitatava piiri piires paeluvad selle asemel marsi torud.

Näiteks ühendab see käsk operaatorid ja käivitatavad failid ning loetleb nende kasutajanimed, kelle kest on /bin/bash .

$ cat /etc/passwd \
| map (line: line.split(':')) \
| select (*line: line[-1] == '/bin/bash') \
| map (*line: line[0]) \
| xargs echo

kass on Linuxi käivitatav fail. See loeb/etc/passwd ja marssib oma sisu marsioperaatori kaardile allavoolu.

Sulgudes olev argument kaardistamiseks on Pythoni funktsioon, mis jagab eraldajate : read, andes seitsme hulga. Select on marsioperaator, kelle argumendiks on Pythoni funktsioon, mis tuvastab need rühmad, milles viimane väli on/bin/bash.

Järgmine operaator, teine kaart hoiab iga sisestusruumi kasutajanime välja. Lõpuks ühendab xargs echo sissetulevad kasutajanimed üheks reaks, mis prinditakse stdout'iks.

Skriptid Marcel Shellis

Ehkki Pythoni peetakse mõnikord skriptikeeleks, ei toimi see sel eesmärgil tegelikult hästi. Probleem on selles, et shellikäskude ja muude Pythoni käivitatavate failide käivitamine on tülikas. Võite kasutada os.system() , mis on lihtne, kuid stdini, stdouti ja stderriga tegelemiseks sageli ebapiisav. alamprotsess. Open() on võimsam, kuid selle kasutamine on keerulisem.

Marceli lähenemisviis on pakkuda moodulit, mis integreerib marsioperaatorid Pythoni keele funktsioonidega. Varasema näite uuesti külastamiseks on siin Pythoni kood faili suuruste summa arvutamiseks laienduse abil:

from marcel.api import *

for ext, size in (ls(file=True, recursive=True)
                  | map(lambda f: (f.suffix, f.size))
                  | red('.', '+')):
    print(f'{ext}: {size})

Shelli käsud on samad mis varem, välja arvatud süntaktilised kokkulepped. Nii saab ls -fr -st ls (fail = True, rekursiivne = True). Kaart ja punased operaatorid on ka torudega ühendatud, nagu shelliversioonis. Kogu shellikäsk (ls… punane) annab Pythoni iteraatori, nii et käsku saab kasutada koos Pythoni käsuga silmuseks.

Juurdepääs andmebaasidele Marcel Shelliga

Saate integreerida juurdepääsu andmebaasile marcel torujuhtmetega. Kõigepealt peate konfigureerimisfailis konfigureerima juurdepääsu andmebaasile ~/.marcel.py , nt.

define_db(name='jao',
          driver='psycopg2',
          dbname='acme',
          user='jao')

DB_DEFAULT = 'jao'

See konfigureerib juurdepääsu psgopg2 draiveri abil Postgresi andmebaasile nimega acme. Marcelist ühendused tehakse jao kasutaja abil ja andmebaasi profiili nimi on jao. (DB_DEFAULT määrab jao andmebaasiprofiili kasutatavaks, kui profiili pole määratud.) Selle seadistamise korral saab andmebaasi nüüd pärida sql-operaatori abil, nt.

sql 'select part_name, quantity from part where quantity < 10' \
| out --csv –-file ~/reorder.csv

See käsk pärsib tabelit, mille nimi on osa, ja puistab päringu tulemuse faili ~/reorder.csv CSV-vormingus.

Kaugjuurdepääs Marcel Shelliga

Sarnaselt juurdepääsule andmebaasile saab kaugjuurdepääsu konfigureerida kaustas ~/.marcel.py . Näiteks konfigureeritakse see 4-sõlmeline klaster:

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'])

Klastrit saab tuvastada marcel-käskude laborina. Kasutaja ja identiteedi parameetrid määravad sisselogimisteabe ning hostparameeter klastri sõlmede IP-aadressid.

Pärast klastri konfigureerimist saab kõiki sõlme korraga opereerida. Näiteks kogu klastri protsesside pidamise ja käsuridade loendi saamiseks tehke järgmist.

@lab [ps | map (proc: (proc.pid, proc.commandline))]

See tagastab (IP-aadressi, PID-i, käsurea) koondvoo.

Lisateabe saamiseks külastage:

  • https://www.marceltheshell.org/
  • https://github.com/geophile/marcel

Marcel on päris uus ja aktiivselt arenemas. Võtke ühendust, kui soovite aidata.