Ferramentas de linha de comando indispensáveis para devs

1. Navegação e manipulação de arquivos no terminal

O terminal é o ambiente onde desenvolvedores passam grande parte do tempo, e dominar ferramentas de navegação é essencial. O comando ls tradicional já é útil, mas alternativas modernas como exa e lsd oferecem coloração semântica, ícones e visualização em árvore com a flag --tree.

# Listar arquivos com exa (cores e ícones)
exa -la --icons

# Visualização em árvore com lsd
lsd --tree --depth 2

Para busca, fd é uma alternativa rápida ao find com sintaxe intuitiva, enquanto ripgrep (rg) substitui grep com performance superior e suporte nativo a regex.

# Encontrar arquivos .py que contêm "def main"
fd -e py -x rg -l "def main"

# Busca recursiva ignorando .git
rg "TODO" --type-add 'web:*.{html,css,js}' -t web

O bat substitui cat com syntax highlighting, numeração de linhas e integração com Git. Já fzf é um fuzzy finder que permite filtrar interativamente qualquer lista.

# Visualizar arquivo com syntax highlight
bat --style=numbers,changes main.py

# Usar fzf para navegar no histórico de comandos
history | fzf --tac --reverse

2. Visualização e edição de código no terminal

Editores leves como vim/neovim e micro permitem edição sem sair do terminal. O micro é mais amigável para iniciantes, com atalhos similares ao Ctrl+C/V.

# Abrir arquivo no micro com syntax highlight
micro app.js

# Neovim com configuração mínima para edição remota
nvim --cmd "set number" server.log

Para diff e revisão, delta transforma saídas do Git em diffs estilizados com destaque de palavras. O tig oferece navegação interativa em repositórios Git.

# Diff estilizado com delta
git diff | delta

# Navegar pelo histórico com tig
tig

Para dados estruturados, jq processa JSON com queries poderosas, e csvkit (comando csvjson) converte CSV para JSON.

# Extrair campos específicos de JSON
curl -s https://api.github.com/users/octocat | jq '{login, name, public_repos}'

# Converter CSV para JSON
csvjson dados.csv | jq '.[] | {nome, email}'

3. Gerenciamento de processos e monitoramento

O htop é o monitor de processos clássico, mas btm (bottom) oferece visualização moderna com gráficos. O glances fornece uma visão geral em tempo real.

# Monitorar processos com bottom
btm --color nord

# Visão geral do sistema com glances
glances --time 2

Para análise de rede, curl é o padrão, mas httpie (comando http) simplifica requisições HTTP. O nmap escaneia portas e serviços.

# Requisição POST com httpie
http POST https://httpbin.org/post nome="João" idade=30

# Escanear portas comuns
nmap -sS -p 80,443,22 scanme.nmap.org

Sessões persistentes são gerenciadas com tmux (mais moderno) e screen (clássico).

# Iniciar sessão tmux com nome
tmux new -s dev-session

# Desanexar e reanexar
tmux detach
tmux attach -t dev-session

4. Automação e scripts no shell

awk e sed são ferramentas clássicas para processamento de texto em pipelines.

# Extrair segunda coluna de um CSV com awk
awk -F',' '{print $2}' usuarios.csv

# Substituir "foo" por "bar" com sed
sed -i 's/foo/bar/g' config.txt

Para automação de tarefas, make é o padrão em projetos C/C++, mas just oferece sintaxe mais limpa para comandos arbitrários.

# Justfile para automação
build:
    cargo build --release

test:
    cargo test -- --nocapture

deploy: build test
    rsync -avz target/release/ user@server:/opt/app

dateutils e when calculam datas e horários.

# Calcular diferença entre datas
dateutils.ddiff 2024-01-01 2024-12-31

# Executar comando em horário específico
when 14:30 -- notify-send "Hora da reunião"

5. Ferramentas para versionamento (Git)

lazygit e gitui oferecem interfaces TUI completas para Git, com staging, commit e push via teclado.

# Abrir lazygit no diretório atual
lazygit

Para análise de histórico, git log --graph mostra branches visualmente, e gitk fornece uma interface gráfica.

# Visualizar histórico com gráfico
git log --oneline --graph --all --decorate

# Abrir gitk para navegação visual
gitk --all

Para debugging, git blame identifica autores de linhas, e git bisect encontra commits que introduziram bugs.

# Encontrar autor de uma linha específica
git blame -L 10,20 main.py

# Iniciar bisect para encontrar bug
git bisect start
git bisect bad HEAD
git bisect good v1.0

6. Utilidades para produtividade diária

trash-cli envia arquivos para a lixeira do sistema (seguro), e rename renomeia arquivos em lote com expressões regulares.

# Mover para lixeira
trash-put arquivo-temp.log

# Renomear todos .txt para .md
rename 's/\.txt$/.md/' *.txt

Para backup e transferência, tar compacta, rsync sincroniza eficientemente, e restic faz backups criptografados.

# Backup incremental com rsync
rsync -avz --progress /home/user/projetos/ user@server:/backup/

# Backup criptografado com restic
restic -r s3:https://s3.amazonaws.com/bucket backup /home/user

Integração com desktop: xclip/wl-clipboard acessam a área de transferência, e notify-send envia notificações.

# Copiar saída para clipboard
cat relatorio.txt | xclip -selection clipboard

# Notificação ao finalizar tarefa
notify-send "Backup concluído" "$(date)"

7. Segurança e acesso remoto

Conexões SSH são otimizadas com atalhos no arquivo ~/.ssh/config. O mosh mantém conexões em redes instáveis.

# Configuração SSH no .ssh/config
Host servidor-producao
    HostName 192.168.1.100
    User deploy
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

# Conectar com atalho
ssh servidor-producao

# Usar mosh para conexão resiliente
mosh servidor-producao

Gerenciamento de chaves com ssh-keygen e gpg para criptografia.

# Gerar chave SSH Ed25519
ssh-keygen -t ed25519 -C "email@exemplo.com"

# Criptografar arquivo com GPG
gpg --symmetric --cipher-algo AES256 dados.conf

Auditoria de permissões com ls -la, find e comandos avançados de chmod/chown.

# Encontrar arquivos com permissão 777
find /home -type f -perm 0777

# Alterar permissões recursivamente (apenas diretórios)
find /app -type d -exec chmod 755 {} \;

Referências