🧠FFVAcademy
🐧

Linux no terminal: os 30 comandos que valem por 300

12 min de leitura·+60 XP
Pré-requisitos (0/1)0%

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 encontrados

Redireçã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 linha

Variá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 shell

Referência rápida: os 30 comandos essenciais

ComandoO que fazExemplo
pwdDiretório atualpwd
cdNavegarcd ~/projects
lsListarls -lah
catVer arquivocat config.yaml
lessPaginar arquivoless app.log
head/tailInício/fimtail -f app.log
touchCriar arquivotouch .env
mkdirCriar dirmkdir -p a/b/c
cpCopiarcp -r src/ backup/
mvMover/renomearmv old.py new.py
rmRemoverrm -r dist/
grepBuscar conteúdogrep -r "TODO" src/
findBuscar arquivofind . -name "*.log"
wcContarwc -l arquivo.txt
sortOrdenarsort -rn nums.txt
uniqDeduplicarsort lista | uniq -c
cutExtrair colunascut -d, -f1 data.csv
sedSubstituirsed s/foo/bar/g arq
awkProcessar colunasawk '{print $2}' arq
echoImprimirecho $HOME
exportVariável envexport DEBUG=1
whichCaminho do cmdwhich python3
manManualman grep
historyHistóricohistory | grep git
psProcessosps aux | grep python
killSinalizar processokill -9 1234
chmodPermissõeschmod +x script.sh
chownDonochown user:group arq
dfEspaço em discodf -h
duTamanho dirdu -sh */
Regra de ouro: quando travar num comando, use man comando ou comando --help. O manual está sempre disponível offline — não precisa de Google.
💡
Próximo: Filesystem e permissões — rwx, chmod, chown, symlinks e hardlinks. O que quebra deploys e como evitar.
🧩

Quiz rápido

3 perguntas · Acerte tudo e ganhe o badge 🎯 Gabarito

Continue lendo