Marcel - uma concha mais moderna para Linux

- 4012
- 29
- Maurice Champlin
Marcel é uma nova concha. É semelhante às conchas tradicionais de várias maneiras, mas faz algumas coisas de maneira diferente:
- Tubulação: Todas as conchas usam tubos para enviar um texto da saída de um comando para a entrada de outro. Marcel Pipes estruturados dados em vez de strings.
- Pitão: Marcel é implementado em Python e expõe Python de várias maneiras. Se você precisar de um pouco de lógica em seus comandos, Marcel permite que você o expresse em Python.
- Script: Marcel adota uma abordagem incomum para os scripts. Você pode, é claro, simplesmente escrever uma sequência de comandos marcel em um arquivo de texto e executá -los. Mas Marcel também fornece uma API na forma de um módulo Python. Você pode importar este módulo para fazer scripts em python de uma maneira muito mais conveniente do que é possível com o Python simples.
Marcel está licenciado em GPLV3.
Instalando Marcel Modern Shell em Linux
Marcel exige Python 3.6 ou mais tarde. Foi desenvolvido e testado no Linux, e funciona principalmente em Mac OS. (Se você quiser ajudar a Port para janelas, ou para consertar o Mac OS Deficiências, entre em contato.)
Para instalar Marcel Para seu próprio uso:
# python3 -m pip install marcel
Ou se você quiser instalar para todos os usuários (e.g., para /usr/local
):
$ sudo python3 -m pip install --prefix /usr /marcel local
Depois de instalar Marcel, Verifique se está funcionando executando o comando Marcel, E então no Marcel rápido, execute o versão comando:
$ marcel

Personalização de Marcel Shell
Você pode personalizar Marcel no arquivo ~/.Marcel.py
, que é lido na startup (e releira quando modificado). Como você pode dizer pelo nome do arquivo, a personalização de Marcel é feita em Python.
Uma coisa que você provavelmente quer fazer é personalizar o prompt. Para fazer isso, você atribui uma lista ao INCITAR variável. Por exemplo, se você deseja que seu aviso seja o diretório atual, impresso em verde, seguido por >
Impresso em azul:
Prompt = [cor (0, 4, 0), lambda: pwd, cor (0, 2, 5), '>']
O prompt resultante se parece com o seguinte:

Isso substitui o inescrutável Ps1
Configuração que você precisaria fazer em Bash. Cor (0, 4, 0) Especifica verde, (Os argumentos são Rgb valores, no intervalo 0-5). PWD é a variável de ambiente que representa seu diretório atual e prefixando esta variável com Lambda:
gera uma função, avaliada cada vez que o prompt é exibido.
O ~/.Marcel.py
também pode importar módulos python. E.g., Se você deseja usar as funções do módulo de matemática em seus comandos Marcel:
da importação matemática *
Depois de fazer isso, você pode se referir a símbolos desse módulo, e.g. pi
:

Observe que pi
é entre parênteses. Em geral, Marcel usa parênteses para delimitar expressões python. Então (pi)
avalia a expressão python que recupera o valor da variável pi. Você também pode acessar variáveis de ambiente tradicional dessa maneira, e.g. (DO UTILIZADOR) e (LAR), ou qualquer expressão válida de Python que depende de símbolos no espaço para nome de Marcel.
E você pode, é claro, definir seus próprios símbolos. Por exemplo, se você colocar esta definição de função em ~/.Marcel.py
:
Def Fatorial (n): F = 1 para i no intervalo (1, n + 1): f *= eu retorno f
Então você pode usar a função fatorial na linha de comando, e.g.

Exemplos de Shell Marcel
Aqui, aprenderemos alguns exemplos de comandos no marcel shell.
Encontre tamanhos de arquivo por extensão
Explore o diretório atual recursivamente, agrupe os arquivos por sua extensão (e.g. .TXT
, .py
e assim por diante) e calcule o tamanho total do arquivo para cada grupo.
Você pode fazer isso em Marcel da seguinte maneira:

