Post

Estação de Trabalho como Código (Parte 1.5): Ferramentas Essenciais do Linux

Guia completo sobre ferramentas essenciais instaladas na Parte 1. Aprenda o propósito, exemplos práticos e comparações entre alternativas de 30+ ferramentas Linux, incluindo ferramentas de rede, busca, monitoramento, análise e utilitários. Integre com Bash para aumentar produtividade.

Estação de Trabalho como Código (Parte 1.5): Ferramentas Essenciais do Linux

Tutorial Anterior: Estação de Trabalho como Código (Parte 1): Fundação com Ubuntu 24.04 e Git

Próximo Tutorial: Estação de Trabalho como Código (Parte 2): Customizando o Bash com Aliases e Funções

Introdução

Na Parte 1, você instalou diversas ferramentas essenciais do Linux. Mas simplesmente instalar não é suficiente - é importante compreender o propósito de cada uma, saber quando e como usá-las, e entender como integrá-las com seu fluxo de trabalho.

Este tutorial é um guia de referência completo sobre as ferramentas instaladas. Você aprenderá não apenas como usar cada uma, mas também quando escolher entre alternativas similares e como integrá-las com Bash para aumentar sua produtividade.

Importante: Este tutorial é complementar e opcional. Se você já conhece essas ferramentas, pode pular para a Parte 2. Se é iniciante, este guia será invaluável.

Objetivos desta Parte

  • Compreender o propósito de cada ferramenta instalada
  • Aprender exemplos práticos de uso
  • Conhecer alternativas e quando usá-las
  • Integrar ferramentas com Bash
  • Criar aliases para ferramentas comuns
  • Otimizar fluxo de trabalho com ferramentas
  • Compreender casos de uso reais
  • Construir confiança com ferramentas CLI

A quem se destina

Este tutorial é ideal para:

  • Iniciantes em Linux: Compreender ferramentas essenciais
  • Profissionais em Transição: Aprender novas ferramentas
  • Administradores de Sistema: Referência de ferramentas
  • Desenvolvedores: Otimizar fluxo de trabalho

Pré-conhecimento: Conclusão da Parte 1 é essencial.

Pré-requisitos

  • Conclusão da Parte 1 (ferramentas instaladas)
  • Conhecimento básico de terminal Linux
  • Vontade de aprender

Tempo Estimado

90-120 minutos

Isso inclui:

  • Leitura das descrições: ~30 min
  • Experimentação prática: ~40 min
  • Integração com Bash: ~20 min
  • Referência e consulta: ~10 min

Parte 1: Ferramentas de Edição de Texto

Vim

Descrição: O vim (Vi IMproved) é um editor de texto altamente configurável e eficiente, amplamente utilizado por programadores e administradores de sistema. Ele opera em diferentes modos (normal, inserção, visual, comando) para manipulação de texto, oferecendo recursos avançados como realce de sintaxe, macros e plugins.

Instalado em: Parte 1

Exemplo de Uso:

1
2
3
4
5
6
7
8
# Abrir arquivo para edição
$ vim meu_arquivo.txt

# Abrir em modo read-only
$ vim -R arquivo.txt

# Abrir em múltiplas janelas
$ vim -O arquivo1.txt arquivo2.txt

Dicas Profissionais:

  • Use :set number para mostrar números de linha
  • Use :set relativenumber para números relativos
  • Use :%s/antigo/novo/g para substituição global
  • Use dd para deletar linha, yy para copiar

Integração com Bash:

1
2
3
4
5
6
7
8
9
# Alias para abrir vim rapidamente
alias v='vim'
alias vi='vim'

# Função para editar arquivo e executar
edit_and_run() {
    vim "$1"
    bash "$1"
}

Alternativas:

  • nano: Mais simples, melhor para iniciantes
  • emacs: Mais poderoso, curva de aprendizado maior
  • VS Code: Moderno, mas requer GUI

Nano

Descrição: O nano é um editor de texto simples e amigável, ideal para iniciantes. Oferece uma interface intuitiva com atalhos de teclado visíveis na tela, sendo perfeito para edições rápidas de arquivos de configuração.

Instalado em: Parte 1

Exemplo de Uso:

1
2
3
4
5
# Abrir arquivo para edição
$ nano meu_arquivo.txt

# Criar novo arquivo
$ nano novo_arquivo.txt

Atalhos Úteis:

  • Ctrl+X: Sair
  • Ctrl+O: Salvar
  • Ctrl+W: Buscar
  • Ctrl+K: Cortar linha

Integração com Bash:

1
2
3
4
5
# Usar nano como editor padrão
export EDITOR=nano

# Alias para editar rapidamente
alias n='nano'

Parte 2: Ferramentas de Rede

curl

Descrição: O curl é uma ferramenta de linha de comando para transferir dados com sintaxe de URL. Suporta HTTP, HTTPS, FTP, FTPS, SCP, SFTP e muitos outros protocolos. Frequentemente usado para testar APIs, baixar arquivos e interagir com serviços web.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Fazer requisição GET simples
$ curl https://api.example.com/data

# Fazer requisição POST com dados
$ curl -X POST -d "param1=value1" https://api.example.com/endpoint

# Salvar resposta em arquivo
$ curl https://example.com/arquivo.zip -o arquivo.zip

# Incluir headers customizados
$ curl -H "Authorization: Bearer TOKEN" https://api.example.com/data

