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 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
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$
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/
commande --help commande -? man commande
Aquando da execução de um comando, é criado um processo. 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 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
cat toto > toto2
> fichier
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
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