Linux – Shell
Introdução à Shell
O intérprete de comandos é o interface entre o utilizador e o sistema de exploração, daí o seu nome inglês “shell”, que significa “casca”.
A Shell está então se encarregando de ser o intermediário entre o sistema de exploração e o utilizador graças às linhas de comando escritas por este. O seu papel consiste assim em ler a linha de comando, interpretar o seu significado, executar o comando, seguidamente devolver o resultado às saídas.
A shell é assim um ficheiro executável, engarrega-se de interpretar os comandos, transmiti-los ao sistema e devolver o resultado. Existem várias shells, sendo as mais usuais sh (chamada “Bourne shell”), bash (“Bourne again shell”), csh (“C Shell”), Tcsh (“Tenex C shell”), ksh (“Korn shell”) e zsh (“Zero shell”). O nome corresponde geralmente ao nome do executável.
Cada utilizador possui uma shell por defalt, que será lançada durante a abertura de comando. A shell por defalt está definida no ficheiro de configuração /etc/passwd no último campo da linha que corresponde ao utilizador. É possível alterar a shell numa sessão, executando muito simplesmente o ficheiro executável correspondente, por exemplo:
/bin/bash
Convite de comando (rápido)
A shell inicia-se lendo a sua configuração global (num ficheiro do directório /etc/), de seguida lendo a configuração própria ao utilizador (num ficheiro escondido, cujo nome começa por um ponto, situado no directório básico do utilizador, quer dizer /home/nom_de_l_utilizador/.ficheiro_de_configuracao), posteriormente afixa um convite de comando (em inglês prompt) do seguinte modo:
machine:/repertoire/courant$
Por defalt, na maior parte das shells o prompt é composto pelo nome da máquina, seguido de dois pontos (:), do directório corrente, seguido de um carácter que indica o tipo de utilizador conectado:
- «$» indica que se trata de um utilizador normal
- «#» indica que se trata do administrador, chamado “root”
Noção de linha de comando
Uma linha de comando é uma cadeia de caracteres constituída por um comando, correspondente a um ficheiro executável do sistema, ou por um comando shell bem como os argumentos (parâmetros) opcionais :
ls -al /home/jf/
No comando acima, ls é o nome do comando, – Al e /home/jean-francois/ são argumentos. Os argumentos que começam – designam-se opções. Para cada comando existem geralmente diversas opções que podem ser detalhadas escrevendo um dos seguintes comandos:
commande --help commande -? man commande
Entrada/saída standard
Aquando da execução de um comando, é criado um processo. Este vai então abrir três fluxos:
- stdin, chamado entrada standard, no qual o processo vai ler os dados de entrada. Por defeito, o stdin corresponde ao teclado; STDIN é identificado pelo número 0;
- stdout, chamado saída standard, no qual o processo vai escrever os dados de saída. Por defeito, o stdin corresponde ao ecrã; STDOUT é identificado com o número 1;
- stderr, chamado erro standard, no qual o processo vai escrever as mensagens de erro. Por defeito, o stderr corresponde ao ecrã. STDERR é identificado com o número 2;
Por defeito, quando se executa um programa, os dados são lidos a partir do teclado e o programa envia a sua saída e os seus erros para o ecrã, mas é possível ler os dados a partir de qualquer periférico de entrada, ou mesmo a partir de um ficheiro, e enviar a saída para um periférico de afixação, um ficheiro, etc.
Redirecionamentos
O Linux, como qualquer sistema de tipo Unix, possui mecanismos que permitem reencaminhar os entrada/saída standard para ficheiros.
Assim, a utilização do carácter “>” permite reencaminhar a saída standard de um comando situado à esquerda para o ficheiro situado à direita :
ls -al /home/jf/ > toto.txt echo "Toto" > /etc/meuficheirodeconfiguracao
O comando seguinte é equivalente a uma cópia de ficheiros :
cat toto > toto2
O redirecionamento “>” tem como objectivo criar um novo ficheiro. Assim, se um ficheiro do mesmo nome existir, este será esmagado. O seguinte comando cria simplesmente um ficheiro vazio :
> fichier
O emprego de um duplo carácter “>>” permite concatenar a saída standard para o ficheiro, quer dizer, acrescentar a saída na sequência do ficheiro, sem o esmagar.
cat < SH.txt
De maneira análoga, o carácter “<” indica um redireccionamento da entrada standard. O comando seguinte envia o conteúdo do ficheiro SH.txt em entrada do comando cat, cujo único objectivo é afixar o conteúdo sobre a saída standard (exemplo inútil, mas pedagógico) :
cat << STOP
Tubos de comunicação (canos)
Os tubos (em inglês “pipes”, literalmente “tubos”) constituem um mecanismo de comunicação próprio a todos os sistemas UNIX. Um tubo, simbolizado por uma barra vertical (carácter “|”), permite afetar a saída standard de um comando a uma entrada standard de outra, como um tubo que permite fazer comunicar a entrada standard de um comando com a saída standard de outra.
Assim, no exemplo seguinte, a saída standard do comando ls – Al é enviado para o programa sort encarregue de fazer uma triagem do resultado por ordem alfabética:
ls -al | sort
Desta maneira é possível encadear diversos comandos por tubos sucessivos. No exemplo seguinte, o comando fixa todos os ficheiros do directório corrente, seleciona as linhas que contêm a palavra “zip” (graças ao comando grep) e conta o número total de linhas :
ls -l | grep zip | wc -l
Bom isso é tudo, abraços!
Se você gostou deste post, escreva um comentário e/ou cadastre-se em nosso feed.
Comentários
Ainda não há comentários.
Escreva um Comentário