O intérprete de comandos é a interface entre o usuário e o sistema operacional e é por esta razão que seu nome em inglês é shell (concha):
A interface Shell funciona como o intermediário entre o sistema operacional e o usuário graças às linhas de comando escritas por ele. A sua função é ler a linha de comando, interpretar seu significado, executar o comando e devolver o resultado pelas saídas. Na verdade, a interface Shell é um arquivo executável, encarregado de interpretar comandos, transmiti-los ao sistema e devolver resultados.
Existem vários tipos de Shell, sendo os mais comuns o sh (chamado Bourne shell), o bash (Bourne again shell), o csh (C Shell), o Tcsh (Tenex C shell), o ksh (Korn shell) e o zsh (Zero shell). Normalmente, seus nomes correspondem ao nome do executável.
Cada usuário tem um Shell padrão, que será ativado na abertura de um indicador do comando. O Shell padrão é definido no arquivo de configuração
/etc/passwd
no último campo da linha que corresponde ao usuário. Você pode alterar o Shell durante uma sessão. Para isso, basta rodar o arquivo executável correspondente, por exemplo:
/bin/bash
.
O Shell se inicia ao ler sua configuração global (em um arquivo do diretório /etc/). Em seguida, ele lê a configuração própria ao usuário (em arquivo oculto, cujo nome começa por um ponto e se situa no diretório básico do usuário:
/home/user_name/.configuration_file
). Depois, aparece o seguinte indicador de comando (prompt):
máquina:/diretório/atual$
.
Por padrão, na maior parte dos Shells, o prompt é composto pelo nome da máquina, seguido de dois pontos (:), do diretório atual e de um caractere que indica o tipo de usuário conectado: $ indica que se trata de um usuário normal e # do administrador, chamado root.
Uma linha de comando é uma cadeia de caracteres constituída por um comando que corresponde a um arquivo executável do sistema, ou melhor, um comando do Shell assim como as configurações opcionais:
ls -al /home/jf/
.
No comando acima, ls é o nome do comando e Al e /home/jf/ são as configurações. Aquelas que começam por - são as opções. Para cada comando, existe um certo numero de opções que podem ser detalhadas ao introduzir um dos seguintes comandos:
command --help
e
command -? man command
.
Durante a execução de um comando, é criado um processo que abrirá três fluxos:
stdin, chamado entrada padrão, no qual o processo lê os dados de entrada. Por padrão, o stdin se refere ao teclado e é identificado pelo número 0;
stdout, chamado saída padrão, no qual o processo escreve os dados de saída. Por padrão, o stdout se refere à tela e é identificado pelo número 1;
stderr, chamado erro padrão, no qual o processo escreve as mensagens de erro. Por padrão, o stderr se refere à tela e é identificado pelo número 2:
Por padrão, 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 a tela. No entanto, também é possível ler os dados a partir de qualquer dispositivo de entrada, ou mesmo a partir de um arquivo, e enviar a saída para um dispositivo de visualização, arquivo etc.
O Linux, como qualquer sistema Unix, possui mecanismos que permitem redirecionar a entrada/saída padrão para arquivos.
Assim, a utilização do caractere > permite reencaminhar a saída padrão de um comando situado à esquerda de um arquivo situado à direita. Veja o exemplo:
ls -al /home/jf/ > toto.txt echo "Toto" >/etc/meuarquivodeconfiguração
O seguinte comando é equivalente a uma cópia dos arquivos:
cat toto > toto2
O objetivo do redirecionamento > é criar um novo arquivo. Assim, se um arquivo do mesmo nome existir, ele deve ser esmagado. O seguinte comando cria simplesmente um arquivo vazio:
> arquivo
O uso de um duplo caractere >> permite concatenar a saída padrão para o arquivo, ou seja, acrescentar a saída depois do arquivo, sem eliminá-lo.
Da mesma maneira, o caractere < indica um redirecionamento da entrada padrão. O comando seguinte envia o conteúdo do arquivo toto.txt com o comando cat, cujo único objetivo é mostrar o conteúdo na saída padrão (o exemplo não é útil, mas instrutivo):
cat < toto.txt
Por último, o uso do redirecionamento << permite a leitura, na entrada padrão, quando a cadeia estiver à direita. No seguinte exemplo, a entrada padrão é lida até que se encontre a palavra STOP. Em seguida, o resultado aparece:
cat << STOP
Os tubos (pipes) são mecanismos de comunicação específicos para todos os sistemas UNIX. Um tubo, simbolizado por uma barra vertical (caractere |), permite atribuir a saída padrão de um comando a uma entrada padrão de outro, da mesma forma que um tubo permite a comunicação entre a entrada padrão de um comando e a saída padrão de outro.
No exemplo seguinte, a saída padrão do comando ls - Al é enviada para o programa sort encarregado de fazer uma triagem do resultado por ordem alfabética:
ls -al | sort
Isto permite conectar uma certa quantidade de comandos por tubos sucessivos. No exemplo seguinte, o comando mostrará todos os arquivos do diretório atual, selecionará as linhas que contêm a extensão zip (graças ao comando grep) e contará o número total de linhas:
ls -l | grep zip | wc -l