Como usar Linux do zero: o guia para desenvolvedores
Todo servidor em produção roda Linux. Se você só desenvolve no Windows ou Mac, tem um ponto cego enorme que aparece na pior hora.

Antes do Framework — Ep. 03
Você já sabe o que acontece na rede. Etapa 2: o sistema onde tudo isso roda.
Você já tentou seguir um tutorial de deploy e travou no primeiro comando?
chmod +x deploy.sh
Ou então abriu uma VPS pela primeira vez e ficou olhando para um cursor piscando sem saber o que fazer. Sem botão. Sem menu. Só terminal.
Esse momento é inevitável. E quanto antes você aprender a se virar nele, mais rápido você para de depender de alguém para colocar seus sistemas no ar.
Por que Linux importa para devs
Não precisa usar Linux no seu computador pessoal. Mas você precisa saber operar nele porque:
- Todo servidor em produção roda Linux (AWS, GCP, Azure, DigitalOcean, Hetzner)
- Docker roda sobre o kernel do Linux
- Scripts de CI/CD executam em ambientes Linux
- A maioria dos erros de produção só aparece quando você acessa o servidor via terminal
Windows e Mac são ótimos para desenvolver. Linux é onde o sistema vive.
Navegação básica: os comandos que você vai usar todo dia
Onde estou e o que tem aqui?
pwd # mostra o diretório atual (print working directory)
ls # lista arquivos e pastas
ls -la # lista com detalhes: permissões, tamanho, dono
Movendo pelo sistema
cd /var/log # vai para um caminho absoluto
cd projeto/src # vai para um caminho relativo
cd .. # volta um nível
cd ~ # vai para o diretório home do usuário
Criando e removendo
mkdir minha-pasta # cria uma pasta
mkdir -p a/b/c # cria estrutura de pastas aninhadas
rm arquivo.txt # remove um arquivo
rm -rf pasta/ # remove pasta e todo o conteúdo (cuidado)
cp origem.txt destino.txt # copia arquivo
mv arquivo.txt nova-pasta/ # move ou renomeia
Cuidado com
rm -rf: não tem lixeira no terminal. O que foi deletado, foi. Confirme duas vezes antes de executar.
Lendo arquivos no terminal
cat arquivo.txt # mostra o conteúdo inteiro
less arquivo.txt # mostra com paginação (q para sair)
head -n 20 arquivo.txt # mostra as primeiras 20 linhas
tail -n 50 arquivo.txt # mostra as últimas 50 linhas
tail -f app.log # acompanha o arquivo em tempo real (ótimo para logs)
O tail -f é um dos comandos mais usados em produção. Quando algo quebra, você usa ele para acompanhar o log enquanto reproduz o erro.
Permissões: o que significa aquele rwxr-xr-x
Quando você roda ls -la, aparece algo assim:
-rwxr-xr-x 1 ubuntu ubuntu 1234 Mar 13 10:00 deploy.sh
drwxr-xr-x 2 ubuntu ubuntu 4096 Mar 13 09:00 src/
A sequência de letras define quem pode fazer o quê:
- rwx r-x r-x
│ │ │ └── outros usuários: só leitura e execução
│ │ └────── grupo: só leitura e execução
│ └────────── dono: leitura, escrita e execução
└───────────── tipo: - arquivo, d diretório
Cada grupo de 3 letras representa: r (read), w (write), x (execute).
Para alterar permissões:
chmod +x script.sh # adiciona permissão de execução
chmod 755 script.sh # rwxr-xr-x (dono tudo, resto lê e executa)
chmod 644 arquivo.txt # rw-r--r-- (dono lê/escreve, resto só lê)
Processos: o que está rodando na máquina
ps aux # lista todos os processos
ps aux | grep node # filtra processos que contêm "node"
kill 1234 # encerra o processo com PID 1234
kill -9 1234 # força encerramento (quando o normal não funciona)
O | (pipe) encadeia comandos. O resultado do primeiro vira entrada do segundo. É um dos conceitos mais poderosos do terminal.
Variáveis de ambiente
export DATABASE_URL="postgres://..." # define uma variável
echo $DATABASE_URL # mostra o valor
env # lista todas as variáveis do ambiente
Em produção, nunca coloque credenciais hardcoded no código. Elas vivem nas variáveis de ambiente e são lidas pela aplicação em tempo de execução.
Scripts Bash: automatize o que você faz todo dia
Um script Bash é um arquivo de texto com uma sequência de comandos. Serve para não repetir manualmente a mesma sequência toda vez.
Vamos além do echo "Hello World". Um exemplo real: um script de deploy manual que para a aplicação, puxa as mudanças do repositório, rebuilda e sobe novamente.
#!/bin/bash
# deploy.sh
set -e # encerra o script imediatamente se qualquer comando falhar
BRANCH="main"
APP_DIR="/var/www/meuapp"
echo "Iniciando deploy..."
cd $APP_DIR
echo "Puxando alterações da branch $BRANCH..."
git pull origin $BRANCH
echo "Parando containers..."
docker compose down
echo "Rebuilding e subindo..."
docker compose up -d --build
echo "Verificando status..."
docker compose ps
echo "Deploy finalizado com sucesso."
Para rodar:
chmod +x deploy.sh # dá permissão de execução (só na primeira vez)
./deploy.sh # executa
Repare no set -e no topo: se o git pull falhar, o script para na hora. Sem isso, ele continuaria derrubando o container com código desatualizado.
Esse script já tem cara de pipeline de CI/CD. Calma, jovem gafanhoto automatizar isso para rodar a cada push no GitHub é exatamente o que vamos ver mais pra frente na série. Por enquanto, o importante é entender que um script bem escrito é a base de qualquer automação.
Com o tempo, você pega o jeito, rodar os testes antes de subir, fazer backup antes de atualizar, notificar quando falha.
E quando você der esse próximo passo e configurar um CI/CD com GitHub Actions, o app do GitHub no celular vai te notificar automaticamente se o deploy passou ou falhou. Você acompanha o resultado de qualquer lugar, sem precisar ficar olhando para o terminal.
Mas isso é para o próximo nível. Por agora, um script simples que roda com um comando já é mais do que a maioria dos devs iniciantes tem.
Os atalhos que aceleram tudo
Ctrl + C # cancela o comando em execução
Ctrl + L # limpa a tela (igual ao comando clear)
↑ / ↓ # navega pelo histórico de comandos
!! # repete o último comando
sudo !! # repete o último comando com sudo (muito útil)
Por que isso muda o seu trabalho
Saber Linux não te transforma em SYSADMIN. Mas te dá autonomia real:
- Você acessa a VPS do cliente sem precisar pedir ajuda
- Você lê logs de produção e encontra o erro sozinho
- Você entende o que os scripts de CI/CD estão fazendo
- Você configura permissões corretas sem travar o deploy
- Você automatiza tarefas repetitivas com Bash
É a diferença entre ser dependente da infraestrutura e ser capaz de operar nela.
→ Próximo episódio
Agora que você sabe navegar no ambiente, precisa aprender a versionar o que você constrói nele. Git, Docker, variáveis de ambiente e a diferença entre dev e produção: tudo que faz um sistema funcionar em qualquer lugar, não só na sua máquina.
Antes do Framework — Ep. 04: Como configurar ambiente de desenvolvimento com Docker e Git do zero
Newsletter
Em breveEm breve você poderá receber novos artigos direto no seu email.