# Seguir redirecionamentos
$ curl -L https://example.com/redirect

# Mostrar headers de resposta
$ curl -i https://example.com

# Fazer requisição com autenticação básica
$ curl -u usuario:senha https://api.example.com/data

Dicas Profissionais:

  • Use -v para modo verbose (debug)
  • Use -X para especificar método HTTP
  • Use -d para enviar dados
  • Use -H para adicionar headers

Integração com Bash:

1
2
3
4
5
6
7
8
9
# Função para testar API rapidamente
test_api() {
    local url=$1
    local method=${2:-GET}
    curl -X "$method" -v "$url"
}

# Alias para requisições comuns
alias curl_json='curl -H "Content-Type: application/json"'

wget

Descrição: O wget é um utilitário de linha de comando para download de arquivos da web. Suporta HTTP, HTTPS e FTP, pode retomar downloads interrompidos, baixar recursivamente sites inteiros e trabalhar em segundo plano.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Download simples
$ wget https://example.com/arquivo.zip

# Download com nome customizado
$ wget https://example.com/arquivo.zip -O meu_arquivo.zip

# Retomar download interrompido
$ wget -c https://example.com/arquivo.zip

# Baixar recursivamente um site
$ wget -r https://example.com

# Baixar com limite de velocidade
$ wget --limit-rate=100k https://example.com/arquivo.zip

# Baixar múltiplos arquivos
$ wget https://example.com/arquivo1.zip https://example.com/arquivo2.zip

Dicas Profissionais:

  • Use -c para retomar downloads
  • Use -r para download recursivo
  • Use --limit-rate para limitar velocidade
  • Use -b para download em background

Integração com Bash:

1
2
3
4
5
6
7
8
9
# Função para download com progresso
download_file() {
    local url=$1
    local output=${2:-$(basename "$url")}
    wget -c "$url" -O "$output"
}

# Alias para download rápido
alias wget_bg='wget -b'

Comparação: curl vs wget

Aspectocurlwget
ProtocolosMuitosHTTP/HTTPS/FTP
APIsExcelenteBom
Download RecursivoNãoSim
Retomar DownloadSimSim
SintaxeComplexaSimples
UsoAPIs, testesDownloads, mirrors

dig

Descrição: O dig (Domain Information Groper) é uma ferramenta para consultar servidores DNS. Fornece informações detalhadas sobre registros DNS, sendo essencial para diagnóstico de problemas de rede e configuração de domínios.

Instalado em: Parte 1 (via dnsutils)

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Consultar registro A (IPv4)
$ dig example.com

# Consultar tipo específico de registro
$ dig example.com MX    # Mail servers
$ dig example.com NS    # Name servers
$ dig example.com CNAME # Aliases

# Consultar servidor DNS específico
$ dig @8.8.8.8 example.com

# Modo curto (apenas resultado)
$ dig +short example.com

# Rastrear caminho de resolução
$ dig +trace example.com

Dicas Profissionais:

  • Use +short para saída concisa
  • Use +trace para entender resolução
  • Use @servidor para consultar servidor específico
  • Use tipos de registro específicos (A, MX, NS, CNAME)

Integração com Bash:

1
2
3
4
5
6
7
8
9
# Função para verificar DNS rapidamente
check_dns() {
    local domain=$1
    dig +short "$domain"
}

# Alias para consultas comuns
alias dig_mx='dig +short MX'
alias dig_ns='dig +short NS'

nmap

Descrição: O nmap (Network Mapper) é uma ferramenta de exploração de rede e auditoria de segurança. Descobre hosts e serviços em uma rede, detecta portas abertas, identifica sistemas operacionais e versões de serviços.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Escanear portas abertas
$ nmap example.com

# Escanear portas específicas
$ nmap -p 80,443,22 example.com

# Escanear faixa de portas
$ nmap -p 1-1000 example.com

# Detecção de versão
$ nmap -sV example.com

# Detecção de SO
$ nmap -O example.com

# Escanear rede inteira
$ nmap 192.168.1.0/24

# Modo agressivo (mais informações)
$ nmap -A example.com

Dicas Profissionais:

  • Use -sV para detectar versões
  • Use -O para detectar SO
  • Use -A para modo agressivo
  • Use -p- para escanear todas as portas

Aviso: Use nmap apenas em redes que você possui ou tem permissão. Uso não autorizado é ilegal.

Integração com Bash:

1
2
3
4
5
# Função para escanear portas comuns
scan_ports() {
    local host=$1
    nmap -p 22,80,443,3306,5432 "$host"
}

iftop

Descrição: O iftop é uma ferramenta de monitoramento de rede em tempo real. Exibe o uso da largura de banda em uma interface de rede, mostrando quais hosts estão consumindo mais dados.

Instalado em: Parte 1

Exemplo de Uso:

1
2
3
4
5
6
7
8
# Monitorar tráfego na interface padrão
$ sudo iftop

# Monitorar interface específica
$ sudo iftop -i eth0

# Modo não-interativo
$ sudo iftop -n

Atalhos Úteis:

  • n: Alternar nomes/IPs
  • s: Alternar escala
  • p: Alternar portas
  • q: Sair

Parte 3: Ferramentas de Busca e Localização

fzf

Descrição: O fzf (fuzzy finder) é um localizador de arquivos interativo e de uso geral. Permite pesquisar e selecionar arquivos ou diretórios de forma rápida e eficiente usando correspondência difusa (fuzzy matching).

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
# Buscar arquivo interativamente
$ fzf

