Guia básico de shell
Em diversos cursos que ministro eu utilizo o terminal como uma ferramenta básica, que está disponível em todas as distribuições Linux por padrão, e até mesmo tem um certo paralelo em outros sistemas operacionais, como o Windows.
Dito isso, diversos alunos que atendo têm pouca familiaridade com o Terminal, seja por serem pouco familiares com o sistema operacional, com desenvolvimento de software no geral, ou por estarem acostumados com ferramentas gráficas mais específicas.
Buscando levar aos alunos a base necessária para os cursos, este texto traz uma introdução ao uso do terminal, com o uso básico pra manipulação de arquivos e para o uso dos comandos que são introduzidos ao longo das aulas.
Glossário
Vamos começar com um glossário para deixar nossos termos claros antes de continuarmos, pois como é de costume em desenvolvimento de software, o jargão pode acabar ficando bem denso. Você pode ver na Figura 1 alguns dos termos apontados em um exemplo ilustrativo:
- Terminal: Mais especificamente chamado emulador de terminal, é o programa responsável por providenciar uma janela onde podem ser exibidos caracteres.
- Shell: O programa que, através do terminal, recebe comandos de um usuário (ou de um arquivo de texto) e os executa, um após o outro.
- Prompt: Um texto que indica ao usuário que o shell está pronto a receber um comando.
- Comando: São instruções que o shell interpreta. Alguns comandos são programas executáveis, outros são providos pelo próprio shell (os chamados builtins).
- Executável: É um arquivo que também é um programa, ou seja, pode ser executado pelo computador para desempenhar uma tarefa.
- Saída: É o que um comando escreve na tela, durante sua execução.

