Linux - O shell

Abril 2015

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”.

Le shell, une coquille entre l




A Shell está então encarregue 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, encarregue 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”). Onome corresponde geralmente ao nome do executável.

Cada utilizador possui uma shell por defeito, que será lançada durante a abertura de comando. A shell por defeito 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

Convide 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_utilisateur/.fichier_de_configuration), posteriormente afixa um convite de comando (em inglês prompt) do seguinte modo:

machine:/repertoire/courant$

Por defeito, 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;



entrées-sorties standard : STDOUT, STDIN, STDERR



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.

Redireccionamentos

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/monfichierdeconfiguration

O comando seguinte é equivalente a uma cópia de ficheiros :
cat toto > toto2

O redireccionamento “>” 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 < toto.txt


De maneira análoga, o carácter “<” indica um redireccionamento da entrada standard. O comando seguinte envia o conteúdo do ficheiro toto.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 ingleses “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 afectar 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 afixa todos os ficheiros do directório corrente, selecciona 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
Para uma leitura offline, é possível baixar gratuitamente este artigo no formato PDF:
Linux-o-shell.pdf

A ver igualmente


Linux - The shell
Linux - The shell
Linux - Shell
Linux - Shell
Linux - Die Shell
Linux - Die Shell
Linux - Le shell
Linux - Le shell
Linux - La shell
Linux - La shell
Este documento, intitulado « Linux - O shell »a partir de Kioskea (pt.kioskea.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.