Guias

FreeBSD Cheat Page

Guia de Comandos Rápidos do FreeBSD


MODELO TCP/IP — CAMADAS, PROTOCOLOS E UNIDADES DE DADOS
========================================================

CAMADA          PROTOCOLOS COMUNS         UNIDADE      O QUE CONTEM
---------------------------------------------------------------------------

APLICACAO       HTTP, HTTPS, FTP          MENSAGEM     dados do usuario
                SSH, TELNET, SMTP                      "GET /index.html"
                DNS, SNMP, NTP                         comandos, respostas
                IMAP, POP3, SIP

TRANSPORTE      TCP, UDP                  SEGMENTO     porta origem
                SCTP                      (TCP)        porta destino
                                          DATAGRAMA    numero de sequencia
                                          (UDP)        checksum
                                                       dados da aplicacao

REDE/INTERNET   IP (v4, v6)              PACOTE       IP origem
                ICMP (ping, traceroute)   (IP)         IP destino
                IGMP (multicast)                       TTL
                IPsec                                  protocolo (TCP=6)
                                                       dados do segmento

ENLACE/         Ethernet                 FRAME        MAC origem
DATALINK        WiFi (802.11)            (Ethernet)   MAC destino
                PPP, VLAN (802.1q)                    ethertype (IPv4=0x0800)
                ARP *                                  dados do pacote IP
                                                       FCS (checksum)

FISICA          Cabo par trancado        BITS         sinais eletricos
                Fibra optica             (fisico)     sinais de luz
                Sinal radio WiFi                      frequencias de radio
                Coaxial

* ARP opera entre enlace e rede — traduz IP para MAC

===========================================================================
RELACAO ENTRE MAC, IP, ARP E FRAMES
===========================================================================

  MAC  = endereco fisico da placa de rede. nao muda. gravado em hardware.
         formato: 00:1b:b9:c2:82:8c  (6 bytes, hexadecimal)
         escopo:  so vale dentro do segmento local (nao roteia)

  IP   = endereco logico do host na rede. pode mudar (DHCP).
         formato: 192.168.0.10  (IPv4, 4 bytes)
                  2001:db8::1   (IPv6, 16 bytes)
         escopo:  global, roteia pela internet inteira

  ARP  = protocolo que traduz IP em MAC dentro da rede local
         pergunta: "quem tem 192.168.0.1? me diga seu MAC"
         resposta: "sou eu, MAC 54:47:cc:c9:3f:92"
         cache:    tabela temporaria, expira (FreeBSD: ~20min)
         comando:  arp -a

  FRAME    = envelope da camada enlace. contem o pacote IP dentro.
             descartado e recriado a cada salto de roteador.

  PACOTE   = envelope da camada rede. contem o segmento TCP dentro.
             viaja inalterado de ponta a ponta.

  SEGMENTO = envelope da camada transporte. contem os dados.
             TCP garante entrega e ordem. UDP nao garante.

===========================================================================
COMO UM PACOTE HTTP VIAJA: FreeBSD → Google
===========================================================================

  APLICACAO cria:   "GET /index.html HTTP/1.1"
  TRANSPORTE adiciona: porta origem 54321, porta destino 80
  REDE adiciona:    IP src 192.168.0.10, IP dst 142.250.79.46
  ENLACE adiciona:  MAC src 00:1b:b9:c2:82:8c
                    MAC dst 54:47:cc:c9:3f:92  (MAC do gateway)

  [FreeBSD] --------frame 1--------> [roteador] ------frame 2------> [Google]
  MAC:seu→gateway                     MAC:gateway→proximo_salto
  IP: 192.168.0.10→142.250.79.46      IP: inalterado o tempo todo
  TCP: porta 54321→80                 TCP: inalterado o tempo todo

  a cada roteador:
    - frame Ethernet e DESCARTADO
    - pacote IP e LIDO para decidir proximo salto
    - frame NOVO e criado com MACs do proximo trecho
    - pacote IP segue INTACTO ate o destino

