Phase 00 - Lesson 11
Linux para IA
A maior parte da IA roda em Linux. Você precisa saber o suficiente para não ficar travado.
Tipo: Aprender Linguagens: -- Pré-requisitos: Fase 0, Lição 01 Tempo: ~30 minutos
Objetivos de Aprendizagem
- Navegar pelo sistema de arquivos do Linux e realizar operações essenciais de arquivos pela linha de comando
- Gerenciar permissões de arquivos com
chmodechownpara resolver erros de "Permission denied" - Instalar pacotes de sistema com
apte configurar uma máquina de GPU nova para trabalho com IA - Identificar diferenças between macOS e Linux que comumente confundem desenvolvedores que trabalham em máquinas remotas
O Problema
Você desenvolve no macOS ou no Windows. Mas no momento em que conecta via SSH a uma máquina de GPU na nuvem, aluga uma instância Lambda ou sobe uma máquina EC2, você cai no Ubuntu. O terminal é sua única interface. Não há Finder, não há Explorer, não há GUI. Se você não consegue navegar pelo sistema de arquivos, instalar pacotes e gerenciar processos pela linha de comando, você fica travado pagando por horas ociosas de GPU enquanto procura no Google "como descompactar um arquivo no Linux".
Este é um guia de sobrevivência. Ele cobre exatamente o que você precisa para operar em uma máquina Linux remota para trabalho com IA. Nada além disso.
Estrutura do Sistema de Arquivos
O Linux organiza tudo sob uma única raiz /. Não há C: nem /Volumes. Os diretórios que você realmente vai usar:
graph TD
root["/"] --> home["home/your-username/<br/>Your files — clone repos, run training"]
root --> tmp["tmp/<br/>Temporary files, cleared on reboot"]
root --> usr["usr/<br/>System programs and libraries"]
root --> etc["etc/<br/>Config files"]
root --> varlog["var/log/<br/>Logs — check when something breaks"]
root --> mnt["mnt/ or /media/<br/>External drives and volumes"]
root --> proc["proc/ and /sys/<br/>Virtual files — kernel and hardware info"]
Seu diretório home é ~ ou /home/your-username. Quase tudo o que você faz acontece aqui.
Comandos Essenciais
Estes são os 15 comandos que cobrem 95% do que você vai fazer em uma máquina de GPU remota.
Movendo-se
pwd # Where am I?
ls # What's here?
ls -la # What's here, including hidden files with details?
cd /path/to/dir # Go there
cd ~ # Go home
cd .. # Go up one level
Arquivos e Diretórios
mkdir my-project # Create a directory
mkdir -p a/b/c # Create nested directories in one shot
cp file.txt backup.txt # Copy a file
cp -r src/ src-backup/ # Copy a directory (recursive)
mv old.txt new.txt # Rename a file
mv file.txt /tmp/ # Move a file
rm file.txt # Delete a file (no trash, it's gone)
rm -rf my-dir/ # Delete a directory and everything inside
rm -rf é permanente. Não há desfazer. Verifique o caminho duas vezes antes de apertar enter.
Lendo Arquivos
cat file.txt # Print entire file
head -20 file.txt # First 20 lines
tail -20 file.txt # Last 20 lines
tail -f log.txt # Follow a log file in real time (Ctrl+C to stop)
less file.txt # Scroll through a file (q to quit)
Buscando
grep "error" training.log # Find lines containing "error"
grep -r "learning_rate" . # Search all files in current directory
grep -i "cuda" config.yaml # Case-insensitive search
find . -name "*.py" # Find all Python files under current dir
find . -name "*.ckpt" -size +1G # Find checkpoint files larger than 1GB
Permissões
Todo arquivo no Linux tem um dono e bits de permissão. Você vai esbarrar nisso quando scripts não executarem ou você não conseguir escrever em um diretório.
ls -l train.py
# -rwxr-xr-- 1 user group 2048 Mar 19 10:00 train.py
# ^^^ owner permissions: read, write, execute
# ^^^ group permissions: read, execute
# ^^ everyone else: read only
Correções comuns:
chmod +x train.sh # Make a script executable
chmod 755 deploy.sh # Owner: full, others: read+execute
chmod 644 config.yaml # Owner: read+write, others: read only
chown user:group file.txt # Change who owns a file (needs sudo)
Quando algo diz "Permission denied", quase sempre é um problema de permissões. chmod +x ou sudo resolve a maioria dos casos.
Gerenciamento de Pacotes (apt)
O Ubuntu usa apt. É assim que você instala software de nível de sistema.
sudo apt update # Refresh the package list (always do this first)
sudo apt install -y htop # Install a package (-y skips confirmation)
sudo apt install -y build-essential # C compiler, make, etc. Needed by many Python packages
sudo apt install -y tmux # Terminal multiplexer (keep sessions alive after disconnect)
apt list --installed # What's installed?
sudo apt remove htop # Uninstall
Pacotes comuns que você vai instalar em uma máquina de GPU nova:
sudo apt update && sudo apt install -y
build-essential
git
curl
wget
tmux
htop
unzip
python3-venv
Usuários e sudo
Você geralmente está logado como um usuário comum. Algumas operações precisam de acesso root (administrador).
whoami # What user am I?
sudo command # Run a single command as root
sudo su # Become root (exit to go back, use sparingly)
Em instâncias de GPU na nuvem, você normalmente é o único usuário e já tem acesso sudo. Não rode tudo como root. Use sudo apenas quando necessário.
Processos e systemd
Quando seu treinamento trava, ou você precisa verificar o que está rodando:
htop # Interactive process viewer (q to quit)
ps aux | grep python # Find running Python processes
kill 12345 # Gracefully stop process with PID 12345
kill -9 12345 # Force kill (use when graceful doesn't work)
nvidia-smi # GPU processes and memory usage
O systemd gerencia serviços (daemons em segundo plano). Você vai usá-lo se rodar servidores de inferência:
sudo systemctl start nginx # Start a service
sudo systemctl stop nginx # Stop it
sudo systemctl restart nginx # Restart it
sudo systemctl status nginx # Check if it's running
sudo systemctl enable nginx # Start automatically on boot
Espaço em Disco
Máquinas de GPU costumam ter espaço em disco limitado. Modelos e datasets enchem rápido.
df -h # Disk usage for all mounted drives
df -h /home # Disk usage for /home specifically
du -sh * # Size of each item in current directory
du -sh ~/.cache # Size of your cache (pip, huggingface models land here)
du -sh /data/checkpoints/ # Check how big your checkpoints are
# Find the biggest space hogs
du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20
Economizadores de espaço comuns:
# Clear pip cache
pip cache purge
# Clear apt cache
sudo apt clean
# Remove old checkpoints you don't need
rm -rf checkpoints/epoch_01/ checkpoints/epoch_02/
Rede
Você vai baixar modelos, transferir arquivos e acessar APIs pela linha de comando.
# Download files
wget https://example.com/model.bin # Download a file
curl -O https://example.com/data.tar.gz # Same thing with curl
curl -s https://api.example.com/health | python3 -m json.tool # Hit an API, pretty-print JSON
# Transfer files between machines
scp model.bin user@remote:/data/ # Copy file to remote machine
scp user@remote:/data/results.csv . # Copy file from remote to local
scp -r user@remote:/data/checkpoints/ ./local-dir/ # Copy directory
# Sync directories (faster than scp for large transfers, resumes on failure)
rsync -avz --progress ./data/ user@remote:/data/
rsync -avz --progress user@remote:/results/ ./results/
Use rsync em vez de scp para qualquer coisa grande. Ele transfere apenas os bytes que mudaram e lida com conexões interrompidas.
tmux: Mantenha as Sessões Vivas
Quando você conecta via SSH a uma máquina remota, fechar o laptop encerra sua execução de treinamento. O tmux evita isso.
tmux new -s train # Start a new session named "train"
# ... start your training, then:
# Ctrl+B, then D # Detach (training keeps running)
tmux ls # List sessions
tmux attach -t train # Reattach to session
# Inside tmux:
# Ctrl+B, then % # Split pane vertically
# Ctrl+B, then " # Split pane horizontally
# Ctrl+B, then arrow keys # Switch between panes
Sempre rode tarefas de treinamento de longa duração dentro do tmux. Sempre.
WSL2 para Usuários do Windows
Se você está no Windows, o WSL2 te dá um ambiente Linux real sem dual-boot.
# In PowerShell (admin)
wsl --install -d Ubuntu-24.04
# After restart, open Ubuntu from Start menu
sudo apt update && sudo apt upgrade -y
O WSL2 roda um kernel Linux real. Tudo nesta lição funciona dentro dele. Seus arquivos do Windows ficam em /mnt/c/Users/YourName/ de dentro do WSL.
O repasse de GPU (passthrough) funciona com os drivers NVIDIA instalados no lado do Windows. Instale o driver NVIDIA do Windows (não o do Linux), e o CUDA estará disponível dentro do WSL2.
Pegadinhas: do macOS para o Linux
Coisas que vão te confundir se você vem do macOS:
| macOS | Linux | Observações |
|---|---|---|
brew install |
sudo apt install |
Nomes de pacotes diferentes às vezes. brew install htop vs sudo apt install htop funciona igual, mas brew install readline vs sudo apt install libreadline-dev não. |
open file.txt |
xdg-open file.txt |
Mas você não terá uma GUI em uma máquina remota. Use cat ou less. |
pbcopy / pbpaste |
Não disponível | Encaminhar para/da área de transferência não existe via SSH. |
~/.zshrc |
~/.bashrc |
O macOS usa zsh por padrão. A maioria dos servidores Linux usa bash. |
/opt/homebrew/ |
/usr/bin/, /usr/local/bin/ |
Os binários ficam em lugares diferentes. |
sed -i '' 's/a/b/' file |
sed -i 's/a/b/' file |
O sed do macOS precisa de uma string vazia depois de -i. O do Linux não. |
| Sistema de arquivos sem distinção de maiúsculas | Sistema de arquivos com distinção de maiúsculas | Model.py e model.py são dois arquivos diferentes no Linux. |
| Quebras de linha ` | ||
| ` | Quebras de linha ` | |
| ` | Iguais. Mas o Windows usa ` | |
, o que quebra scripts bash. Rode dos2unix` para corrigir. |
Cartão de Referência Rápida
Navigation: pwd, ls, cd, find
Files: cp, mv, rm, mkdir, cat, head, tail, less
Search: grep, find
Permissions: chmod, chown, sudo
Packages: apt update, apt install
Processes: htop, ps, kill, nvidia-smi
Services: systemctl start/stop/restart/status
Disk: df -h, du -sh
Network: curl, wget, scp, rsync
Sessions: tmux new/attach/detach
Exercícios
- Conecte via SSH a qualquer máquina Linux (ou abra o WSL2) e navegue até o seu diretório home. Crie uma pasta de projeto, crie três arquivos vazios dentro dela com
touche depois liste-os comls -la. - Instale o
htopcom o apt, execute-o e identifique qual processo está usando mais memória. - Inicie uma sessão tmux, rode
sleep 300dentro dela, desanexe, liste as sessões e reanexe. - Use
df -hpara verificar o espaço em disco disponível, depois usedu -sh ~/.cache/*para descobrir o que está ocupando espaço no seu cache. - Transfira um arquivo da sua máquina local para uma remota usando
scp, depois faça a mesma transferência comrsynce compare a experiência.