# Abrir arquivo selecionado com vim
$ vim $(fzf)

# Buscar em diretório específico
$ fzf --preview 'cat {}'

# Integração com histórico bash
$ history | fzf

Integração com Bash:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Função para abrir arquivo com fzf
fopen() {
    local file
    file=$(fzf --preview 'cat {}')
    [ -n "$file" ] && vim "$file"
}

# Alias para buscar e abrir
alias ff='fzf --preview "cat {}"'

# Função para buscar em histórico
fhistory() {
    eval "$(history | fzf --tac | sed 's/^[[:space:]]*[0-9]\+[[:space:]]\+//')"
}

fd

Descrição: O fd (fd-find) é uma alternativa mais rápida e amigável ao comando find. Oferece sintaxe mais simples, saída colorida por padrão, e é otimizado para velocidade.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Encontrar todos os arquivos .log
$ fd .log

# Encontrar diretórios
$ fd -t d nome_diretorio

# Encontrar arquivos com padrão regex
$ fd 'test.*\.py'

# Executar comando em cada resultado
$ fd .log -x rm {}

# Limitar profundidade
$ fd -d 2 arquivo.txt

Comparação: find vs fd

Aspectofindfd
SintaxeComplexaSimples
VelocidadeLentaRápida
CoresNãoSim
PadrãoGlobRegex
Curva de AprendizadoAltaBaixa

Integração com Bash:

1
2
3
4
5
6
7
8
9
10
11
# Alias para buscas comuns
alias fds='fd -t f'        # Apenas arquivos
alias fdd='fd -t d'        # Apenas diretórios
alias fdl='fd .log'        # Arquivos de log

# Função para encontrar e editar
fdedit() {
    local file
    file=$(fd "$1" | fzf)
    [ -n "$file" ] && vim "$file"
}

ripgrep

Descrição: O ripgrep (rg) é uma ferramenta de busca de linha de comando que combina usabilidade do grep com velocidade. Otimizado para pesquisar recursivamente diretórios em busca de padrões regex.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Buscar string em arquivos
$ rg "minha_funcao"

# Buscar em tipo de arquivo específico
$ rg "minha_funcao" -g "*.py"

# Buscar com contexto
$ rg "minha_funcao" -C 3

# Buscar case-insensitive
$ rg -i "funcao"

# Contar ocorrências
$ rg "funcao" --count

# Listar apenas nomes de arquivo
$ rg "funcao" -l

Comparação: grep vs rg

Aspectogreprg
VelocidadeLentaMuito rápida
SintaxeSimplesSimples
RecursivoCom -rPor padrão
CoresNãoSim
Ignora .gitignoreNãoSim

Integração com Bash:

1
2
3
4
5
6
7
8
9
10
# Alias para buscas comuns
alias rg_py='rg -g "*.py"'
alias rg_js='rg -g "*.js"'

# Função para buscar e editar
rgedit() {
    local file
    file=$(rg "$1" -l | fzf)
    [ -n "$file" ] && vim "$file"
}

plocate

Descrição: O plocate é uma alternativa mais rápida ao locate para encontrar arquivos no sistema de arquivos. Usa um banco de dados pré-indexado, tornando buscas extremamente rápidas.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
# Encontrar arquivo por nome
$ plocate config

# Busca case-insensitive
$ plocate -i CONFIG

# Contar ocorrências
$ plocate -c config

# Atualizar banco de dados
$ sudo updatedb

Integração com Bash:

1
2
3
4
5
6
7
8
9
# Alias para buscas rápidas
alias locate='plocate'

# Função para encontrar e abrir
plocate_open() {
    local file
    file=$(plocate "$1" | fzf)
    [ -n "$file" ] && vim "$file"
}

Parte 4: Ferramentas de Monitoramento e Análise

btop

Descrição: O btop é um monitor de recursos do sistema em tempo real, interativo e com interface colorida. Exibe informações sobre CPU, memória, discos, rede e processos.

Instalado em: Parte 1

Exemplo de Uso:

1
2
3
4
5
# Iniciar monitor
$ btop

# Modo não-interativo
$ btop -b

Atalhos Úteis:

  • q: Sair
  • p: Alternar processos
  • m: Alternar memória
  • n: Alternar rede

Integração com Bash:

1
2
3
# Alias para monitorar
alias monitor='btop'
alias top='btop'

strace

Descrição: O strace é uma ferramenta de diagnóstico que monitora chamadas de sistema e sinais recebidos por um processo. Útil para depurar programas e entender interações com o kernel.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
# Rastrear chamadas de sistema
$ strace ls

# Rastrear processo em execução
$ strace -p PID

# Salvar saída em arquivo
$ strace -o trace.txt ls

# Contar chamadas de sistema
$ strace -c ls

Dicas Profissionais:

  • Use -c para resumo de chamadas
  • Use -e para filtrar chamadas específicas
  • Use -o para salvar em arquivo

jq

Descrição: O jq é um processador JSON leve e flexível de linha de comando. Permite fatiar, filtrar, mapear e transformar dados JSON com facilidade.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Extrair campo específico
$ echo '{"name": "Alice", "age": 30}' | jq '.name'

# Extrair múltiplos campos
$ echo '{"name": "Alice", "age": 30}' | jq '.name, .age'