O operador LS produz um fluxo de objetos de arquivo ((-fr
significa visitar os diretórios recursivamente e retornar apenas arquivos).
O Arquivo Objetos são canalizados para o próximo comando, mapa. O mapa Especifica uma função python, nos parênteses mais externos, que mapeia cada arquivo para uma tupla contendo a extensão do arquivo, e o tamanho é. (Marcel permite que a palavra -chave lambda seja omitida.)
O vermelho (redução) operador, grupos na primeira parte da tupla (extensão) e depois resumir os tamanhos dentro de cada grupo. O resultado é classificado por extensão.
Executáveis host e o pipeline marcel
Pipelines pode conter uma mistura de operadores de marcel e executáveis host. Operadores Pipe objetos, mas nos limites do operador/executável, Marcel Pipes Strings.
Por exemplo, este comando combina operadores e executáveis e lista os nomes de usuário dos usuários cujo shell é /BIN/BASH
.
$ cat /etc /passwd \ | mapa (linha: linha.Split (':')) \ | Selecione (*Linha: Linha [-1] == '/Bin/Bash') \ | mapa (*linha: linha [0]) \ | Xargs eco

Cat é um executável do Linux. Ele lê /etc/passwd, e Marcel coloca seu conteúdo a jusante para o mapa do operador Marcel.
O argumento entre parênteses para mapear é uma função python que divide as linhas no :
separadores, produzindo 7 tuplos. A Selecione é um operador Marcel cujo argumento é uma função python que identifica as tuplas em que o último campo é /BIN/BASH.
O próximo operador, outro mapa mantém o campo de nome de usuário de cada tupla de entrada. Finalmente, Xargs eco Combina os nomes de usuário recebidos em uma única linha, que é impressa para Stdout.
Scripts em marcel shell
Enquanto Pitão às vezes é considerado uma linguagem de script, na verdade não funciona bem para esse fim. O problema é que a execução de comandos do shell e outros executáveis do Python é complicado. Você pode usar OS.sistema()
, o que é simples, mas muitas vezes inadequado para lidar com stdin, stdout e stderr. subprocesso.Popen ()
é mais poderoso, mas mais complexo de usar.
A abordagem de Marcel é fornecer um módulo que integra os operadores Marcel com os recursos de linguagem do Python. Para revisitar um exemplo anterior, aqui está o código Python para calcular a soma dos tamanhos de arquivo por extensão:
de Marcel.Importação da API * para ext, tamanho em (ls (arquivo = true, recursivo = true) | mapa (lambda f: (f.sufixo, f.tamanho)) | vermelho('.','+')): print (f' ext: size)
Os comandos do shell são os mesmos de antes, exceto para convenções sintáticas. Então ls -fr
torna-se em ls (arquivo = true, recursivo = true). O mapa e os operadores vermelhos também estão lá, conectados com tubos, como na versão do shell. Todo o comando shell (LS… vermelho) produz um iterador de python para que o comando possa ser usado com o python para um loop.
Acesso ao banco de dados com marcel shell
Você pode integrar o acesso ao banco de dados com os pipelines Marcel. Primeiro, você precisa configurar o acesso ao banco de dados no arquivo de configuração, ~/.Marcel.py
, e.g.
define_db (name = 'Jao', driver = "Psycopg2", dbname = "acme", user = "jao") db_default = 'Jao'
Isso configura o acesso a um PostGres banco de dados nomeado acme, usando o Psycopg2 motorista. As conexões de Marcel serão feitas usando o Jao Usuário e o perfil do banco de dados é nomeado Jao. (Db_default especifica o Jao Perfil do banco de dados como aquele a ser usado se nenhum perfil for especificado.) Com essa configuração feita, o banco de dados agora pode ser consultado usando o operador SQL, e.g.
SQL 'SELECT part_name, quantidade de parte onde a quantidade < 10' \ | out --csv --file ~/reorder.csv
Este comando consulta uma tabela chamada papel, e despeja o resultado da consulta no arquivo ~/reordenar.CSV
, No formato CSV.
Acesso remoto com marcel shell
Da mesma forma ao acesso ao banco de dados, o acesso remoto pode ser configurado em ~/.Marcel.py
. Por exemplo, isso configura um cluster de 4 nós:
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 '])
O cluster pode ser identificado como um laboratório nos comandos marcel. Os parâmetros de usuário e identidade especificam informações de login e o hospedar Parâmetro Especifica os endereços IP dos nós no cluster.
Depois que o cluster estiver configurado, todos os nós podem ser operados de uma só vez. Por exemplo, para obter uma lista de processo pids e linhas de comando através do cluster:
@lab [ps | mapa (Proc: (Proc.PID, Proc.linha de comando))]
Isso retorna um fluxo de tuplas (endereço IP, PID, linha de comando).
Para mais informações visite:
- https: // www.Marceltheshell.org/
- https: // github.com/geophil/marcel
Marcel é bastante novo e sob desenvolvimento ativo. Entre em contato se quiser ajudar.
- « Bashtop - Uma ferramenta de monitoramento de recursos para Linux
- Como criar equipes ou unidades da NIC no CentOS 8 / RHEL 8 »