===========================================================================
ENCAPSULAMENTO — BONECA RUSSA
===========================================================================

  +------------------------------------------------+
  |  FRAME ETHERNET                                |
  |  MAC src | MAC dst | ethertype                 |
  |  +------------------------------------------+ |
  |  |  PACOTE IP                               | |
  |  |  IP src | IP dst | TTL | protocolo       | |
  |  |  +------------------------------------+  | |
  |  |  |  SEGMENTO TCP                     |  | |
  |  |  |  porta src | porta dst | seq | ck |  | |
  |  |  |  +------------------------------+ |  | |
  |  |  |  |  DADOS DA APLICACAO         | |  | |
  |  |  |  |  "GET /index.html HTTP/1.1" | |  | |
  |  |  |  +------------------------------+ |  | |
  |  |  +------------------------------------+  | |
  |  +------------------------------------------+ |
  +------------------------------------------------+
  |  FCS (checksum do frame)                       |
  +------------------------------------------------+

===========================================================================
ICMP — O PROTOCOLO DO PING E TRACEROUTE
===========================================================================

  ICMP vive na camada de rede, junto com IP.
  nao tem portas. usado para diagnostico e controle.

  ping:        envia ICMP Echo Request, espera Echo Reply
  traceroute:  envia pacotes com TTL crescente (1,2,3...)
               cada roteador decrementa TTL
               quando TTL=0 o roteador descarta e manda ICMP
               Time Exceeded de volta — revelando seu IP

  TTL (Time To Live): contador de saltos. evita loops infinitos.
  cada roteador subtrai 1. chegou a 0: pacote descartado.
  valor tipico de saida: 64 (Linux/BSD) ou 128 (Windows)

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


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
ENDERECAMENTO IP — IPV4 E CIDR
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

################
ESTRUTURA DO ENDERECO IPV4
################

  32 bits divididos em 4 octetos de 8 bits cada
  formato: xxx.xxx.xxx.xxx
  exemplo: 203.0.113.100

  cada octeto: 2^8 = 256 valores possiveis (0 a 255)
  total de enderecos IPv4: 2^32 = 4.294.967.296 (~4,3 bilhoes)

################
CIDR — CLASSLESS INTER-DOMAIN ROUTING
################

  notacao: endereco/prefixo
  exemplo: 203.0.113.100/26

  o numero apos a barra indica quantos bits sao fixos (parte de rede)
  a barra nao significa divisao — e apenas um separador de notacao
  surgiu nos anos 90 para substituir a notacao verbosa de mascara:

    notacao antiga:  203.0.113.100  255.255.255.192
    notacao CIDR:    203.0.113.100/26   (equivalente)

################
CALCULO DE HOSTS E MASCARA
################

  bits livres = 32 - prefixo
  hosts       = 2 ^ bits livres
  mascara     = 256 - hosts  (no ultimo octeto)

  exemplo /26:
    bits fixos:  26
    bits livres: 32 - 26 = 6
    hosts:       2^6 = 64
    ultimo octeto em binario: 11000000 = 128+64 = 192
    mascara: 255.255.255.192

  exemplo /24:
    bits fixos:  24  (tres octetos completos reservados a rede)
    bits livres: 32 - 24 = 8
    hosts:       2^8 = 256  (o octeto inteiro e seu)
    mascara: 255.255.255.0

################
MASCARA EM BINARIO
################

  /24 → 11111111.11111111.11111111.00000000 → 255.255.255.0
  /25 → 11111111.11111111.11111111.10000000 → 255.255.255.128
  /26 → 11111111.11111111.11111111.11000000 → 255.255.255.192
  /27 → 11111111.11111111.11111111.11100000 → 255.255.255.224
  /28 → 11111111.11111111.11111111.11110000 → 255.255.255.240
  /29 → 11111111.11111111.11111111.11111000 → 255.255.255.248
  /30 → 11111111.11111111.11111111.11111100 → 255.255.255.252
  /31 → 11111111.11111111.11111111.11111110 → 255.255.255.254
  /32 → 11111111.11111111.11111111.11111111 → 255.255.255.255

