Noções Básicas de uso do Shell

Esta página possui noções básicas de uso do shell no Sistema Operacional Linux. Elas são válidas tanto no uso do sistema em modo texto puro, como na utilização de terminais de comando em ambientes gráficos. O shell é o programa responsável por executar os comandos digitados pelo usuário. Quando um usuário digita ls e pressiona a tecla Enter, ele:

  1. Verifica se existe na máquina algum programa executável, cujo nome seja ls;
  2. Em caso afirmativo, inicia a execução esse programa;
  3. Aguarda o fim da execução do programa ls, e a digitação do próximo comando do usuário.

Aviso de comando

Aviso de comando (prompt), é a linha mostrada na tela para digitação de comandos. A posição onde o comando será digitado é marcado por um traço ou quadro piscante chamado de cursor. A posição do cursor determina onde irá aparecer qualquer texto digitado pelo usuário. O aviso de comando do usuário root é identificado pelo símbolo #, e o aviso de comando de usuários comuns é identificado pelo símbolo $.

aluno@debian:/tmp$ 
  ^     ^      ^ ^
  |     |      | |__> Usuário comum  
  |     |      |____> Diretório atual 
  |     |___________> Nome da máquina
  |_________________> Nome do usuário

Você pode rever comandos já digitados pressionando as teclas seta para cima / seta para baixo. Normalmente, a tela pode ser rolada para baixo ou para cima segurando a tecla Shift e pressionando Page Up ou Page Down. Isto é útil para ver textos que rolaram rápidamente para cima.

Interpretação de comandos

Os comandos podem ser enviados de duas maneiras para o Shell:

  • Interativa: Comandos são digitados manualmente pelo usuário um a um. Neste modo, o computador aguarda a digitação de cada comando;
  • Não interativa: Neste modo o Shell executa uma série de comandos colocados em um arquivo chamado de script.

Usando vários terminais

Podemos utilizar vários terminais simultaneamente. No modo gráfico basta abrir tantos quantos forem necessários, por exemplo clicando em Aplicativos → Acessórios → Terminal no Ubuntu ou Debian. No modo texto isso também é possível pressionando as teclas Alt + F1, Alt + F2, …, Alt + F6. Caso o ambiente gráfico já esteja aberto, podemos pressionar Ctrl + Alt + F1 para ir para o modo texto. Para voltar ao ambiente gráfico basta pressionar Alt + F7.

Diretório de trabalho

O diretório de trabalho é aquele em que você se encontra no momento. Para obter esta informação utilize o comando pwd. Para mudar de diretório utilize o comando cd [diretório] se for utilizado sem argumentos o seu diretório de trabalho passará a ser seu diretório home.

Diretório home

Diretório home é aquele que foi atribuído pelo administrador do sistema para ser seu diretório pessoal. Este é, com poucas exceções, o único lugar que você tem acesso de escrita, ou seja, somente nele você pode criar e apagar arquivos e diretórios. Normalmente seu diretório home é /home/login onde login é seu nome de usuário. Uma abreviação muito prática para o seu diretório home é o ~ (til). O shell irá expandir o ~ para seu home (se o usuário aluno executar cd ~/tmp ele irá para /home/aluno/tmp).

Caminhos Absolutos e Relativos

Caminhos absolutos são referenciados a partir da raiz da árvore de diretórios. São caminhos completos e independentes do diretório de trabalho. Caminhos relativos dependem do diretório de trabalho e são relativos a ele.

Exemplos de caminhos absolutos:

/home/aluno/teste.txt
/home/aluno/docs/ifrn.doc
/etc/resolv.conf

Exemplos de caminhos relativos a /home/aluno:

teste.txt
docs/ifrn.doc
../../etc/resolv.conf

Entrada e Saída Padrão

Quando abrimos um terminal o sistema irá utilizar, por padrão, o teclado e a tela como dispositivos de entrada e saída. Contudo, é possível redirecionar a entrada e saída de qualquer comando, por exemplo fazendo com que sua saída seja escrita em um arquivo, ao invés da tela.

O símbolo de redirecionamento de saída é > e instrui o shell a redirecionar a saída de um comando para um arquivo especificado ao invés da tela, como visto no exemplo a seguir.

