De cd e ls a scripts bash, grep, pipes e SSH — o terminal sem mistério, com exemplos reais do dia a dia.
O terminal (ou shell) é uma interface de texto onde você controla o sistema digitando comandos — em vez de clicar em ícones.
Mais rápido que interface gráfica
Essencial para servidores remotos
Base para Docker, Git e deploy
Automatização com scripts
comando [opções] [argumentos]
ls -l /home
↑ ↑ ↑
cmd opção argumento
| Shell | Quando usar |
|---|---|
| bash | Padrão na maioria das distros Linux |
| zsh | Mais moderno, com autocompletar avançado |
| sh | POSIX básico, portátil entre sistemas |
| fish | Amigável para iniciantes, syntax highlighting |
--help ou man comando para aprender qualquer comando.$ pwd
/home/igor/projetos
$ ls # listagem simples
$ ls -l # detalhado (permissões, tamanho)
$ ls -a # inclui arquivos ocultos (. e ..)
$ ls -la # detalhado + ocultos
$ ls -lh # tamanho legível (KB, MB)
$ cd pasta # entra na pasta
$ cd .. # volta um nível
$ cd ~ # vai para home do usuário
$ cd / # vai para raiz do sistema
$ cd - # volta à pasta anterior
# Absoluto — começa da raiz /
cd /home/igor/projetos
# Relativo — começa de onde você está
cd ../outra-pasta
cd subpasta/arquivo
| Atalho | Significa |
|---|---|
| ~ | Home do usuário atual (/home/igor) |
| . | Diretório atual |
| .. | Diretório pai (um nível acima) |
| / | Raiz do sistema |
$ touch arquivo.txt # cria arquivo vazio
$ touch a.txt b.txt c.txt # cria vários de uma vez
$ mkdir pasta # cria pasta
$ mkdir -p a/b/c # cria estrutura aninhada
$ cp arquivo.txt copia.txt # copia arquivo
$ cp -r pasta outra_pasta # copia pasta inteira
$ mv arquivo.txt novo.txt # renomeia arquivo
$ mv arquivo.txt pasta/ # move para pasta
$ rm arquivo.txt # remove arquivo
$ rm -r pasta # remove pasta e conteúdo
$ rm -i arquivo.txt # pede confirmação
rm -rf / — NUNCA faça isso! Remove recursivamente a raiz inteira do sistema de forma forçada, sem confirmação. Apaga tudo. Para sempre.$ echo "olá mundo" > arquivo.txt # sobrescreve
$ echo "mais texto" >> arquivo.txt # acrescenta
| Comando | O que faz | Flag útil |
|---|---|---|
| touch | Cria arquivo vazio | — |
| mkdir | Cria diretório | -p aninhado |
| cp | Copia | -r recursivo |
| mv | Move / renomeia | — |
| rm | Remove | -r pasta, -i confirma |
$ cat arquivo.txt # exibe tudo de uma vez
$ less arquivo.txt # página por página (q para sair)
$ head arquivo.txt # primeiras 10 linhas
$ head -n 20 arquivo.txt # primeiras 20 linhas
$ tail arquivo.txt # últimas 10 linhas
$ tail -f arquivo.txt # acompanha em tempo real!
tail -f log.txt é extremamente útil para acompanhar logs de aplicações em tempo real — o arquivo vai atualizando na tela conforme novos dados chegam.$ nano arquivo.txt # abre/cria e edita
# Ctrl+O → salvar
# Ctrl+X → sair
# Ctrl+K → cortar linha
$ grep "erro" arquivo.txt # busca em arquivo
$ grep -r "erro" . # busca recursiva na pasta
$ grep -i "erro" arquivo.txt # case insensitive
$ grep -n "erro" arquivo.txt # mostra número da linha
$ grep -v "erro" arquivo.txt # linhas que NÃO têm "erro"
$ grep -c "erro" arquivo.txt # conta ocorrências
$ find . -name "arquivo.txt" # por nome
$ find /home -name "*.log" # todos os .log em /home
$ find . -type d # só pastas
$ find . -type f -name "*.py" # arquivos .py
$ find . -size +10M # arquivos maiores que 10MB
# Busca "TODO" em todos os arquivos .js
$ grep -r "TODO" . --include="*.js"
# Busca erro em logs dos últimos 7 dias
$ find /var/log -mtime -7 -name "*.log" | xargs grep "ERROR"
Todo arquivo Linux tem permissões de leitura (r), escrita (w) e execução (x) para 3 grupos: dono, grupo e outros.
$ chmod 755 script.sh # rwxr-xr-x
$ chmod 644 arquivo.txt # rw-r--r--
$ chmod +x script.sh # adiciona execução
$ chmod -R 755 pasta/ # recursivo na pasta
| Número | Permissão | Uso típico |
|---|---|---|
| 777 | rwxrwxrwx | Todos podem tudo (evite!) |
| 755 | rwxr-xr-x | Scripts e binários |
| 644 | rw-r--r-- | Arquivos de configuração |
| 600 | rw------- | Chaves SSH (só dono lê) |
| 700 | rwx------ | Diretórios privados |
$ chown igor:igor arquivo.txt # muda dono e grupo
$ whoami # quem sou eu?
$ sudo comando # executa como root
$ ps aux # lista todos os processos
$ ps aux | grep node # filtra processos do node
$ top # monitorar em tempo real
$ htop # versão melhorada do top
$ kill PID # encerra processo
$ kill -9 PID # força encerramento (SIGKILL)
$ killall node # mata todos os processos "node"
$ df -h # espaço em disco
$ du -sh pasta/ # tamanho de uma pasta
$ free -h # memória RAM
$ uname -a # informações do sistema
$ uptime # tempo ligado + carga
Uma das funcionalidades mais poderosas do terminal — conectar comandos e redirecionar saídas.
$ ls > lista.txt # salva saída (sobrescreve)
$ ls >> lista.txt # adiciona ao final
$ comando 2> erros.txt # redireciona erros (stderr)
$ comando > tudo.txt 2>&1 # saída e erros juntos
# Passa saída de um comando como entrada do próximo
$ cat log.txt | grep "ERROR"
$ ps aux | grep node
$ cat log.txt | grep "ERROR" | less
# Ver processos node e matar
$ ps aux | grep node
# Contar linhas com "erro" no log
$ cat app.log | grep "erro" | wc -l
# Ver arquivos mais pesados
$ du -sh * | sort -rh | head -10
# Histórico filtrado
$ history | grep "docker"
| é uma das ferramentas mais poderosas do Unix. Aprenda a usá-lo bem e você vai resolver problemas complexos com uma única linha.Scripts bash automatizam tarefas repetitivas — são arquivos de texto com comandos que o shell executa em sequência.
$ nano script.sh # criar e editar
$ chmod +x script.sh # tornar executável
$ ./script.sh # executar
#!/bin/bash
# Shebang — diz qual shell usar
# Variáveis
NOME="Igor"
echo "Olá, $NOME!"
# If / else
if [ "$NOME" = "Igor" ]; then
echo "Bem-vindo!"
else
echo "Quem é você?"
fi
# Loop for
for i in 1 2 3; do
echo "Iteração $i"
done
# Loop while
COUNT=0
while [ $COUNT -lt 5 ]; do
echo $COUNT
COUNT=$((COUNT + 1))
done
# Variáveis de ambiente
$ export APP_ENV=production
$ echo $APP_ENV
# Argumentos no script ($1, $2...)
# ./deploy.sh production
AMBIENTE=$1
echo "Deploying to $AMBIENTE"
# Variáveis especiais
# $0 → nome do script
# $# → número de argumentos
# $@ → todos os argumentos
# $? → código de saída do último comando
$ ip a # ver interfaces e IPs
$ ping google.com # testar conexão
$ ping -c 4 google.com # apenas 4 pings
$ curl https://exemplo.com # faz requisição HTTP
$ curl -o arquivo.zip url # baixa arquivo
$ wget url # baixa arquivo
$ netstat -tlnp # portas abertas
$ ss -tlnp # alternativa moderna
$ sudo apt update # atualiza lista de pacotes
$ sudo apt upgrade # atualiza pacotes instalados
$ sudo apt install nome # instala pacote
$ sudo apt remove nome # remove pacote
$ apt search nome # busca pacote
$ apt list --installed # lista instalados
$ crontab -e # editar agendamentos
$ crontab -l # listar agendamentos
# Formato: minuto hora dia mês dia-semana comando
# * * * * * → todo minuto
# 0 2 * * * → 02:00 todos os dias
# 0 9 * * 1 → 09:00 toda segunda
# Exemplo: backup todo dia às 02:00
0 2 * * * /home/igor/backup.sh >> /var/log/backup.log 2>&1
$ ssh usuario@ip # conectar
$ ssh igor@192.168.1.10 # exemplo
$ ssh -p 2222 usuario@ip # porta customizada
$ ssh -i ~/.ssh/minha_chave usuario@ip # com chave privada
# Gerar par de chaves (pública + privada)
$ ssh-keygen -t ed25519 -C "igor@email.com"
# Copiar chave pública para servidor
$ ssh-copy-id usuario@ip
# Agora entra sem senha!
$ ssh usuario@ip
# scp — copia via SSH
$ scp arquivo.txt usuario@ip:/destino
$ scp -r pasta/ usuario@ip:/destino
# rsync — sincroniza pastas (melhor que scp)
$ rsync -avz pasta/ usuario@ip:/destino
# Definir alias (atalho)
$ alias ll="ls -la"
$ alias gs="git status"
$ alias update="sudo apt update && sudo apt upgrade"
# Salvar permanentemente (adicione ao ~/.bashrc)
$ nano ~/.bashrc
$ source ~/.bashrc # aplicar mudanças
# Histórico
$ history # lista comandos anteriores
$ !42 # reexecuta comando #42
$ !! # reexecuta último comando
fg para retomar)
clear)
sudo !! é ouro)
# Compactar
$ tar -czvf arquivo.tar.gz pasta/
# -c criar | -z gzip | -v verbose | -f arquivo
# Descompactar
$ tar -xzvf arquivo.tar.gz
# Zip / unzip
$ zip -r arquivo.zip pasta/
$ unzip arquivo.zip
Todo comando tem ajuda embutida: ls --help ou man ls.
Autocompletar evita erros de digitação em caminhos longos.
Combine comandos simples com | para resolver problemas complexos.
Se faz mais de 2 vezes, crie um script.
# ❌ Permission denied
bash: ./script.sh: Permission denied
# ✅ Adicione permissão de execução
$ chmod +x script.sh
# ❌ Command not found
bash: htop: command not found
# ✅ Instale o pacote
$ sudo apt install htop
# ❌ Apagar o diretório errado com rm -rf
# ✅ Sempre confirme com ls antes de rm -r
$ ls pasta/ # veja o que tem antes
$ rm -ri pasta/ # -i pede confirmação
# cd → navegar entre pastas
# ls → listar arquivos
# pwd → onde estou?
# cp/mv → copiar / mover
# rm → remover (com cuidado!)
# cat → ver conteúdo
# grep → buscar texto
# find → buscar arquivos
# | → conectar comandos
# chmod → permissões
# sudo → rodar como root
# ssh → acesso remoto
cd / ls → aprenda cp, rm, mv → uso de grep e find → pipes (|) → processos → scripts bash → SSH e automação.