################
TABELA DE PREFIXOS
################

  prefixo  bits livres  hosts  blocos  mascara
  -------  -----------  -----  ------  ---------------
  /24      8            256    1       255.255.255.0
  /25      7            128    2       255.255.255.128
  /26      6            64     4       255.255.255.192
  /27      5            32     8       255.255.255.224
  /28      4            16     16      255.255.255.240
  /29      3            8      32      255.255.255.248
  /30      2            4      64      255.255.255.252
  /31      1            2      128     255.255.255.254
  /32      0            1      256     255.255.255.255

################
BLOCOS DO ULTIMO OCTETO — EXEMPLO /26
################

  /26 divide o octeto em 4 blocos de 64 enderecos:

    0  –  63  → rede 203.0.113.0/26
   64  – 127  → rede 203.0.113.64/26   ← .100 cai aqui
  128  – 191  → rede 203.0.113.128/26
  192  – 255  → rede 203.0.113.192/26

  para achar o bloco de um IP:
    divida o ultimo octeto pelo tamanho do bloco, arredonde para baixo
    exemplo: 100 / 64 = 1 (resto 36) → bloco comeca em 1x64 = 64

################
ENDERECOS RESERVADOS EM CADA BLOCO
################

  primeiro endereco = endereco da rede (nao atribuivel a hosts)
  ultimo endereco   = broadcast (nao atribuivel a hosts)
  hosts uteis       = total - 2

  /30 → 4 enderecos, 2 uteis   (link ponto-a-ponto)
  /29 → 8 enderecos, 6 uteis
  /26 → 64 enderecos, 62 uteis

  excecao /31: RFC 3021 permite uso em links ponto-a-ponto
  excecao /32: host route — representa uma unica maquina na tabela de rotas

################
OBSERVACOES
################

  - o sistema binario usa base 2 (digitos 0 e 1)
    n bits = 2^n combinacoes possiveis
  - IPv4 esgotado desde 2011 (IANA) / 2019 (RIPE Europa)
  - IPv6 usa 128 bits: 2^128 = 340 undecilhoes de enderecos
  - NAT permite multiplos hosts compartilharem um IP publico
    e o principal motivo do IPv4 ainda estar em uso
  - CGNAT: NAT feito pela operadora em escala — seu roteador
    recebe um IP privado em vez de um IP publico



@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
COMANDOS DE REDE - DIAGNOSTICO E DISCOVERY
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

################
INTERFACES E ENDERECOS
################

ifconfig                        # mostra todas as interfaces e IPs
ifconfig em0                    # mostra interface especifica
ifconfig | grep inet            # filtra so enderecos IPv4
ifconfig | grep inet6           # filtra so enderecos IPv6
prefixos de interfaces
ifconfig interface-name inet IP-address netmask
ifconfig em0 inet 203.0.113.250 255.255.255.0
ifconfig em0 inet 203.0.113.250/24
ifconfig em0 inet6 2001:db8::bad:c0de:cafe/64
:: sao zeros seguidos  mas so pode usar 1 vez
################
CONECTIVIDADE
################

ping -c 4 8.8.8.8               # ping com 4 pacotes
ping -c 1 -W 1 192.168.0.1      # ping rapido com timeout de 1s
traceroute 8.8.8.8              # rota ate o destino
traceroute6 ipv6.google.com     # traceroute via IPv6

################
DNS
################

host google.com                 # resolucao DNS simples
host 8.8.8.8                    # DNS reverso (IP -> nome)
nslookup google.com             # consulta DNS interativa
drill google.com                # alternativa ao dig no FreeBSD
drill MX google.com             # consulta registro especifico

################
PORTAS E SERVICOS LOCAIS
################


