Tutorial Completo Linux 🐧

Dominando o
Terminal Linux

De cd e ls a scripts bash, grep, pipes e SSH — o terminal sem mistério, com exemplos reais do dia a dia.

igor@penguin:~/projetos$ cat tutorial.sh | grep magic
13 Módulos
50+ Comandos
bash Shell
navegação arquivos grep / find pipes permissões scripts bash SSH
01

🖥️ O que é o terminal?

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

estrutura de um comando
comando  [opções]  [argumentos]

ls  -l  /home
 ↑     ↑        ↑
cmd  opção  argumento
ShellQuando usar
bashPadrão na maioria das distros Linux
zshMais moderno, com autocompletar avançado
shPOSIX básico, portátil entre sistemas
fishAmigável para iniciantes, syntax highlighting
🐧
O pinguim Tux é o mascote oficial do Linux. O terminal é a ferramenta favorita de todo bom Tux! Use --help ou man comando para aprender qualquer comando.
02

📂 Navegação no sistema

onde estou?
$ pwd
/home/igor/projetos
listar arquivos
$ 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)
navegar entre pastas
$ 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
caminhos — absoluto vs relativo
# Absoluto — começa da raiz /
cd /home/igor/projetos

# Relativo — começa de onde você está
cd ../outra-pasta
cd subpasta/arquivo
AtalhoSignifica
~Home do usuário atual (/home/igor)
.Diretório atual
..Diretório pai (um nível acima)
/Raiz do sistema
03

📁 Manipulação de arquivos

criar arquivos e pastas
$ 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
copiar e mover
$ 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
remover
$ 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.
escrever em arquivo
$ echo "olá mundo" > arquivo.txt    # sobrescreve
$ echo "mais texto" >> arquivo.txt   # acrescenta
ComandoO que fazFlag útil
touchCria arquivo vazio
mkdirCria diretório-p aninhado
cpCopia-r recursivo
mvMove / renomeia
rmRemove-r pasta, -i confirma
04

📄 Visualizar conteúdo

diferentes formas de ver arquivos
$ 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 — editor no terminal
$ nano arquivo.txt      # abre/cria e edita
# Ctrl+O → salvar
# Ctrl+X → sair
# Ctrl+K → cortar linha
05

🔍 Busca — grep e find

grep — busca texto dentro de arquivos

grep — exemplos essenciais
$ 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 — busca arquivos no sistema

find — exemplos
$ 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
grep + find combinados (power combo!)
# 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"
06

🔐 Permissões

Todo arquivo Linux tem permissões de leitura (r), escrita (w) e execução (x) para 3 grupos: dono, grupo e outros.

$ ls -l
rwx rw- r-- → dono | grupo | outros
r = read
w = write
x = execute
chmod — alterar permissão
$ 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úmeroPermissãoUso típico
777rwxrwxrwxTodos podem tudo (evite!)
755rwxr-xr-xScripts e binários
644rw-r--r--Arquivos de configuração
600rw-------Chaves SSH (só dono lê)
700rwx------Diretórios privados
chown e sudo
$ chown igor:igor arquivo.txt    # muda dono e grupo
$ whoami                         # quem sou eu?
$ sudo comando                   # executa como root
07

🔄 Processos e sistema

ver e gerenciar processos
$ 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"
informações do sistema
$ 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
08

🔗 Redirecionamento e pipes

Uma das funcionalidades mais poderosas do terminal — conectar comandos e redirecionar saídas.

redirecionamento de saída
$ 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
pipe | — conecta comandos
# 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
🔥 combos poderosos do dia a dia
# 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"
💡
O pipe | é uma das ferramentas mais poderosas do Unix. Aprenda a usá-lo bem e você vai resolver problemas complexos com uma única linha.
09

🧾 Scripts bash

Scripts bash automatizam tarefas repetitivas — são arquivos de texto com comandos que o shell executa em sequência.

criando e executando um script
$ nano script.sh      # criar e editar
$ chmod +x script.sh   # tornar executável
$ ./script.sh         # executar
script bash — estrutura completa
#!/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 e argumentos
# 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
10

🌐 Rede e pacotes

comandos de rede
$ 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
apt — gerenciador de pacotes (Ubuntu/Debian)
$ 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 — tarefas agendadas
$ 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
11

🔑 SSH e automação

SSH — acesso remoto
$ 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 e usar chaves SSH
# 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 e rsync — transferir arquivos
# 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
aliases e histórico
# 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
12

⚡ Atalhos e produtividade

Ctrl + C Para o comando em execução
Ctrl + Z Pausa / background (use fg para retomar)
Ctrl + L Limpa a tela (como clear)
Ctrl + A Vai para o início da linha
Ctrl + E Vai para o final da linha
Ctrl + U Apaga da cursor até o início
Ctrl + R Busca reversa no histórico
Tab Autocompletar comandos e caminhos
↑ / ↓ Navega no histórico de comandos
!! Repete último comando (sudo !! é ouro)
compactação — tar
# 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
13

🔹 Boas práticas e erros comuns

✔ Use --help

Todo comando tem ajuda embutida: ls --help ou man ls.

✔ Tab é seu amigo

Autocompletar evita erros de digitação em caminhos longos.

✔ grep + pipe

Combine comandos simples com | para resolver problemas complexos.

✔ Automatize com scripts

Se faz mais de 2 vezes, crie um script.

❌ erros comuns
# ❌ 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
resumo mental — comandos mais usados
# 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
🚀
Caminho recomendado: domine cd / ls → aprenda cp, rm, mv → uso de grep e find → pipes (|) → processos → scripts bash → SSH e automação.