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:
ls
;ls
, e a digitação do próximo comando do usuário.
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.
Os comandos podem ser enviados de duas maneiras para o Shell
:
Shell
executa uma série de comandos colocados em um arquivo chamado de script
.
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
.
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 é 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 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
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
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
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
.
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$