sockstat -l                     # todas as portas abertas e processos
sockstat -l -p 80               # filtra porta especifica
netstat -an                     # todas conexoes e portas
netstat -an | grep LISTEN       # so portas escutando
netstat -rn                     # tabela de rotas
netstat -w 5 -d                 # displays how many packets and bytes
your system is processing

################
TABELA ARP- ARP (Address Resolution Protocol) é o mecanismo que traduz IP para MAC e a tabela é um cache temporário dessa tradução.
IPv6 uses Neighbor Discovery Protocol (NDP) to map IPv6 addresses
to MAC addresses. IPv6-only hosts will not show up in your ARP table,
and IPv4-only hosts will not appear in the NDP table
################
(Criar tabela via Ping ou Nmap Antes)
arp -a                          # todos os MACs conhecidos na rede
arp -d 192.168.0.112            # remove entrada especifica do cache

################
NMAP - DISCOVERY
################

nmap -sn -PE --send-ip 192.168.0.0/24      # acha todos os hosts (ping)
nmap -sn 192.168.0.0/24                    # acha hosts via ARP
nmap -Pn -F 192.168.0.1                    # scan rapido sem ping

################
NMAP - PORT SCAN
################

nmap 192.168.0.1                           # portas comuns
nmap -p- 192.168.0.1                       # todas as 65535 portas
nmap -F 192.168.0.1                        # 100 portas mais comuns
nmap -p 80,443,22,21 192.168.0.1           # portas especificas
nmap -Pn -p 8082,8083,8084,8085 192.168.0.112-115  # range de IPs

################
NMAP - IDENTIFICACAO
################

nmap -sV 192.168.0.1                       # versao dos servicos
nmap -O 192.168.0.1                        # sistema operacional
nmap -A 192.168.0.1                        # tudo: OS, versao, scripts
nmap -sV -oN resultado.txt 192.168.0.0/24  # salva resultado em arquivo

################
IP PUBLICO
################

curl ifconfig.me                # mostra seu IP publico real
curl -6 ifconfig.me             # IP publico via IPv6

################
FUNCOES NO ~/.shrc
################

# varre subnet e lista hosts com MAC e fabricante
netscan() {
    SUBNET=${1:-192.168.0.0/24}
    nmap -sn -PE --send-ip --host-timeout 10s $SUBNET
}
alias www='cd /usr/local/www/apache24/data'             #Alias para cd no diretorio web do Apache
alias ll='CLICOLOR_FORCE=1 /bin/ls -AGlhiF | less -FR'  #Alias para ls com cores e scroll
alias la='CLICOLOR_FORCE=1 /bin/ls -AGlahiF | less -FR' #O mesmo mostrando ocultos

trap 'fc -W' EXIT HUP TERM     #Salva comandos do shell sh fechando abruptamente ou usar Ctrl+D


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ FIREWALL @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Comandos do dia a dia
pfctl -sr	Ver regras ativas
pfctl -ss	Ver conexões abertas (states)
pfctl -si	Status e estatísticas gerais
pfctl -f /etc/pf.conf	Recarregar regras sem reiniciar
pfctl -nf /etc/pf.conf	Testar sintaxe sem aplicar
pfctl -d	⚠ Desativar PF imediatamente (emergência)

Gerenciar IPs bloqueados (brute force)
pfctl -t bruteforce -T show	Ver IPs bloqueados
pfctl -t bruteforce -T delete 1.2.3.4	Desbloquear um IP específico
pfctl -t bruteforce -T flush	Limpar toda a tabela


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ SHELL SH — ATALHOS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Ctrl+A       vai para o inicio da linha
Ctrl+C       interrompe o processo
Ctrl+D       EOF — encerra entrada ou sessao
Ctrl+E       vai para o fim da linha
Ctrl+G       bell — bipe do terminal (ASCII 7)
Ctrl+H       backspace (ASCII 8)
Ctrl+I       tab (ASCII 9)
Ctrl+J       linefeed
Ctrl+L       limpa a tela (igual a clear)
Ctrl+R       busca no historico — digita parte do comando
Ctrl+U       apaga a linha inteira
Ctrl+W       apaga a palavra anterior
Ctrl+Z       suspende o processo atual
Alt+.        repete o ultimo argumento do comando anterior


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NAVEGACAO @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