# Filtrar array
$ echo '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]' | jq '.[] | select(.age > 26)'

# Transformar estrutura
$ echo '{"name": "Alice"}' | jq '{person: .name}'

# Formatar JSON
$ curl https://api.example.com/data | jq '.'

Integração com Bash:

1
2
3
4
5
6
7
8
9
# Função para parsear JSON de API
get_json_field() {
    local url=$1
    local field=$2
    curl -s "$url" | jq "$field"
}

# Alias para formatar JSON
alias jq_format='jq "."'

bat

Descrição: O bat é um clone do cat com superpoderes. Oferece realce de sintaxe, integração com git, numeração de linhas e paginação automática.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
# Visualizar arquivo com realce
$ bat meu_script.py

# Mostrar números de linha
$ bat -n meu_script.py

# Mostrar apenas linhas específicas
$ bat --line-range 1:10 meu_script.py

# Usar como paginador
$ man bash | bat

Integração com Bash:

1
2
3
4
5
6
7
8
9
10
# Usar bat como paginador padrão
export PAGER="bat"

# Alias para substituir cat
alias cat='bat'

# Função para visualizar com números
view_lines() {
    bat -n "$1"
}

Parte 5: Ferramentas de Visualização e Formatação

eza

Descrição: O eza é um substituto moderno para ls. Oferece saída colorida, visualização de ícones, informações detalhadas e melhor legibilidade.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Listar com detalhes
$ eza -l

# Listar recursivamente
$ eza -R

# Mostrar árvore de diretórios
$ eza --tree

# Listar com ícones
$ eza -l --icons

# Ordenar por tamanho
$ eza -lS

Integração com Bash:

1
2
3
4
5
6
7
8
9
10
# Alias para substituir ls
alias ls='eza'
alias ll='eza -l'
alias la='eza -la'
alias tree='eza --tree'

# Função para listar com filtro
lsgrep() {
    eza -l | grep "$1"
}

grc

Descrição: O grc (Generic Colouriser) é um wrapper que adiciona cores à saída de comandos de linha de comando, tornando logs e saídas mais legíveis.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
# Colorir saída de ping
$ grc ping google.com

# Colorir saída de traceroute
$ grc traceroute google.com

# Colorir saída de ps
$ grc ps aux

# Colorir saída de netstat
$ grc netstat -an

Integração com Bash:

1
2
3
4
5
# Alias para comandos comuns
alias ping='grc ping'
alias traceroute='grc traceroute'
alias ps='grc ps'
alias netstat='grc netstat'

Parte 6: Ferramentas de Referência Rápida

tldr

Descrição: O tldr (Too Long; Didn’t Read) é uma coleção de páginas de manual simplificadas e exemplos práticos para comandos de linha de comando.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
# Ver exemplos de comando
$ tldr tar

# Ver exemplos de outro comando
$ tldr find

# Atualizar banco de dados
$ tldr --update

Integração com Bash:

1
2
3
4
5
6
7
# Alias para referência rápida
alias help='tldr'

# Função para buscar comando
cmd_help() {
    tldr "$1" || man "$1"
}

Parte 7: Ferramentas de Hardware e Sistema

lshw

Descrição: O lshw (list hardware) fornece informações detalhadas sobre a configuração de hardware do sistema, incluindo memória, CPU, placa-mãe, adaptadores de rede e dispositivos de armazenamento.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
# Listar todo hardware
$ sudo lshw

# Formato HTML
$ sudo lshw -html > hardware.html

# Apenas informações de CPU
$ sudo lshw -C cpu

# Apenas informações de memória
$ sudo lshw -C memory

hwinfo

Descrição: O hwinfo é uma ferramenta para detectar hardware presente no sistema, fornecendo saída detalhada sobre componentes.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
# Resumo do hardware
$ hwinfo --short

# Informações detalhadas
$ hwinfo

# Apenas CPU
$ hwinfo --cpu

# Apenas memória
$ hwinfo --memory

fwupd

Descrição: O fwupd é um daemon para gerenciamento de firmware em sistemas Linux, permitindo atualizar firmware de dispositivos de hardware.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
# Verificar atualizações
$ fwupdmgr refresh && fwupdmgr get-updates

# Atualizar firmware
$ fwupdmgr update

# Listar dispositivos
$ fwupdmgr get-devices

ethtool

Descrição: O ethtool é uma ferramenta para consultar e controlar configurações de drivers de dispositivos de rede Ethernet.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
# Informações sobre interface
$ ethtool eth0

# Velocidade de conexão
$ ethtool eth0 | grep Speed

# Estatísticas
$ ethtool -S eth0

Parte 8: Ferramentas de Sincronização e Transferência

rsync

Descrição: O rsync é uma ferramenta de sincronização de arquivos rápida e versátil. Copia e sincroniza arquivos localmente e remotamente, minimizando transferência de dados.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Sincronizar diretório local
$ rsync -avz /origem/ /destino/

# Sincronizar com servidor remoto
$ rsync -avz /origem/ usuario@host:/destino/

# Sincronizar com deleção
$ rsync -avz --delete /origem/ /destino/

# Mostrar progresso
$ rsync -avz --progress /origem/ /destino/

# Backup com timestamp
$ rsync -avz /origem/ /backup/backup-$(date +%Y%m%d)/

Integração com Bash:

