Ao efetuar o login, foi dito que o sistema abre um shell para o usuário. Shell é o interpretador de comandos. É a interface entre o usuário e o kernel do sistema. Ao entrar um comando, o shell irá interpretar o mesmo e passar a devida instrução ao kernel. Este por sua vez, ao terminar a execução do comando irá retornar a resposta e o controle ao shell, que finalizando exibe os resultados do comando (quando existir).
Existem também vários shells, cada um com suas configurações e funcionalidades específicas. A maior parte das diferenças existentes entre os shells mais conhecidos envolve facilidade de operação e tipos de configuração. Como alguns exemplos de shell temos: bash, csh, ksh, sh. O shell que utilizaremos é o bash, que é o padrão da maioria das distribuições
Linux. Você pode acrescentar diversas informações personalizadas ao bash. Isso é feito por meio do arquivo ".bashrc" que fica no diretório home do usuário.
Comandos Linux
No mundo Linux, qualquer arquivo executável pode ser chamado de comando. Isso quer dizer que qualquer arquivo executável incluído no sistema se torna um novo comando neste sistema.
Para executar um comando basta digitar o seu nome no prompt de comando (shell). Entretanto, se o comando não estiver no PATH, ou caminho, você precisará digitar todo o caminho e o nome do comando. Mas o que é PATH? Esta variável do sistema, definida para cada usuário, contém uma lista de diretórios (para visualizar: echo $PATH). Quando um comando é executado - digitado no prompt - a lista de diretórios é percorrida para se achar o arquivo executável associado ao comando. Se o arquivo não for encontrado, o sistema retornará um aviso de erro, dizendo que o comando não foi encontrado. É importante lembrar que, dependendo do diretório em que você se encontra, este pode não estar no PATH, sendo necessário especificar o caminho, nesse caso ".", para a execução de comandos que se encontram no diretório atual.
Comandos iniciais no Linux:
ls - Lista os arquivos do diretório atual. Mesma função que o dir do DOS.
Atributos mais usados:
- -a = mostra arquivos ocultos;
- -l = mostra permissões, bytes, diretório, etc.
Exemplos:
$ ls -a
$ ls -l
$ ls -la
pwd - Informa o diretório atual, isto é, o diretório em que se está trabalhando. Exemplo:
$ pwd
cd - Permite a mudança do diretório atual para qualquer diretório acessível no sistema.Exemplos:
$ cd /usr/local
$ cd imagens
cp - Copia arquivos. Pode-se copiar um arquivo de um lugar para outro, ou fazer uma cópia desse arquivo no mesmo local.
Atributos mais usados:
- -R = copia os arquivos recursivamente;
- -i = pergunta ao usuário se tem certeza de realizar a operação de cópia.
Exemplos:
$ cp imagem2 /usr/local
$ cp -i imagem1 imagem1_copia
rm - Remove (apaga) arquivos.
Atributos mais usados:
- -r = apaga um diretório cheio (recursivamente);
- -i = pergunta ao usuário se tem certeza de realizar a operação de remoção.
Exemplos:
$ rm -r diretório1
$ rm -i imagem1_copia
mv - Move ou renomeia arquivos.
Exemplos:
$ mv imagem1 /usr/local
$ mv imagem1_copia imagem1A
more - Exibe o conteúdo de um arquivo, página por página ou, linha por linha.
Exemplos:
$ more programa1.c
$ more TrabalhoRedes.txt
less - Mesma função do comando more, mas com funções adicionais. Permite, por exemplo, pular diretamente para uma linha e retroceder em um arquivo.
Como foi dito, por ser um sistema multi-tarefa e multi-usuário, cada usuário pode executar mais de um shell ao mesmo tempo, e executar comandos diferentes em cada um, sem que um interfira no outro (a menos que seja essa a intenção do usuário).
Para abrir mais de um shell, pode-se utilizar os vários terminais virtuais ou consoles da estação Linux que ele estiver usando. O número de terminais virtuais depende das configurações da estação, mas normalmente existem sete disponíveis.
Um terminal, ou console, é o conjunto formado pelo teclado e o monitor, que constitui o dispositivo padrão de entrada e saída de dados. Imagine o seguinte: você tem vários conjuntos de monitor e teclado que estão ligados na mesma CPU. Enquanto você está digitando um texto num desses terminais o outro está executando um processo demorado, como uma procura no disco.
No Linux temos terminais virtuais que podem ser ativados e alternados pela seqüência de teclas Ctrl-Alt-Fn, onde n é um número entre um e sete (dependendo da configuração de cada estação). Ou seja, você tem sete terminais virtuais nos quais pode estar trabalhando ao mesmo tempo. Esses terminais são muito úteis, pois você pode estar digitando um texto num terminal e lendo uma página de manual em outro.
Mais exemplos de comandos:
clear - Limpa a tela e recoloca o prompt na primeira linha da tela.
Exemplo:
$ clear
who - Mostra todos os usuários logados, na máquina local, no momento.
Exemplo:
$ who
whoami - Mostra quem você é - útil quando você esquece com qual login entrou.
finger - Procura informações sobre um usuário no sistema local ou em sistemas remotos.
Exemplo:
$ finger moraes (mostra informações sobre o usuário moraes)
$ finger moraes@host (mostra informações sobre o usuário moraes que está na máquina host)
Como estamos utilizando o bash como o shell padrão, é interessante mostrar um recurso bastante útil que ele possui, chamado Tab Completion. Quando se está digitando um comando ou nome de arquivo muito longo basta que se digite os primeiros caracteres desse comando e aperte a tecla Tab que o shell se encarrega de completar o resto do nome.
Nem todos os nomes podem ser completados até o final pelo fato de existirem outras opções no processo de completação. Então o shell pára de completar e emite um bip avisando que não conseguiu completar totalmente a sentença. Caso se aperte Tab novamente, o shell irá lhe mostrar as opções que você tem para completar a sentença. Por exemplo: se você está usando o comando less para mostrar o conteúdo do arquivo "programa1.c", mas existe, no mesmo local, diversos arquivos com nomes "programaX.c". Quando a tecla Tab for pressionada - após ter-se começado a digitar o nome do arquivo - a completação dará como resultado o nome "programa", e não "programa1.c", como se esperava.