cd /           vai para a raiz do sistema
cd  ou  cd ~   vai para o home do usuario
cd /caminho    caminho absoluto
cd ..          sobe um nivel
cd ../..       sobe dois niveis
cd -           volta ao diretorio anterior (muito util!)
pwd            mostra o diretorio atual

#### Tab — autocompletar
#### ctrl + seta pro lado pula palavra

cd /usr/lo<Tab>       completa para /usr/local/
cd /usr/local/w<Tab>  completa para /usr/local/www/

#### Historico

history    lista os ultimos comandos digitados
!!         repete o ultimo comando
!ls        repete o ultimo comando que comecou com "ls"


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ COMANDOS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

#### cat
Le e exibe o conteudo de um arquivo.
    cat /var/log/messages              mostra o arquivo inteiro
    cat arquivo.txt | grep "erro"      filtra linhas (pode usar grep direto no arquivo)

#### chfn
Edita informacoes do usuario exibidas pelo finger.
    chfn celso
    ~/.plan e ~/.project tambem aparecem no finger

#### cp / mv
Copia ou move arquivos.
    cp arquivo.txt ../..           copia dois niveis acima
    cp arquivo.txt ../outra/       copia para pasta irma
    mv arquivo ..                  move para o diretorio pai
	mv arquivo arquivo2            renomeia arquivo ou pasta

#### crontab
Agenda tarefas recorrentes. NAO editar /var/cron/tabs/root diretamente.
    crontab -l    lista as tarefas
    crontab -e    edita

Sintaxe: minuto hora dia mes dia_semana comando
O * * * final significa "todo dia, todo mes, todo dia da semana".

    0 */8 * * *  /script.sh    a cada 8h  (0h, 8h, 16h)
    0 */12 * * * /script.sh    2x por dia (0h e 12h)
    0 */6 * * *  /script.sh    4x por dia (0h, 6h, 12h, 18h)
    0 3 * * 1    /script.sh    toda segunda-feira as 3h

Dias da semana: 0=dom 1=seg 2=ter 3=qua 4=qui 5=sex 6=sab

#### dmesg
Exibe mensagens do kernel geradas no boot.
    dmesg | less           navega com espaco/q
    dmesg > /tmp/boot.log  salva em arquivo

#### export
Define variavel de ambiente para a sessao.
    export EDITOR=ee    define ee como editor padrao (em vez do vi)
    Para persistir, adicionar ao ~/.profile:
        EDITOR=ee; export EDITOR

#### find
Busca arquivos por nome, inode, etc.
    find / -inum 5 2>/dev/null           acha arquivo pelo numero de inode
    find /home -inum 8138 -delete        apaga pelo inode (util para nomes corrompidos)

#### freebsd-update
Atualiza o sistema base do FreeBSD.
    freebsd-update fetch     baixa as atualizacoes
    freebsd-update install   instala
    reboot
    freebsd-version          confirma a versao apos reboot
    Versao atual: 14.3-RELEASE-p10

#### fsck
Verifica e repara o filesystem. Usar em Single User Mode.
    No boot: escolher Single User, pressionar Enter no prompt do shell
    fsck -fy /    verifica e corrige automaticamente

#### grep
Filtra linhas de texto por padrao.
    grep "erro" /var/log/messages      busca em arquivo
    grep -i "erro" arquivo.txt         ignora maiusculas/minusculas
    grep -r "palavra" /etc/            busca recursiva em diretorio
    grep -n "palavra" arquivo.txt      mostra numero da linha
    grep -v "palavra" arquivo.txt      mostra o que NAO tem a palavra
    grep -c "palavra" arquivo.txt      conta quantas linhas encontrou

