O documento discute introdução ao shell no Linux, abordando:
1) Os shells mais comuns no Linux, como bash e csh, e como eles interpretam comandos do usuário.
2) Conceitos básicos do shell como prompts, caminhos e terminais.
3) Comandos úteis como echo, clear, cd e pwd para navegação e gerenciamento do terminal.
3. Apresentação
A maneira mais comum de se utilizar
utilizar/administrar uma máquina Linux é através de
um terminal executando um shell. Um shell, em uma
definição simples, é um programa que interpreta
comandos digitados pelo usuário, e os executa de
maneira apropriada
Os comandos são interpretados pelo shell e enviados
para sua execução. Com isso um shell pode também
ser utilizado para programação simples. A
combinação de um bom shell com pequenos
programas utilitários permite automatizar tarefas,
interagir com o usuário e fazer uso da flexibilidade e
poder oferecido pela interface de linha de comando
4. Apresentação
Existem três tipos de execução de um shell: shell de login, shell
interativo e shell não interativo.
Shell de login: quando o shell é iniciado como um shell de login, ele
primeiro lê e executa os comandos que estão no arquivo /etc/profile (se
esse arquivo existir). Após isso, o shell procura por seus arquivos de
configuração (~/bash_profile, ~/bash_login e ~/.profile, por exemplo). O
shell de login executará os comandos presentes no primeiro arquivo de
comandos presentes em um arquivo de encerramento de Sessão
(~/.bash_logout, por exemplo), enquanto um shell interativo regular não
executa esses comandos.
Shell interativo: um shell interativo é aquele no qual você digita os
comandos e aguarda enquanto o comando executa, interagindo com o
sistema. Quando um shell interativo é iniciado, ele lê e executa os
comandos presentes no arquivo de configuração do usuário (se esse
arquivo existir; por exemplo, o ~/.bashrc). Normalmente, um shell de login
também é um shell interativo.
Shell não-interativo: um shell não interativo é um shell utilizado para
executar um script, por exemplo, onde o usuário não faz interação com a
linha de comando.
5. Apresentação
Existem vários tipos de shells disponíveis para o Linux; os
principais são:
sh ou Bourne Shell: este é o shell original, limitado em recursos e
pequeno em tamanho. Implementações modernas utilizadas no Linux são
o ash e dash (que almeja conformidade com o shell padrão POSIX, IEEE
1003.2).
csh ou C shell: shell cujos comandos obedecem a uma sintaxe inspirada
na linguagem C (mas não particularmente similar). Alguns sistemas
utilizam uma versão com melhorias chamada tcsh, ou TENEX C shell.
ksh ou Korn shell: é um shell compatível com o Bourne Shell e que
adiciona muitos recursos adicionais. Implementações comumente
utilizadas no Linux incluem o pdksh e o mksh.
bash ou Bourne-Again shell: é o shell padrão GNU, bastante intuitivo e
flexível. Usado tanto por usuários iniciantes como programadores. Ele é
compatível com o Bourne shell e com várias características do Korn shell.
O que é executado com o sh pode ser executado no bash, mas nem
sempre a recíproca é verdadeira.
O shel mais comumente utilizado em ambientes Linus é o bash.
6. Informações Iniciais
O Bash: O bash tem, basicamente, três propósitos:
Utilização interativa: no uso interativo, o shell fornece uma linha de comando
para o usuário e espera seus comandos serem digitados para processá-los e
repassá-los para serem executados pelo sistema.
Personalização de uma sessão: o shell pode definir variáveis que alteram o
comportamento do sistema. Essas variáveis podem ser definidas pelo usuário
em arquivos que são lidos no início ou no termino de uma sessão.
Programação: shells permitem a programação através de scripts, compostos
pela combinação de comandos do shell com comandos do sistema.
O Prompt:
Ao se logar em um sistema Linux via terminal (sem utilizar um gerenciador de
login gráfico), será apresentado para o usuário uma linha de comando, como
abaixo:
[aluno@lab01 aluno/Vídeos] $
A primeira parte (antes do caractere @) indica o nome de usuário que está
acessando este shell no momento, Logo após o “@” é mostrado o nome da
máquina (local ou remota), e por último, é mostrado o diretório onde o usuário
se encontra no momento. Para usuário root, a única diferença é no final, Onde
é mostrado um “#”
7. Informações Iniciais
Caminhos:
Caminhos ou paths descrevem a localização de um arquivo dentro da
estrutura em árvore do sistema de arquivos. Arquivos podem ser
localizados/visualizados de duas formas: através de seu caminho relativo ou
de seu caminho absoluto O caminho absoluto é o caminho completo desde o
diretório raiz e o caminho relativo é o caminho a partir do diretório onde o
usuário se encontra atualmente.
Exemplo: se o usuário desejar voltar um diretório ele poderia usar o caminho
absoluto (desde o diretório / até o diretório desejado), ou digitando “..”, que
seria o equivalente a voltar um diretório, relativo ao atual.
Terminais:
Um terminal é um dispositivo de acesso ao sistema através de uma interface
de caractere (tipicamente o shell). Terminais podem ser utilizados diretamente
no consolo, através do uso de terminais virtuais, ou através de um emulador
de terminal disponível dentro de um ambiente gráfico. É possível alternar entre
os terminais virtuais utilizando as teclas Alt+Fn, onde n pode variar de 1 até 6
na configuração padrão.
Diferentes emuladores de terminal estão disponíveis para os diversos
ambientes gráficos utilizados no Linux, como xterm, gnome-terminal e konsole.
8. Comandos
Comandos podem ser utilizados para fazer com que o Linux
execute determinadas tarefas. Existem tanto comandos
internos ao shell como comandos que são programas ( que
geralmente etão em /usr/bin ou /bin). Uma grande porção dos
comandos básicos utilizados em um shell são programas
provenientes do projeto GNU. Sendo assim, eles compartilham
algumas características comuns, como opções e sintaxe, tendo
o seguinte formato:
comando [opções] <parâmetro>
Sendo que <parâmetro> consistem em informações para a
execução do comando (como nomes de arquivos) e [opções],
em geral, têm dois formatos: longo e curto. O formato longo é
composto de uma palavra precedida por dois traços, enquanto
que o curto é uma letra seguida de um traço apenas. Várias
opções curtas podem ser combinadas. Tanto as opções como
os parâmetros podem ser opcionais dependendo do comando.
9. Comandos
Embora o padrão GNU seja amplamente utilizado, alguns
programas têm sua própria sintaxe, sendo que em geral esta
não foge muito da ideia de opções curtas e longas,
precedidas de hífens. De qualquer modo, quando em dúvida,
basta consultar a documentação do programa
Exemplos (genéricos) de opções de linha de comando padrão GNU
--help Exibe uma tela de ajuda, com um resumo das opções disponíveis
--version Exibe a versão do programa e informações de copyright
--opção=algo Liga a opção “opção”, passando a esta o parêmetro “algo”
-2 Liga a opção “2”
-v Liga a opção “v”
-b teste Liga a opção “b”, passando a esta o parâmetro “teste”
-a2v Liga as opções “a”, “2” e “v” simultaneamente
10. Comandos de Ajuda
Consultar a documentação disponível no sistema pode ser muito
útil para solucionar dúvidas do funcionamento de um comando ou
descobrir opções que possam facilitar o trabalho do usuário.
man
Consulta a página de manual (man page) de um determinado
comando. A página de manual fornece uma ajuda rápida sobre o
programa e de suas opções. Pode ser especificada a seção (1-9),
de acordo com o tema da página de manual, sendo que um tópico
pode estar contido em mais de uma seção.
Seções das Páginas de Manual
1. Comando do usuário 2. Chamadas ao sistema
3. Bibliotecas de funções 4. Dispositivos
5. Formatos de arquivos 6. Jogos
7. Informações gerais 8. Administração do sistema
9. Programação em geral
11. Comandos de Ajuda
Principais opções do man:
Exemplos:
$ man 1 man
Apresentará uma tela com informações sobre o comando
man e suas descrições
$ man -K driver
Procura pelo termo driver em todas as páginas de manual do
sistema
man [opções] comando
-k Procura determinada string na descrição das páginas de manual
disponíveis. Equivalente ao comando apropos
-K Procura determinada string no conteúdo das páginas de manual
disponíveis
12. Comandos da Ajuda
info
Exibe páginas de informações sobre comandos. As páginas
info têm a caracteristicas de estarem formatadas em hipertexto,
facilitando a pesquisa. Para certos comandos, a página info
mostrará as mesmas informações da página de manual.
Sintaxe:
info [comando]
Exemplos:
$ info
Mostra todas as páginas info existentes no sistema
$ info ls
Mostra a página info do comando ls
13. Comandos de Ajuda
whatis
O Whatis procura por palavras chaves em uma base de dados
que contém o nome e uma breve explicação de diversos
comandos. Quando o whatis encontra a palavra procurada, ele
exibe na saída padrão a descrição e o número da sessão da
página de manual do comando. É equivalente a opção -f do
man.
$ whatis socket
socket (2) - create an endpoint for communication
socket (7) - Linux socket interface
$ whatis printf
printf (3) - formatted output conversion
14. Comandos de Ajuda
apropos
O apropos funciona de maneira semelhante ao whatis, porém realiza a
busca pela palavra também nas descrições dos comandos. É bastante
útil para situações onde o usuário não recorda o nome de um comando,
pois pode pesquisar por palavras chaves relacionadas ao comando. É
equivalente a opção -k do man.
Se o usuário deseja criar um diretório, mas não se lembra qual o
comando para isso, pode buscar por directory (diretório), por exemplo, e
então será listado, entre outras opções, o comando mkdir:
$ apropos directory
chdir (2) - change working directory
chroot (2) - change root directory
mkdir (2) - create a directory
dirfd (3) - get directory stream file descriptor
[...]
15. Comandos de Gerenciamento do Shell/ Terminal
Um usuário avançado de Linux deve sentir-se confortável utilizando o
terminal. Entre os comandos básicos para seu uso estão a impressão de
mensagens, limpeza, reinício e encerramento de sessão, listado a seguir.
echo
utilizado para mostrar (ecoar) um determinado texto na tela de terminal.
As principais opções são:
echo [opções] expressão
-n expressão Não insere uma nova linha após a saída do comando
-e Habilita a barra invertida como caractere de escape, para saída de
caracteres na expressão. Alguns caracteres que podem ser usados
com esta opção são:
c: suprime a nova linha
n: nova linha
r: retorno de linha
t: tabulação horizontal
v: tabulação vertical
b: mesmo efeito da tecla backspace
16. Comandos de Gerenciamento do Shell/ Terminal
Exemplos:
$ echo “Isto é um teste”
Isto é um teste
Mostra a expressão entre aspas. Neste caso, as aspas são
opcionais
$ echo -n “isto é um teste”
Isto é um teste$
Exibe a expressão entre aspas, tirando o espaço extra
(basta notar o sinal do prompt ao lado do final da expressão)
$echo -e “Isto é ubmb teste”
Isto é um teste
A opção é permite o uso da notação com barra, o b. O b
apaga o caractere anterior, ou seja, tudo que estiver antes
do b será suprimido
17. Comandos de Gerenciamento do Shell/ Terminal
Clear
Limpa a tela do terminal, apagando o conteúdo e movendo o
prompt para o início do terminal. Sintaxe:
clear
reset
Restaura o estado original do terminal, corrigindo problemas
com fontes e posicionamento do cursor.
Principais opções:
reset [opções]
-q O tipo de terminal é mostrado na saída padrão
-s Imprime na tela a sequência de comandos shell para reiniciar o
ambiente do terminal
18. Comandos de Gerenciamento do Shell/ Terminal
Exemplo:
$ reset -s
Erase is delete.
Kill is control-U (^U).
Interrupt is control-C (^C).
Reinicia o terminal, mostrando informações sobre os atalhos
para comandos que inicializam o ambiente, na saída padrão.
exit
sai do shell/console atual. Sintaxe:
exit
O comando exit também pode ser executado através da
combinação de teclas Ctrl+d
19. Comandos para Navegação no Sistema de Arquivo
Os comandos a seguir possibilitam que o usuário possa
acessar diretórios e, com isso, navegar no sistema de arquivos
do sistema
___________________________________________________
pwd
Exibe o diretório onde o usuário atual está.
Exemplo:
$ pwd
/home/aluno
indica que o diretório /home/aluno é o diretório onde o
usuário se encontra atualmente
20. Comandos para Navegação no Sistema de Arquivo
cd
Acessa um diretório, ou seja, muda do diretório atual para o diretório
especificado (change directory). O comando não possui uma página de
manual individual; sua descrição está incluida na página de manual do bash.
Sintaxe:
cd [diretório de destino]
Exemplos:
$ cd /usr/bin
Leva o usuário para o diretório /usr/bin
$ cd ../
Faz o usuário retornar um diretório na estrutura de diretórios
$ cd -
O Usuário retornará ao último diretório acessado
$ cd
Faz com que o usuário seja direcionado para o seu diretório home
21. Comandos para Navegação no Sistema de Arquivo
tree
Exibe a estrutura de diretórios a partirdo diretório atual caso não
seja fornecido nenhum parâmetro), ou do diretório passado na
linha de diretório passado na linha de comando.
Opção principal:
Exemplos:
$ tree -d /etc
Lista a estrutura de diretórios a partir de /etc, mostrando
apenas diretórios
$ tree /var/log
Lista roda a estrutura de diretórios a partir de /var/log
tree [opções] [ diretório]
-d Lista apenas diretórios, não incluindo arquivos
22. Comandos para Navegação no Sistema de Arquivo
file
Retorna o tipo do arquivo, após a execução dos teste apropriados. As principais
opções são:
Exemplos:
$ file favoritos.html
favoritos.html: HTML documento text
Fornece o nome do arquivo e o tipo do arquivo favoritos.html
$ file -d script.py
python script text executable
Fornece apenas o tipo do arquivo script.py
file [opções] arquivo
-b Não inclui o nome dos arquivos nas linhas de saída
-s O arquivo arq_desc deve conter uma lista de arquivos (um em cada
linha). Assim, o comando etá tentar descobrir e mostrar o tipo de cada
um dos arquivos contidos em arq_desc. Note que se o caminho
absoluto não for fornecido para cada arquivo, o comando deve ser
executado no local onde os arquivos se encontram.
23. Comandos para Navegação no Sistema de Arquivo
ls
Lista o conteúdo do diretório atual, ou do diretório/arquivo que
for indicado na linha de comando. Bastante flexível, aceita
inúmeros parâmetros e opções.
Principais opções:
file [opções] arquivo
-l Listagem no formato longo, com detalhes dos arquivos
-a Lista todos os arquivos, incluindo arquivos ocultos (aqueles que têm
seu nome iniciado por “.”).
--color Listagem colorida. Opção padrão na maioria das distribuições.
-F Coloca no final dos nomes de arquivos um símbolo indicando o seu tipo
(a barra no final da listagem indica que é um diretório).
-r Inverte a ordem de classificação.
-R Faz uma listagem em modo recursivo.
-1 Exibe a listagem em uma coluna única.
24. Comandos de Manipulação de Arquivos, Diretórios e
Links
mkdir
Cria um diretório. O caractere separador de diretórios “/” não pode ser usado
no nome de um diretório.
Opção principal:
Exemplos:
$ mkdir teste_novo
Cria o diretório onde o usuário local se encontra
$ mkdir ../teste
Cria o diretório acima do diretório atual (diretório pai)
$ mkdir -p /tmp/teste/outro/local da estrutura
Cria, dentro do diretório /tmp, toda a estrutura de subdiritórios listada.
Note que a barra invertida deve ser utilizada para que o caractere
especial de espaço possa ser incluído
mkdir [opções] diretório
-p Cria o diretório e a estrutura de subdiretórios passada
25. Comandos de Manipulação de Arquivos, Diretórios e
Links
rmdir
Remove um diretório. O diretório deve estar vazio para ser removido.
Opção principal:
Exemplos:
$ rmdir teste
Apaga o diretório teste, no local onde o usuário se encontra
$ mkdir ../teste2
Remove o diretório localizado no diretório pai
$ rmdir -p /tmp/teste/outro/local da estrutura
Remove a estrutura de diretórios indicada (não apaga o
diretório pai – no caso, /tmp)
mkdir [opções] diretório
-p Remove a estrutura de subdiretórios passada, caso esteja vazia.
26. Comandos de Manipulação de Arquivos, Diretórios e
Links
cat
Envia o conteúdo de um ou mais arquivos para a saída padrão.
Serve também para associar arquivos, mas é mais utilizado
para listar o conteúdo de um arquivo. Caso nenhum nome de
arquivo ou argumento seja fornecido, o cat permite que o
usuário entre com os dados na entrada padrão (pelo teclado), e
liste o conteúdo.
Principais opções:
cat [opções] arquivo
-b Numera todas as linhas, menos as linhas em branco.
-E Mostra um caractere $ ao final de cada linha.
-n Numera todas as linhas mostradas.
-T Mostra, em vez de caracteres de tabulação (tab), um sinal ^I..
27. Comandos de Manipulação de Arquivos, Diretórios e
Links
Exemplos:
$ cat /etc/passwd
Joga na saída padrão (terminal) o conteúdo do arquivo
/etc/passwd.
$ cat -b /etc/inputrc
Exibe o conteúdo do arquivo /etc/inputrc, numerando as
linhas que são diferentes de linhas em branco.
$ cat exemplo1.txt exemplo2.txt
Associa os dois arquivos na ordem indicada, e
mostra=os na saída padrão
O comando tac possui a mesma função do cat, só que a
listagem dos arquivos é na ordem inversa
28. Comandos de Manipulação de Arquivos, Diretórios e
Links
more
Mostra o arquivo na saída padrão. Se o tamanho do arquivo
dor maior do que o número de linhas da tela, faz uma pausa e
aguarda o pressionamento de uma tecla (Enter, Espaço ou
q/Esc) para continuar a exibição.
Principais opções:
more [opções] arquivo
-d Mostra informações para o usuário de como prosseguir.
+num Inicia a exibição na linha indicada no “num”.
-p Limpa a tela e depois exibe o conteúdo do arquivo, ao invés de paginar
o conteúdo do arquivo.
-s Junta várias linhas em branco seguidas de trechos do arquivo e mostra
apenas uma linha.
29. Comandos de Manipulação de Arquivos, Diretórios e
Links
less
O less é muito parecido com o comando more, mas permite a
navegação dentro do arquivo utilizando as setas do teclado (e
outras teclas).
Comparação entre more e less
Ação more less
Avança uma linha enter Enter, e, j, cursos para baixo
Volta uma linha - Y, k, cursos para cima
Avança uma tela Espaço, z, f Espaço, z, f
Volta uma tela b b
Arquivo anterior :p :p
Arquivo seguinte :n :n
Pesquisa / /
Sair q q
30. Comandos de Manipulação de Arquivos, Diretórios e
Links
cp
Copia um ou mais arquivos para o local especificado. Algumas
observações importantes devem ser feitas a respeito de cópias
de arquivos:
Copiar um arquivo para outro diretório onde já existe outro
arquivo com o mesmo nome: o arquivo será sobrescrito.
Copiar um arquivo para outro diretório que, por sua vez,
possui um diretório com mesmo nome do arquivo a ser
copiado: não é permitido.
Copiar um arquivo, especificando como arquivo_destino
outro nome: o arquivo será renomeado durante a cópia.
31. Comandos de Manipulação de Arquivos, Diretórios e
Links
Principais opções
$ cp doc.txt documento.txt
Cópia do arquivo doc.txt como nome de documento.txt
$ cp doc.txt /tmp
Cópia do arquivo doc.txt para /tmp mantendo o nome original
cp [opções] arquivo1 [arquivo2 diretório …] diretório
-a Preserva o máximo possível a estrutura e atributos dos arquivos
originais na cópia (mas não preserva a estrutura de diretório).
-b Faz backup de arquivos que serão sobrescritos
-f Força a cópia, sobrescrevendo arquivos no destino sem confirmação
-d Copia ligações simbólicas com ligações simbólicas no lugar de copiar os
arquivos para as quais apontam
-i Modo interativo, solicita confirmação antes de sobrescrever aquivos
-p Preserva o proprietário, grupo, permissões, tempo da última modificação
e o tempo do último acesso originais
-R Copia diretórios recursivamente, ou seja, toda a árvore abaixo do
diretório de origem. O destino sempre será um diretório.
32. Comandos de Manipulação de Arquivos, Diretórios e
Links
mv
Move ou renomeia arquivos e diretórios dentro de um sistema
Linux.
Principais opções:
Exemplos:
$ mv /tmp/teste.txt /home/aluno/teste2.txt
Move e renomeia o arquivo
$ mv -f minha-lista.txt sua-lista.txt
Renomeia o arquivo
mv [opções] arquivo1 [arquivo2 diretório …] destino
-f Sobrescreve arquivos no destino
-i Solicita confirmação antes de sobrescrever um arquivo
33. Comandos de Manipulação de Arquivos, Diretórios e
Links
rm
Apaga um arquivo ou diretório (remove). É possível remover vários arquivos
simultaneamente, bastando para tal colocar o nome dos arquivos a remover,
logo depois do comando.
Principais opções:
$ rm documento.txt doc.txt documento2.txt
Remove, do diretório atual os arquivos informados
$ rm -ri /tmp
Remove o diretório /tmp e todo os arquivos e pastas dentro, porem
perguntando se deseja excluir arquivo por arquivo.
more [opções] arquivo
-f Não solicita confirmação.
i+num Modo interativo: solicita confirmação para cada remoção.
-r ou -R Modo recursivo, apaga toda uma árvore de diretórios. Cuidado ao usar
este parâmetro, principalmente em conjunto com o -f.
34. Comandos de Manipulação de Arquivos, Diretórios e
Links
ln
Cria um link para outro arquivo. Por padrão, é um link direto (hard
link). É importante relembrar que não é possível criar hard links
para diretórios, e também é impossível criar links diretos entre
sistemas de arquivos.
Principais opções:
Exemplos:
$ ln -s ~/arquivo.txt /tmp/arquivoX
Cria o link simbólico arquivoX em /tmp, apontando para o
arquivo ~/arquivo.txt
ln [opções] origem [destino]
-f Força a criação do link, sobrescrevendo o outro arquivo (se for
possível)
-s Cria um link simbólico
35. Dicas
O usuário pode, caso deseje, acessar o sistema como um novo
usuário, utilizando um novo terminal. Ao acessar cada terminal
virtual, será preciso digitar o login e a senha novamente, pois o
terminal funcionará como um novo acesso.
No ambiente gráfico, ao pressionar as teclas Alt+Fn, o usuário
não será levado ao terminal virtual – isso ocorre porque nesse
ambiente a sequência de teclas pode ter outra função. Para
acessar o console virtual, utiliza Ctrl+Alt+Fn, onde “n” pode
variar de 1 até 6.
Cuidado ao usar certas opções de comandos e certifique-se do
que vai fazer antes de proceder. Um exemplo: os parâmetros
-Rf junto com o comando rm podem causar danos que podem
ser irreparáveis a um arquivo de sistema, tornando-o
inutilizável.