Linux no terminal: os 30 comandos que valem por 300
- ⬜💻 Como o computador roda seu código (do teclado ao pixel)(Fundamentos Técnicos)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
O terminal intimida pela aparência, mas sua lógica é elegante: tudo é texto, comandos compõem via pipe, e o conjunto de ~30 comandos resolve 90% dos problemas reais. Não é decoreba — é entender o modelo mental por trás.
O modelo mental: tudo é texto, tudo é arquivo
No Unix (e Linux é Unix-like), tudo tem uma interface de texto: arquivos, processos, dispositivos, sockets de rede. Isso permite que ferramentas simples se componham em pipelines poderosos.
Todo processo tem 3 streams padrão: stdin (entrada, fd=0), stdout (saída, fd=1), e stderr (erros, fd=2). O pipe (|) conecta o stdout de um comando ao stdin do próximo — sem arquivo temporário, em memória, em paralelo.
# Sem pipe: você precisaria de arquivos temporários grep "ERROR" app.log > /tmp/erros.txt sort /tmp/erros.txt > /tmp/erros_sorted.txt uniq /tmp/erros_sorted.txt > /tmp/erros_unique.txt cat /tmp/erros_unique.txt # Com pipe: mesmo resultado, sem arquivos temporários grep "ERROR" app.log | sort | uniq # Os comandos rodam em paralelo — grep produz enquanto sort consome
Criação, cópia e remoção
# Criar touch arquivo.txt # cria vazio ou atualiza timestamp mkdir pasta # cria diretório mkdir -p a/b/c # cria diretórios aninhados sem erro se existirem # Copiar cp origem destino # copia arquivo cp -r src/ dest/ # copia diretório recursivamente cp -p origem destino # preserva permissões e timestamps # Mover / renomear mv origem destino # move ou renomeia (mesma operação) mv *.log /var/logs/ # move todos os .log # Remover (CUIDADO — não tem lixeira) rm arquivo.txt # remove arquivo rm -r pasta/ # remove diretório recursivamente rm -rf pasta/ # força sem confirmação (muito perigoso) # Regra: nunca use rm -rf sem ls antes para confirmar o que está removendo
rm -rf / apaga o sistema inteiro. rm -rf ./ apaga o diretório atual. Sempre confirme o path com ls antes de remover recursivamente.Busca: grep e find
São dois comandos diferentes com propósitos distintos: find busca arquivos por nome/propriedade; grep busca conteúdo dentro de arquivos.
# grep — busca padrão em conteúdo de arquivos
grep "erro" app.log # linhas que contêm "erro"
grep -i "erro" app.log # case-insensitive
grep -n "erro" app.log # mostra número de linha
grep -r "TODO" src/ # recursivo em diretório
grep -v "DEBUG" app.log # inverte: linhas que NÃO contêm "DEBUG"
grep -E "error|warn" app.log # regex estendida (OU)
grep -c "erro" app.log # conta linhas com match
grep -l "TODO" src/**/*.py # lista apenas nomes de arquivos com match
grep -A 3 "CRITICAL" app.log # 3 linhas após o match (After)
grep -B 2 "CRITICAL" app.log # 2 linhas antes (Before)
grep -C 2 "CRITICAL" app.log # 2 antes e 2 depois (Context)
# find — busca de arquivos por metadados
find . -name "*.log" # por extensão
find . -name "config*" # por prefixo de nome
find /var -type f -size +100M # arquivos maiores que 100MB
find . -mtime -7 # modificados nos últimos 7 dias
find . -newer referencia.txt # mais novo que um arquivo
find . -perm 644 # com permissão exata
find . -user www-data # do usuário www-data
find . -name "*.py" -exec wc -l {} ; # executa wc -l em cada resultado
find . -name "*.tmp" -delete # deleta todos os .tmp encontradosRedireção e pipelines avançados
# Redireção de saída
comando > arquivo.txt # sobrescreve (cria se não existir)
comando >> arquivo.txt # adiciona ao final (append)
comando 2> erros.txt # redireciona stderr para arquivo
comando &> tudo.txt # redireciona stdout E stderr
comando > /dev/null # descarta saída (black hole)
comando 2>/dev/null # descarta erros
comando &>/dev/null # descarta tudo
# Redireção de entrada
comando < arquivo.txt # lê stdin de arquivo
comando <<EOF # here-doc: stdin inline até EOF
linha 1
linha 2
EOF
# Pipelines úteis no dia-a-dia
cat app.log | grep ERROR | tail -50 # últimos 50 erros
ps aux | grep python | grep -v grep # processos python (sem o grep em si)
du -sh */ | sort -rh | head -10 # top 10 diretórios por tamanho
history | grep git | tail -20 # últimos 20 comandos git usados
cat requirements.txt | wc -l # quantas dependências
ls -la | awk '{print $5, $9}' | sort -rn # nome e tamanho, ordenado
# Comandos de texto essenciais
wc -l arquivo.txt # conta linhas
wc -w arquivo.txt # conta palavras
sort arquivo.txt # ordena linhas
sort -n nums.txt # ordena numericamente
sort -rn nums.txt # ordena numericamente reverso
uniq lista.txt # remove linhas duplicadas CONSECUTIVAS (precisa sort antes)
uniq -c lista.txt # conta repetições
cut -d',' -f1,3 csv.txt # extrai colunas 1 e 3 de CSV (delimitador ,)
tr 'a-z' 'A-Z' # transforma minúsculas em maiúsculas (via pipe)
sed 's/foo/bar/g' arq # substitui "foo" por "bar" em todas as linhas
awk '{print $2}' arq # imprime coluna 2 de cada linhaVariáveis, aliases e configuração do shell
# Variáveis
export NOME="Fernando" # cria variável de ambiente (disponível para subprocessos)
echo $NOME # Fernando
echo ${NOME:-"padrão"} # Fernando (ou "padrão" se vazia)
unset NOME # remove a variável
# Variáveis especiais
echo $? # exit code do último comando (0 = sucesso, ≠0 = erro)
echo $0 # nome do script atual
echo $# # número de argumentos
echo $@ # todos os argumentos
echo $$ # PID do shell atual
echo $! # PID do último processo em background
# Aliases (atalhos permanentes no ~/.bashrc ou ~/.zshrc)
alias ll='ls -lah'
alias gs='git status'
alias dc='docker compose'
alias k='kubectl'
alias ..='cd ..'
alias ...='cd ../..'
# Funções
mkcd() { mkdir -p "$1" && cd "$1"; } # cria e entra no diretório
# Após editar ~/.bashrc:
source ~/.bashrc # ou: . ~/.bashrc — recarrega sem reiniciar shellReferência rápida: os 30 comandos essenciais
| Comando | O que faz | Exemplo |
|---|---|---|
| pwd | Diretório atual | pwd |
| cd | Navegar | cd ~/projects |
| ls | Listar | ls -lah |
| cat | Ver arquivo | cat config.yaml |
| less | Paginar arquivo | less app.log |
| head/tail | Início/fim | tail -f app.log |
| touch | Criar arquivo | touch .env |
| mkdir | Criar dir | mkdir -p a/b/c |
| cp | Copiar | cp -r src/ backup/ |
| mv | Mover/renomear | mv old.py new.py |
| rm | Remover | rm -r dist/ |
| grep | Buscar conteúdo | grep -r "TODO" src/ |
| find | Buscar arquivo | find . -name "*.log" |
| wc | Contar | wc -l arquivo.txt |
| sort | Ordenar | sort -rn nums.txt |
| uniq | Deduplicar | sort lista | uniq -c |
| cut | Extrair colunas | cut -d, -f1 data.csv |
| sed | Substituir | sed s/foo/bar/g arq |
| awk | Processar colunas | awk '{print $2}' arq |
| echo | Imprimir | echo $HOME |
| export | Variável env | export DEBUG=1 |
| which | Caminho do cmd | which python3 |
| man | Manual | man grep |
| history | Histórico | history | grep git |
| ps | Processos | ps aux | grep python |
| kill | Sinalizar processo | kill -9 1234 |
| chmod | Permissões | chmod +x script.sh |
| chown | Dono | chown user:group arq |
| df | Espaço em disco | df -h |
| du | Tamanho dir | du -sh */ |
man comando ou comando --help. O manual está sempre disponível offline — não precisa de Google.Quiz rápido
3 perguntas · Acerte tudo e ganhe o badge 🎯 Gabarito