1
2
3
4
5
6
7
8
9
# Função para backup automático
backup_dir() {
    local source=$1
    local dest=$2
    rsync -avz --delete "$source" "$dest/backup-$(date +%Y%m%d)/"
}

# Alias para sincronização
alias sync_backup='rsync -avz --delete'

Parte 9: Ferramentas de Análise de Rede

traceroute

Descrição: O traceroute exibe a rota (caminho) e mede atrasos de trânsito de pacotes através de uma rede IP. Lista todos os roteadores pelos quais um pacote passa.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
# Rastrear rota para domínio
$ traceroute google.com

# Usar UDP em vez de ICMP
$ traceroute -U google.com

# Limitar número de hops
$ traceroute -m 10 google.com

whois

Descrição: O whois permite obter informações sobre domínios da internet, endereços IP e blocos de rede, incluindo registrante, contato e servidores de nome.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
# Informações de domínio
$ whois example.com

# Informações de IP
$ whois 8.8.8.8

# Apenas registrante
$ whois example.com | grep Registrant

ipcalc

Descrição: O ipcalc é uma ferramenta para cálculos de rede IP, calculando endereço de broadcast, máscara de rede, número de hosts e faixa de endereços.

Instalado em: Parte 1

Exemplos de Uso:

1
2
3
4
5
6
7
8
# Calcular informações de rede
$ ipcalc 192.168.1.1/24

# Apenas endereço de broadcast
$ ipcalc -b 192.168.1.1/24

# Apenas máscara de rede
$ ipcalc -m 192.168.1.1/24

Integração com Bash:

1
2
3
4
5
6
7
# Função para calcular rede rapidamente
calc_net() {
    ipcalc "$1"
}

# Alias para cálculos comuns
alias ipcalc_24='ipcalc -m /24'

Parte 10: Tabela Comparativa de Alternativas

Ferramentas de Busca

FerramentaVelocidadeSintaxeCoresRecursivoMelhor Para
findLentaComplexaNãoSimBuscas complexas
fdRápidaSimplesSimSimBuscas simples
locateMuito rápidaSimplesNãoN/ABuscas por nome
plocateMuito rápidaSimplesNãoN/ABuscas por nome

Ferramentas de Grep

FerramentaVelocidadeRecursivoIgnora .gitignoreCoresMelhor Para
grepLentaCom -rNãoNãoPadrão
ackRápidaPor padrãoSimSimCódigo
agMuito rápidaPor padrãoSimSimCódigo
rgMuito rápidaPor padrãoSimSimCódigo

Ferramentas de Listagem

FerramentaCoresÍconesÁrvoreDetalhesMelhor Para
lsNãoNãoNãoBásicosPadrão
exaSimNãoSimCompletosModerno
ezaSimSimSimCompletosModerno
treeNãoNãoSimBásicosÁrvore

Parte 11: Integração com Bash - Exemplos Práticos

#!/bin/bash ################################################################################

.bash_functions

#

Arquivo de funções personalizadas para Bash

Organizado por categoria para facilitar manutenção e reutilização

#

Uso: Adicione ao final do ~/.bashrc:

if [ -f ~/.bash_functions ]; then

source ~/.bash_functions

fi

#

Autor: Workspace as Code

Data: 2026-02-21

################################################################################

============================================================================

FUNÇÕES DE BUSCA E LOCALIZAÇÃO

============================================================================

Função: smart_search

Descrição: Busca inteligente usando ripgrep ou grep, com fzf para seleção

Uso: smart_search “termo_de_busca”

Exemplo: smart_search “minha_funcao”

smart_search() { local search_term=$1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if [ -z "$search_term" ]; then
    echo "Uso: smart_search <termo>"
    return 1
fi

local file

# Tentar com ripgrep primeiro (mais rápido)
if command -v rg &> /dev/null; then
    file=$(rg "$search_term" -l | fzf --preview "bat {}" --preview-window=right:50%)
elif command -v grep &> /dev/null; then
    file=$(grep -r "$search_term" . -l 2>/dev/null | fzf --preview "cat {}")
else
    echo "Erro: ripgrep ou grep não encontrado"
    return 1
fi

if [ -n "$file" ]; then
    vim "$file"
else
    echo "Nenhum arquivo selecionado"
    return 1
fi }

Função: fdedit

Descrição: Encontra arquivo com fd e abre com vim

Uso: fdedit [padrão]

Exemplo: fdedit “*.py”

fdedit() { local pattern=${1:-.}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if ! command -v fd &> /dev/null; then
    echo "Erro: fd não encontrado"
    return 1
fi

local file
file=$(fd "$pattern" | fzf --preview "bat {}" --preview-window=right:50%)

if [ -n "$file" ]; then
    vim "$file"
else
    echo "Nenhum arquivo selecionado"
    return 1
fi }

Função: rgedit

Descrição: Busca com ripgrep e abre arquivo com vim

Uso: rgedit “termo” [tipo_arquivo]

Exemplo: rgedit “funcao” “*.py”

rgedit() { local search_term=$1 local file_type=${2:-.}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if [ -z "$search_term" ]; then
    echo "Uso: rgedit <termo> [tipo_arquivo]"
    return 1
fi

if ! command -v rg &> /dev/null; then
    echo "Erro: ripgrep não encontrado"
    return 1
fi

local file
file=$(rg "$search_term" -g "$file_type" -l | fzf --preview "bat {}" --preview-window=right:50%)

if [ -n "$file" ]; then
    vim "$file"
else
    echo "Nenhum arquivo encontrado"
    return 1
fi }