aluno@debian:~$ ls -l > saida-ls.txt 

Caso o arquivo saida-ls.txt já exista ele será sobrescrito. Para evitar isso basta inserir um segundo >.

aluno@debian:~$ ls -l >> saida-ls.txt 

Pipes

Pipes são uma forma especial de redirecionar a saída de um comando diretamente para a entrada de outro. Um pipe tem o mesmo efeito de redirecionar a saída padrão de um comando para um arquivo e em seguida utilizá-lo como entrada padrão para outro comando. O símbolo do pipe é uma barra vertical |. Sua sintaxe básica é mostrada a seguir:

aluno@debian:~$ ls -l | more

É equivalente a:

aluno@debian:~$ ls -l > saida-ls.txt
aluno@debian:~$ more < saida-ls.txt
aluno@debian:~$ rm saida-ls.txt

Rodando Programas em Background

Em todos os exemplos anteriores os comandos foram executados em foreground, ou seja, o shell espera que o comando termine antes de permitir que outro comando seja executado. Quando um comando é executado em background, você não precisa esperar que ele termine para executar outro comando. Isto é conseqüência da multitarefa do linux. Para executar um comando em background, basta colocar o símbolo & no seu final. Normalmente iremos redirecionar a saída de um comando a ser executado em background para um arquivo.

aluno@debian:~$ ls -lR > lista-geral-arquivos.txt &
[1] 2416
aluno@debian:~$ 

Para enviar um programa que já está executando (em foreground) para background basta pressionar as teclas Ctrl + z e executar o comando bg. Somente programas executando em foreground podem receber entradas do teclado. Para colocar um programa em foreground usamos o comando fg seguido opcionalmente do sinal % e do número obtido com o comando jobs. Para cancelar uma tarefa que está rodando em foreground basta pressionar as teclas Ctrl + c.

Caracteres Especiais

Existem uma serie de caracteres que são tratados de forma diferenciada pelo shell, normalmente para substituir parte ou todo o nome de um arquivo ou diretório:

  • * : Substitui uma quantidade qualquer de caracteres nos nomes de arquivos ou diretórios;
  • ? : Substitui exatamente um caracter no nome de arquivos ou diretórios;
  • […] : Especifica uma lista de caracteres que podem ser utilizados na substituição;
  • [^…] : Especifica uma lista de caracteres que não podem ser utilizados na substituição;
  • {…,…} : Especifica uma lista de textos que podem ser utilizados na substituição.

Exemplos:

aluno@debian:~/documentos$ ls
artigo1.doc  artigo2.doc  memo12.doc  memo3.doc  memo6.doc  memo9.doc
artigo1.ppt  memo10.doc   memo1.doc   memo4.doc  memo7.doc
artigo1.xls  memo11.doc   memo2.doc   memo5.doc  memo8.doc
aluno@debian:~/documentos$
aluno@debian:~/documentos$ ls ar*
artigo1.doc  artigo1.ppt  artigo1.xls  artigo2.doc
aluno@debian:~/documentos$
aluno@debian:~/documentos$ ls memo?.doc
memo1.doc  memo3.doc  memo5.doc  memo7.doc  memo9.doc
memo2.doc  memo4.doc  memo6.doc  memo8.doc
aluno@debian:~/documentos$
aluno@debian:~/documentos$ ls memo??.doc
memo10.doc  memo11.doc  memo12.doc
aluno@debian:~/documentos$
aluno@debian:~/documentos$ ls memo[1-6].doc
memo1.doc  memo2.doc  memo3.doc  memo4.doc  memo5.doc  memo6.doc
aluno@debian:~/documentos$
aluno@debian:~/documentos$ ls memo[^1-6].doc
memo7.doc  memo8.doc  memo9.doc
aluno@debian:~/documentos$
aluno@debian:~/documentos$ ls ar*{doc,ppt}
artigo1.doc  artigo1.ppt  artigo2.doc
aluno@debian:~/documentos$ 
ensino/semestres/2012.1/mcs/material/nocoes_uso_shell.txt · Última modificação: 2012/05/24 02:12 (edição externa)