Figura 1: Diagrama de um terminal.
Abrindo um terminal
Com a terminologia acima bem definida, vamos então a abrir um terminal. Essa tarefa geralmente é simples, porém totalmente dependente do sistema gráfico e da distribuição que estamos usando.
Geralmente, há um atalho configurado para abrir um terminal. Os mais comuns são:
- Ctrl + Shift + T
- Ctrl + Shift + Enter
- Super + Enter (Super é a tecla que costuma ter o símbolo do Windows).
Outra opção é procurar nos menus do seu sistema, ou utilizar a busca, para procurar algo como "Terminal", "Console" ou "Linha de Comando".
Quando conseguirmos um terminal aberto, geralmente vemos uma linha com um conteúdo semelhante ao seguinte (se o seu for diferente, não se preocupe!):
user@host ~ $ _
Na linha acima, o _
indica o cursor do terminal, ou seja, onde o texto que digitarmos
irá aparecer.
Na linha que estamos vendo, temos o nome do nosso usuário (no exemplo, user
),
um @
indicando que estamos em um computador, ou seja, nosso host, e um
hostname, que é o nome dado ao computador que estamos usando (no exemplo, host
).
Na sequência, é comum vermos um ~
. Isso indica que no momento, estamos no
diretório home do usuário. O caminho completo da home de um usuário user
,
no Linux, costuma ser /home/user
. Porém, no shell, é comum utilizarmos o símbolo
~
como uma abreviação para este diretório.
Depois disso, temos o $
. Ele indica o final do prompt, e que o terminal aguarda
que entremos com algum comando para ser executado. É bastante comum, para indicar
que algo deve ser executado em um terminal, colocar um $
na frente. Você certamente
verá isso em textos, documentações, tutoriais e afins.
Comandos de navegação
Uma vez que temos um terminal aberto, os primeiros comandos que veremos são os que nos permitem navegar entre diretórios (também conhecidos como pastas). Normalmente, ao abrirmos o terminal, ele já abre na pasta home do usuário, como vimos antes.
Vamos a eles!
pwd
Apesar de o prompt geralmente nos informar onde estamos, caso isso não aconteça,
ou caso queiramos ver uma versão por extenso do caminho do diretório, podemos utilizar
o comando pwd
:
user@host ~ $ pwd
/home/user
O comando pwd
vem do termo cwd, que é o current working directory, ou seja,
o diretório sobre o qual estamos trabalhando no momento. A letra p
vem de print,
que é um termo comum para se referir a escrever texto em um terminal.
ls
Agora que sabemos onde estamos, certamente iremos querer saber o que existe dentro do
diretório atual. Para fazer isso, utilizamos o comando ls
, que vem de list:
user@host ~ $ ls
(...)
Downloads
Documents
(...)
Pictures
(...)
Em cada computador a saída deste comando irá variar, certamente. No exemplo, os
(...)
indicam que pode haver mais coisa na saída.
O comando ls
pode receber um ou mais argumentos, ou seja, valores extras na
linha de comando, que indicam que seu comportamento deve se alterar. No caso do ls
,
ao receber argumentos, ele deixa de listar o diretório atual, e passa a tentar listar
os diretórios que recebeu:
user@host ~ $ ls Downloads Documents
Downloads:
musicas_legalmente_obtidas/
musicas_legalmente_obtidas.zip
tutorial_shell.txt
Documents:
'Comprovante Pagamento Action Figures.pdf'
Contrato.docx
ebooks/
cd
Agora que sabemos onde estamos e o que temos por perto, podemos começar a nos
mover. O comando cd
, de change directory, é o primeiro dentre os que
listamos que é sempre um builtin, ou seja, é provido pelo próprio shell, e
não implementado em um executável separado. Isso ocorre pois ele precisa de fato
alterar o estado atual do shell. Vejamos ele em ação:
user@host ~ $ cd Documents
user@host Documents $ ls
'Comprovante Pagamento Action Figures.pdf'
Contrato.docx
ebooks/
user@host Documents $ pwd
/home/user/Documents
Podemos observar que mudamos de diretório pelo prompt e pelo comando pwd
. A
saída do comando ls
sem argumentos também mudou, mostrando mais uma vez que
estamos em um local diferente.
Com o que vimos, somos capazes de entrar em diretórios que estão aninhados no nosso diretório atual. Mas e se quisermos voltar para um diretório anterior, o que podemos fazer? Aproveite para tentar pensar em uma possibilidade!
Pensou? Se você lembra da saída do comando pwd
, que mostra um diretório por
extenso, lembra que o diretório anterior era /home/user
. Podemos utilizar
esse conhecimento para voltarmos para lá com o que chamamos de caminho
absoluto, ou seja, o caminho completo do diretório onde estamos, desde a raiz
do sistema de arquivos:
user@host Documents $ cd /home/user
user@host ~ $
Outra opção que temos é utilizar a abreviação ~
, como mencionamos antes:
user@host Documents $ cd ~
user@host ~ $
Agora, duas outras possibilidades que não seriam simples de adivinhar: a
primeira é simplesmente utilizar cd
, sem argumentos, cujo comportamento é
equivalente a cd ~
.
user@host Documents $ cd
user@host ~ $
E, por fim, uma opção mais específica para o que queremos fazer. Em todos os
diretórios, existe um subdiretório "fictício" chamado ..
. Esse subdiretório
na verdade não fica dentro do diretório, e sim fora. Ele nos leva diretamente
ao diretório anterior, também chamado de pai, do que estamos:
user@host Documents $ cd ..
user@host ~ $ cd ..
user@host /home $ cd ..
user@host / $
Comandos para alterar arquivos e diretórios
Agora que sabemos navegar, explorar e como nos localizarmos, vamos ver como podemos interagir com os arquivos e diretórios que estamos vendo.
mv
O primeiro comando que veremos é o mv
, de move. Apesar do nome, ele é útil
não apenas para mover arquivos e diretórios, mas também para renomeá-los. Por exemplo:
user@host Documents $ ls
'Comprovante Pagamento Action Figures.pdf'
Contrato.docx
ebooks/
user@host Documents $ mv Contrato.docx 'Contrato Prestação de Serviço.docx'
user@host Documents $ ls
'Comprovante Pagamento Action Figures.pdf'
'Contrato Prestação de Serviço.docx'
ebooks/
Perceba também o uso das aspas. Elas são necessárias para que o comando entenda um nome de arquivo com espaços como um argumento único.
Se quisermos mover sem renomear, passamos ao comando um caminho terminado em um outro diretório que já exista:
user@host Documents $ mv 'Contrato Prestação de Serviço.docx' ..
user@host Documents $ ls
'Comprovante Pagamento Action Figures.pdf'
ebooks/
user@host Documents $ ls ..
(...)
'Contrato Prestação de Serviço.docx'
(...)
mkdir
O comando mkdir
(de make directory) cria diretórios. Ele será usado principalmente
de duas maneiras:
Para criar um diretório em algum lugar que já exista, basta utilizar o comando com o caminho como argumento:
user@host ~ $ mkdir Documents/contratos
user@host ~ $ ls Documents
'Comprovante Pagamento Action Figures.pdf'
contratos/
ebooks/
Para criar diversos diretórios aninhados, que ainda não existem, utilize a
opção -p
, de parents:
user@host ~ $ mkdir Documents/recibos/antigos
user@host ~ $ ls Documents
'Comprovante Pagamento Action Figures.pdf'
contratos/
ebooks/
recibos/
user@host ~ $ ls Documents/recibos
antigos/
cp
Para copiar arquivos, utilizamos o comando cp
, de copy:
user@host Documents $ cp 'Comprovante Pagamento Action Figures.pdf' action-figures.pdf
user@host Documents $ ls
action-figures.pdf
'Comprovante Pagamento Action Figures.pdf'
contratos/
ebooks/
recibos/
Quando queremos copiar diretórios, junto com seus conteúdos, basta utilizar a
opção -r
, de recursive.
user@host Documents $ cp -r ebooks ..
user@host Documents $ ls
action-figures.pdf
'Comprovante Pagamento Action Figures.pdf'
contratos/
ebooks/
recibos/
user@host Documents $ ls ..
(...)
ebooks/
(...)
rm
Para apagar arquivos, utilizamos o comando rm
, de remove. É importante
notar que os arquivos removidos desta maneira não são recuperáveis. Eles não
são movidos para uma "lixeira", e sim realmente removidos.
Sabendo disso, para utilizar o rm
fazemos:
user@host Documents $ rm 'Comprovante Pagamento Action Figures.pdf'
user@host Documents $ ls
action-figures.pdf
contratos/
ebooks/
recibos/
E para remover diretórios e todo seu conteúdo, da mesma forma que com o cp
, basta
utilizar a opção -r
:
user@host Documents $ rm -r ebooks
user@host Documents $ ls
action-figures.pdf
contratos/
recibos/
Conclusão
Conhecendo os comandos anteriores, navegação e uso básico do terminal deve agora estar ao seu alcance! Em relação ao uso deste post como material de apoio para meus materiais de ensino, é bom ressaltar que outros comandos mais específicos são explicados durante os cursos (e no material que os acompanha).
Espero que esta introdução tenha sido útil, e boa sorte nas suas aventuras utilizando o terminal!