Função: plocate_open

Descrição: Localiza arquivo com plocate e abre com vim

Uso: plocate_open “nome_arquivo”

Exemplo: plocate_open “config”

plocate_open() { local search_term=$1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if [ -z "$search_term" ]; then
    echo "Uso: plocate_open <termo>"
    return 1
fi

if ! command -v plocate &> /dev/null; then
    echo "Erro: plocate não encontrado"
    return 1
fi

local file
file=$(plocate "$search_term" | fzf --preview "bat {}" --preview-window=right:50%)

if [ -n "$file" ]; then
    vim "$file"
else
    echo "Nenhum arquivo encontrado"
    return 1
fi }

Função: fopen

Descrição: Abre arquivo com fzf e vim

Uso: fopen

Exemplo: fopen

fopen() { if ! command -v fzf &> /dev/null; then echo “Erro: fzf não encontrado” return 1 fi

1
2
3
4
5
6
7
8
9
local file
file=$(fzf --preview "bat {}" --preview-window=right:50%)

if [ -n "$file" ]; then
    vim "$file"
else
    echo "Nenhum arquivo selecionado"
    return 1
fi }

Função: lsgrep

Descrição: Lista arquivos com filtro usando eza e grep

Uso: lsgrep “padrão”

Exemplo: lsgrep “log”

lsgrep() { local pattern=$1

1
2
3
4
5
6
7
8
9
10
if [ -z "$pattern" ]; then
    echo "Uso: lsgrep <padrão>"
    return 1
fi

if command -v eza &> /dev/null; then
    eza -l | grep "$pattern"
else
    ls -l | grep "$pattern"
fi }

============================================================================

FUNÇÕES DE REDE

============================================================================

Função: test_api

Descrição: Testa API com curl, suportando diferentes métodos HTTP

Uso: test_api [método]

Exemplo: test_api “https://api.example.com/data” “GET”

test_api() { local url=$1 local method=${2:-GET}

1
2
3
4
5
6
7
8
9
10
11
12
if [ -z "$url" ]; then
    echo "Uso: test_api <url> [método]"
    return 1
fi

if ! command -v curl &> /dev/null; then
    echo "Erro: curl não encontrado"
    return 1
fi

echo "Testando $method $url..."
curl -X "$method" -v "$url" }

Função: check_dns

Descrição: Verifica registros DNS de um domínio

Uso: check_dns [tipo]

Exemplo: check_dns “example.com” “MX”

check_dns() { local domain=$1 local type=${2:-A}

1
2
3
4
5
6
7
8
9
10
11
12
if [ -z "$domain" ]; then
    echo "Uso: check_dns <domínio> [tipo]"
    return 1
fi

if ! command -v dig &> /dev/null; then
    echo "Erro: dig não encontrado"
    return 1
fi

echo "Consultando $type para $domain..."
dig +short "$domain" "$type" }

Função: scan_ports

Descrição: Escaneia portas comuns em um host

Uso: scan_ports

Exemplo: scan_ports “example.com”

scan_ports() { local host=$1

1
2
3
4
5
6
7
8
9
10
11
12
if [ -z "$host" ]; then
    echo "Uso: scan_ports <host>"
    return 1
fi

if ! command -v nmap &> /dev/null; then
    echo "Erro: nmap não encontrado"
    return 1
fi

echo "Escaneando portas comuns em $host..."
nmap -p 22,80,443,3306,5432 "$host" }

Função: calc_net

Descrição: Calcula informações de rede para um endereço IP/máscara

Uso: calc_net <ip/máscara>

Exemplo: calc_net “192.168.1.1/24”

calc_net() { local network=$1

1
2
3
4
5
6
7
8
9
10
11
if [ -z "$network" ]; then
    echo "Uso: calc_net <ip/máscara>"
    return 1
fi

if ! command -v ipcalc &> /dev/null; then
    echo "Erro: ipcalc não encontrado"
    return 1
fi

ipcalc "$network" }

Função: get_json_field

Descrição: Extrai campo específico de JSON de uma API

Uso: get_json_field

Exemplo: get_json_field “https://api.example.com/data” “.name”

get_json_field() { local url=$1 local field=$2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if [ -z "$url" ] || [ -z "$field" ]; then
    echo "Uso: get_json_field <url> <campo>"
    return 1
fi

if ! command -v curl &> /dev/null; then
    echo "Erro: curl não encontrado"
    return 1
fi

if ! command -v jq &> /dev/null; then
    echo "Erro: jq não encontrado"
    return 1
fi

curl -s "$url" | jq "$field" }

============================================================================

FUNÇÕES DE ARQUIVO E SINCRONIZAÇÃO

============================================================================

Função: backup

Descrição: Faz backup de um diretório com timestamp

Uso: backup [destino]

Exemplo: backup ~/Documentos ~/Backups

backup() { local source=$1 local dest=${2:-.}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if [ -z "$source" ]; then
    echo "Uso: backup <origem> [destino]"
    return 1
fi

if ! command -v rsync &> /dev/null; then
    echo "Erro: rsync não encontrado"
    return 1
fi

local backup_dir="$dest/backup-$(date +%Y%m%d-%H%M%S)"

echo "Iniciando backup de $source para $backup_dir..."
rsync -avz --progress "$source" "$backup_dir"

if [ $? -eq 0 ]; then
    echo "Backup concluído com sucesso!"
else
    echo "Erro durante o backup"
    return 1
fi }