#### htpasswd
Cria ou atualiza senha do HTTP Basic Auth do Apache.
    htpasswd -B -c /usr/local/etc/apache24/.htpasswd Protegido
    -B = bcrypt (mais seguro)    -c = cria arquivo novo

#### locate
The locate program searches a database for all pathnames which
match the specified pattern.
	locate -i ignora case

#### ls
Lista arquivos e diretorios.
    ls -la     listagem detalhada com arquivos ocultos
    ls -li     inclui numero de inode (util com find -inum)
    ls ..      lista o diretorio pai
	ll         list customizado
	la         list customizado mostra ocultos

#### mail
Le e-mails do sistema.
    mail          abre caixa de entrada (/var/mail/root)
    mail -f       le /root/mbox (e-mails ja lidos)

    Dentro do mail:
    h         lista headers
    z / z-    avanca/volta pagina de headers
    h5        vai direto ao header 5
    U5        marca mensagem 5 como nao lida

#### pkg
Gerenciador de pacotes do FreeBSD.
    pkg update              atualiza indice de pacotes
    pkg upgrade             atualiza pacotes instalados
    pkg info dynamic_motd   info de pacote ja instalado
    pkg search dynamic_motd busca no repositorio remoto

#### ps
Lista processos em execucao.
    ps aux | grep apache    verifica se o Apache esta rodando

#### smartctl
Verifica saude do disco (SMART).
    smartctl -A /dev/ada0 | grep UDMA_CRC
    Monitora erros CRC — indica problema de cabo ou energia. Contador atual: 540.

#### sockstat
Mostra todas as portas abertas e conexoes ativas.
    sockstat -4 -l    lista portas IPv4 em escuta

#### su
Muda para root no ambiente completo dele.
    su -

#### tail
Monitora o final de um arquivo em tempo real.
    tail -f -n 20 /var/log/messages          ultimas 20 linhas, atualiza ao vivo
    tail -f /var/log/messages | grep "error"   filtra so linhas com "error"

#### talk / write
Comunicacao entre usuarios logados no sistema.
    talk root     chat interativo (requer que o outro aceite)
    write root    envia mensagem diretamente no prompt do outro

#### yes
Ocupa o processador gerando carga (teste de CPU).
    yes > /dev/null    imprime "y" infinitamente e descarta — usa 100% de um core


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ PIPES @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

O pipe | passa a saida de um comando como entrada do proximo.

    grep "error" /var/log/messages           busca direta (sem cat)
    cat arquivo | grep "erro"                equivalente, mas desnecessario aqui
    tail -f /var/log/messages | grep "error" monitora log ao vivo filtrando por "error"
    ps aux | grep apache                     verifica se o Apache esta rodando


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ FIGLET @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

figlet -c -f doom "FREEBSD"    centralizado, fonte doom
Fontes recomendadas: big, doom, slant, small, smslant, standard

Loop para testar todas as fontes instaladas:
    for f in /usr/local/share/figlet/*.flf; do
        echo "=== $(basename $f .flf) ==="
        figlet -f "$f" "FREEBSD"
    done | less


@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ TAREFAS ESPECIAIS @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

#### Apagar arquivo/diretorio por inode (nome corrompido)
    ls -li /usr/local/www/apache24/data/home        descobre o inode
    find /usr/local/www/apache24/data/home -inum 8138 -delete

#### Consertar filesystem (Single User Mode)
    No boot: escolher Single User, pressionar Enter no prompt do shell
    fsck -fy /

#### Definir editor padrao permanentemente
    ee ~/.profile
    Adicionar a linha:
        EDITOR=ee; export EDITOR

#### Monitorar erros de disco
    smartctl -A /dev/ada0 | grep UDMA_CRC

© Celso Ferrarini | [email protected]   |   English     Português