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

O Shell está assim encarregue de ser o intermediário entre o sistema de exploração e o utilizador graças às linhas de comandos escritas por este. O seu papel consiste assim em ler a linha de comando, interpretar o seu significado, executar o comando e seguidamente dar o resultado nas saídas.
O Shell é assim um ficheiro executável, encarregado de interpretar os comandos, transmiti-los ao sistema e devolver o resultado. Existem vários shells, sendo o mais corrente sh (chamado “Bourne shell”), bash (“Bourne again shell”), csh (“C Shell”), Tcsh (“Tenex C shell”), ksh (“Korn shell”) e zsh (“Zero shell”). O seu nome corresponde geralmente ao nome do executável.
Cada utilizador possui um shell por defeito, que será lançado aquando da abertura de uma janela de comando. O Shell está, por defeito, precisado no ficheiro de configuração /etc/passwd no último campo da linha que corresponde ao utilizador. É possível alterar o shell numa sessão, executando muito simplesmente o ficheiro executável correspondente, por exemplo:
/bin/bash
O Shell inicia lendo a sua configuração global (num ficheiro do directório /etc/), seguidamente 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, ou seja /home/nom_de_l_utilisateur/.fichier_de_configuration), por último mostra a jenale de comando (em inglês prompt) do seguinte modo:
machine:/repertoire/courant$
Uma linha de comando é uma cadeia de caracteres constituída por uma comando, correspondente a um ficheiro executável do sistema ou um comando shell, bem como os argumentos (parâmetros) opcionais:
ls -al /home/jf/
commande --help commande -? man commande
Aquando da execução de um comando, um dossier é criado. Este vai então abrir três fluxos:

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.
O Linux, como qualquer sistema de tipo Unix, possui mecanismos que permitem redirigir as entradas/saídas standard para ficheiros.
Assim, a utilização do carácter “>” permite redirigir a saída standard de um comando situado à esquerda para o ficheiro situado à direita :
ls -al /home/jf/ > toto.txt echo "Toto" > /etc/monfichierdeconfiguration
cat toto > toto2
> fichier
O emprego de um duplo carácter “>>” permite concatenar a saída standard para o ficheiro, ou seja, acrescentar a saída na sequência do ficheiro, sem o esmagar.
De maneira análoga, o carácter“<” indica uma redireccionamento da entrada standard. O comando seguinte envia o conteúdo do ficheiro toto.txt em entrada do comando cat, cujo único objectivo é mostar o conteúdo na saída standard (exemplo inútil, mas formador):
cat < toto.txt
Por último, o emprego do redireccionamento “<<” permite ler a entrada standard até a cadeia situada à direita ser encontrada. Assim, o exemplo seguinte vai ler a entrada standard até que a palavra STOP seja encontrada, e vai depois mostrar o resultado :
cat << STOP
Os tubos (em inglês “pipes”) 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 à entrada standard de outra, como um tubo que permite a comunicação entre a entrada standard de um comando e 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 triar o resultado por ordem alfabética:
ls -al | sort
É possível, desta maneira, encadear diversos comandos através de tubos sucessivos. No exemplo seguinte, o comando mostra 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 de linhas total:
ls -l | grep zip | wc -l