Função: backup_dir

Descrição: Sincroniza diretório com backup automático

Uso: backup_dir

Exemplo: backup_dir ~/Documentos ~/Backups

backup_dir() { local source=$1 local dest=$2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if [ -z "$source" ] || [ -z "$dest" ]; then
    echo "Uso: backup_dir <origem> <destino>"
    return 1
fi

if ! command -v rsync &> /dev/null; then
    echo "Erro: rsync não encontrado"
    return 1
fi

local backup_dir="$dest/backup-$(date +%Y%m%d-%H%M%S)"

echo "Sincronizando $source para $backup_dir..."
rsync -avz --delete "$source" "$backup_dir"

if [ $? -eq 0 ]; then
    echo "Sincronização concluída!"
else
    echo "Erro durante sincronização"
    return 1
fi }

Função: download_file

Descrição: Baixa arquivo com wget, com suporte a retomada

Uso: download_file [nome_saída]

Exemplo: download_file “https://example.com/arquivo.zip” “meu_arquivo.zip”

download_file() { local url=$1 local output=${2:-$(basename “$url”)}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if [ -z "$url" ]; then
    echo "Uso: download_file <url> [nome_saída]"
    return 1
fi

if ! command -v wget &> /dev/null; then
    echo "Erro: wget não encontrado"
    return 1
fi

echo "Baixando $url para $output..."
wget -c "$url" -O "$output"

if [ $? -eq 0 ]; then
    echo "Download concluído!"
else
    echo "Erro durante download"
    return 1
fi }

Função: sync_backup

Descrição: Sincroniza diretório com deleção de arquivos removidos

Uso: sync_backup

Exemplo: sync_backup ~/Documentos ~/Backups

sync_backup() { local source=$1 local dest=$2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if [ -z "$source" ] || [ -z "$dest" ]; then
    echo "Uso: sync_backup <origem> <destino>"
    return 1
fi

if ! command -v rsync &> /dev/null; then
    echo "Erro: rsync não encontrado"
    return 1
fi

echo "Sincronizando $source para $dest (com deleção)..."
rsync -avz --delete --progress "$source" "$dest"

if [ $? -eq 0 ]; then
    echo "Sincronização concluída!"
else
    echo "Erro durante sincronização"
    return 1
fi }

============================================================================

FUNÇÕES DE SISTEMA E MONITORAMENTO

============================================================================

Função: system_info

Descrição: Exibe informações completas do sistema

Uso: system_info

Exemplo: system_info

system_info() { echo “╔════════════════════════════════════════════════════════════════╗” echo “║ INFORMAÇÕES DO SISTEMA ║” echo “╚════════════════════════════════════════════════════════════════╝”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
echo ""
echo "=== CPU Info ==="
if command -v lshw &> /dev/null; then
    sudo lshw -C cpu 2>/dev/null | grep -E "product|cores|threads" || echo "Sem informações"
else
    echo "lshw não encontrado"
fi

echo ""
echo "=== Memory Info ==="
if command -v free &> /dev/null; then
    free -h
else
    echo "free não encontrado"
fi

echo ""
echo "=== Disk Usage ==="
if command -v df &> /dev/null; then
    df -h | awk 'NR==1 || NR>1 {print}'
else
    echo "df não encontrado"
fi

echo ""
echo "=== Network Interfaces ==="
if command -v ip &> /dev/null; then
    ip -s link show | head -20
else
    echo "ip não encontrado"
fi

echo ""
echo "=== Uptime ==="
uptime }

Função: cmd_help

Descrição: Mostra ajuda para um comando (tldr ou man)

Uso: cmd_help

Exemplo: cmd_help “tar”

cmd_help() { local cmd=$1

1
2
3
4
5
6
7
8
9
10
11
12
13
if [ -z "$cmd" ]; then
    echo "Uso: cmd_help <comando>"
    return 1
fi

if command -v tldr &> /dev/null; then
    tldr "$cmd"
elif command -v man &> /dev/null; then
    man "$cmd"
else
    echo "Erro: tldr ou man não encontrado"
    return 1
fi }

Função: view_lines

Descrição: Visualiza arquivo com números de linha usando bat

Uso: view_lines

Exemplo: view_lines “meu_script.py”

view_lines() { local file=$1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if [ -z "$file" ]; then
    echo "Uso: view_lines <arquivo>"
    return 1
fi

if [ ! -f "$file" ]; then
    echo "Erro: arquivo não encontrado"
    return 1
fi

if command -v bat &> /dev/null; then
    bat -n "$file"
else
    cat -n "$file"
fi }

============================================================================

FUNÇÕES DE DESENVOLVIMENTO

============================================================================

Função: edit_and_run

Descrição: Edita arquivo com vim e executa como script bash

Uso: edit_and_run

Exemplo: edit_and_run “meu_script.sh”

edit_and_run() { local file=$1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if [ -z "$file" ]; then
    echo "Uso: edit_and_run <arquivo>"
    return 1
fi

if ! command -v vim &> /dev/null; then
    echo "Erro: vim não encontrado"
    return 1
fi

vim "$file"

if [ -f "$file" ]; then
    echo ""
    echo "Executando $file..."
    bash "$file"
fi }

Função: fhistory

Descrição: Busca no histórico bash com fzf

Uso: fhistory

Exemplo: fhistory

fhistory() { if ! command -v fzf &> /dev/null; then echo “Erro: fzf não encontrado” return 1 fi

1
2
3
4
5
6
local cmd
cmd=$(history | fzf --tac | sed 's/^[[:space:]]*[0-9]\+[[:space:]]\+//')

if [ -n "$cmd" ]; then
    eval "$cmd"
fi }

============================================================================

FUNÇÕES DE PRODUTIVIDADE

============================================================================

Função: mkcd

Descrição: Cria diretório e entra nele

Uso: mkcd

Exemplo: mkcd “novo_projeto”

mkcd() { local dir=$1

1
2
3
4
5
6
if [ -z "$dir" ]; then
    echo "Uso: mkcd <diretório>"
    return 1
fi

mkdir -p "$dir" && cd "$dir" || return 1 }

Função: cd_git_root

Descrição: Muda para raiz do repositório git

Uso: cd_git_root

Exemplo: cd_git_root

cd_git_root() { if ! command -v git &> /dev/null; then echo “Erro: git não encontrado” return 1 fi

1
2
3
4
5
6
7
8
9
10
local root
root=$(git rev-parse --show-toplevel 2>/dev/null)

if [ -n "$root" ]; then
    cd "$root" || return 1
    echo "Mudado para raiz do repositório: $root"
else
    echo "Erro: não está em um repositório git"
    return 1
fi }

Função: extract

Descrição: Extrai arquivo compactado (suporta múltiplos formatos)

Uso: extract

Exemplo: extract “arquivo.tar.gz”

extract() { local file=$1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
if [ -z "$file" ]; then
    echo "Uso: extract <arquivo>"
    return 1
fi

if [ ! -f "$file" ]; then
    echo "Erro: arquivo não encontrado"
    return 1
fi

case "$file" in
    *.tar.gz|*.tgz)
        tar -xzf "$file"
        ;;
    *.tar.bz2|*.tbz2)
        tar -xjf "$file"
        ;;
    *.tar.xz|*.txz)
        tar -xJf "$file"
        ;;
    *.tar)
        tar -xf "$file"
        ;;
    *.zip)
        unzip "$file"
        ;;
    *.rar)
        unrar x "$file"
        ;;
    *.7z)
        7z x "$file"
        ;;
    *)
        echo "Formato não suportado: $file"
        return 1
        ;;
esac

echo "Arquivo extraído com sucesso!" }

Função: compress

Descrição: Compacta arquivo ou diretório

Uso: compress [formato]

Exemplo: compress “meu_diretório” “tar.gz”

compress() { local source=$1 local format=${2:-tar.gz}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
if [ -z "$source" ]; then
    echo "Uso: compress <arquivo_ou_diretório> [formato]"
    echo "Formatos suportados: tar.gz, tar.bz2, tar.xz, zip"
    return 1
fi

if [ ! -e "$source" ]; then
    echo "Erro: arquivo ou diretório não encontrado"
    return 1
fi

local output="${source}.${format}"

case "$format" in
    tar.gz|tgz)
        tar -czf "$output" "$source"
        ;;
    tar.bz2|tbz2)
        tar -cjf "$output" "$source"
        ;;
    tar.xz|txz)
        tar -cJf "$output" "$source"
        ;;
    tar)
        tar -cf "$output" "$source"
        ;;
    zip)
        zip -r "$output" "$source"
        ;;
    *)
        echo "Formato não suportado: $format"
        return 1
        ;;
esac

echo "Arquivo compactado: $output" }

============================================================================

FIM DO ARQUIVO .bash_functions

============================================================================


Parte 12: Próximos Passos

Consolidação

  1. Experimente cada ferramenta:
    • Dedique tempo para testar cada uma
    • Leia documentação com tldr
    • Crie aliases para as que usar frequentemente
  2. Integre com Bash:
    • Adicione aliases ao ~/.bashrc
    • Crie funções para tarefas comuns
    • Teste integração com outras ferramentas
  3. Customize seu Ambiente:
    • Escolha suas ferramentas favoritas
    • Configure cores e temas
    • Otimize para seu fluxo de trabalho

Aprofundamento

  • Parte 2: Customize Bash com aliases e funções
  • Parte 3: Configure Vim para edição avançada
  • Parte 3.5: Use Tmux com múltiplas conexões SSH

Conclusão

Você agora compreende o propósito de cada ferramenta instalada na Parte 1. Mais importante, você sabe:

✓ Quando usar cada ferramenta ✓ Como integrá-las com Bash ✓ Alternativas e quando escolhê-las ✓ Exemplos práticos de uso ✓ Como otimizar seu fluxo de trabalho

Essas ferramentas são a base de um ambiente CLI profissional. Domine-as e você será muito mais produtivo.


Recursos Adicionais

Documentação Oficial

Tutoriais Recomendados

Comunidades


Tutorial Anterior: Estação de Trabalho como Código (Parte 1): Fundação com Ubuntu 24.04 e Git

Próximo Tutorial: Estação de Trabalho como Código (Parte 2): Customizando o Bash com Aliases e Funções


Fim da Parte 1.5

Domine as ferramentas essenciais do Linux e construa um ambiente CLI profissional.

This post is licensed under CC BY 4.0 by the author.