Comandos Essenciais de Rede no Linux
Comandos de rede Linux para interfaces, rotas, DNS, portas e diagnóstico com ip, ss, dig, ping, traceroute e tcpdump.
No Linux moderno, os comandos essenciais de rede vêm do conjunto iproute2: ip inspeciona interfaces e rotas, ss lista sockets e portas em escuta, e ip neigh lê o cache ARP.
Se você já acessou um container recém-criado via shell, digitou ifconfig por puro hábito e recebeu de volta command not found, é por isso. A memória muscular sobreviveu aos binários por uma boa década.
Eles substituem os antigos binários do net-tools (ifconfig, route, netstat, arp), que a Red Hat lista entre os comandos que você deveria parar de usar e que muitas vezes nem estão instalados nas distribuições atuais. Esta referência agrupa os comandos pela tarefa que você está executando (verificar interfaces, roteamento, conectividade, DNS, portas e tráfego) e encerra com um fluxo de troubleshooting do sintoma ao comando que você pode seguir de ponta a ponta.
Principais Conclusões
- No Linux moderno,
sssubstituinetstat,ip addrsubstituiifconfig,ip routesubstituirouteeip neighsubstituiarp. Todos os quatro fazem parte do conjunto iproute2, que já vem instalado por padrão. - Para descobrir o que está ocupando uma porta, execute
ss -tulnp | grep :8080; a flag-pexibe o PID e o nome do processo dono do socket. ssé mais rápido quenetstatporque consulta o kernel diretamente via netlink, em vez de fazer o parsing de arquivos de texto em/proc/net.- Sempre limite o
pingcom uma contagem (ping -c 5 example.com), para que ele envie cinco pacotes e encerre, em vez de rodar indefinidamente. - Para distinguir uma falha de DNS de um resolvedor local quebrado, consulte um resolvedor público diretamente:
dig +short example.com @8.8.8.8.
O que substituiu ifconfig, netstat e route no Linux?
Discover how at OpenReplay.com.
O net-tools é tratado como obsoleto desde o início dos anos 2000, com o iproute2 como substituto em desenvolvimento ativo. O pacote net-tools-deprecated do openSUSE documenta o mapeamento canônico de um para um:
| Legado (net-tools) | Moderno (iproute2) | Função |
|---|---|---|
ifconfig | ip addr, ip link | Interfaces e endereços |
route | ip route | Tabela de roteamento |
netstat | ss | Sockets e portas |
arp | ip neigh | Cache ARP/de vizinhança |
Prefira a forma do iproute2. Em um container mínimo ou servidor recém-provisionado, os binários legados podem não existir, então scripts que chamam ifconfig ou netstat quebram com command not found.
Interfaces e endereços
ip addr (ou o alias ip a) mostra cada interface e seus endereços IPv4/IPv6 atribuídos, o equivalente moderno do ifconfig. Use ip link para ativar ou desativar uma interface, e hostname -I para exibir apenas os endereços IP da máquina.
ip addr # all interfaces + addresses (alias: ip a)
ip addr show eth0 # one interface only
sudo ip link set eth0 down # take an interface offline
sudo ip link set eth0 up # bring it back online
hostname -I # print all IP addresses, space-separated
Um único binário, ip, cobre endereços, interfaces, roteamento e túneis. hostname -I é a forma mais rápida de obter um endereço para um script sem precisar fazer o parsing da saída de ip addr.
Roteamento
ip route exibe e edita a tabela de roteamento do kernel, substituindo o comando legado route. Execute-o sem argumentos para ver para onde o tráfego vai e qual gateway é o padrão.
ip route # view the routing table
ip route get 1.1.1.1 # show which route a destination uses
sudo ip route add 10.0.0.0/24 via 192.168.1.1 # add a static route
ip route get é a maneira rápida de responder “qual interface e gateway este destino vai usar?”. Isso ajuda quando um host está acessível a partir de uma rede, mas não de outra.
Conectividade e caminho
ping testa se um host responde; traceroute e mtr mostram por onde os pacotes trafegam e onde eles morrem. Sempre limite o ping com uma contagem: ping -c 5 example.com envia cinco pacotes e encerra, em vez de rodar indefinidamente.
ping -c 5 example.com # send 5 ICMP echoes, then stop
traceroute example.com # trace the hop-by-hop path
sudo traceroute -T -p 443 example.com # trace using TCP to port 443
mtr example.com # live ping + traceroute in one view
Deixado por conta própria, o traceroute desiste após 30 saltos e dimensiona cada sonda em 60 bytes no IPv4 e 80 bytes no IPv6. Adicionar -T troca as sondas UDP padrão por sondas TCP, que atravessam firewalls que descartam as padrão. mtr example.com combina ping e traceroute em uma única visão ao vivo, permitindo acompanhar a perda de pacotes por salto atualizando em tempo real. Observe que traceroute e mtr frequentemente não vêm pré-instalados: adicione-os com sudo apt install mtr traceroute (Debian/Ubuntu) ou sudo dnf install mtr traceroute (RHEL/Fedora).
Consultas DNS
dig é a ferramenta principal para consultas DNS; +short reduz a saída à resposta, -x faz uma consulta reversa e @servidor direciona a consulta a um resolvedor específico. nslookup e host cobrem o mesmo terreno de forma mais concisa.
dig +short example.com # just the resolved A record(s)
dig -x 8.8.8.8 # reverse lookup: IP -> hostname
dig +short example.com @8.8.8.8 # query Google's public resolver directly
host example.com # terse forward/reverse lookup
nslookup example.com # interactive-capable lookup
Consultar um resolvedor explicitamente é o passo-chave de isolamento: para diferenciar uma falha de DNS de um resolvedor local defeituoso, execute dig +short example.com @8.8.8.8; se isso resolver, mas o seu resolvedor padrão não, o problema é o seu resolvedor, não o domínio.
Como descobrir o que está usando uma porta no Linux?
Para descobrir qual processo está ocupando uma porta, execute ss -tulnp | grep :8080. A flag -p exibe o PID e o nome do processo dono do socket. Essa é a solução para o erro “port already in use” quando um servidor ou container não consegue fazer o bind.
ss -tlnp # all listening TCP sockets + owning process
ss -tulnp | grep :8080 # what's bound to port 8080 (TCP + UDP)
As flags se leem como t=TCP, u=UDP, l=listening (em escuta), n=numeric (sem resolução de nomes), p=process. Ver o nome do processo de sockets que não pertencem a você exige root, então prefixe com sudo. ss é o substituto moderno do netstat, e a própria página de manual do netstat chama o comando de majoritariamente obsoleto e encaminha você ao ss, baseado em netlink, quando um servidor movimentado tem muitos sockets para listar. É daí que vem a diferença de velocidade: o ss consulta o kernel via netlink, enquanto o netstat lê arquivos de texto em /proc/net. Uma vez com o PID em mãos, encerre o processo com kill <pid>.
Tráfego e transferência
tcpdump captura pacotes ao vivo, enquanto curl, wget e nc testam acessibilidade e transferem arquivos. Use tcpdump para ver exatamente o que está passando pelo fio quando ferramentas de mais alto nível não dão resposta.
sudo tcpdump -i eth0 port 80 # capture HTTP traffic on eth0
curl -v https://example.com # verbose HTTP request, headers and TLS
wget -O out.html https://example.com # download to a file
nc -zv example.com 443 # check if a port is open (no data sent)
Capturar pacotes de uma interface com o tcpdump exige privilégios elevados, o que na prática significa executá-lo sob sudo (ou conceder ao binário a capability CAP_NET_RAW). nc -zv host porta é a verificação de porta em uma linha mais rápida: -z faz a varredura sem enviar dados, -v reporta o resultado. No Docker Desktop, host.docker.internal resolve por conta própria, então nc -zv host.docker.internal 8080 alcança o host de dentro de um container. No Docker Engine para Linux, você precisa mapeá-lo manualmente, iniciando o container com --add-host=host.docker.internal:host-gateway (suportado desde o Docker Engine 20.10).
Fluxo de troubleshooting: do sintoma ao comando
Associe o sintoma a um caminho de decisão e trabalhe partindo da sua máquina para fora.
- Host inacessível →
ping -c 5 hostpara testar a acessibilidade, depoistraceroute hostoumtr hostpara descobrir onde os pacotes morrem, e entãoip routepara confirmar que você tem uma rota e um gateway válidos. - “Port already in use” →
ss -tulnp | grep :<porta>para encontrar o PID dono do socket, depoiskill <pid>ou faça o bind em outra porta. - DNS falhando →
dig +short example.comcontra o seu resolvedor, depoisdig +short example.com @8.8.8.8contra um público; se apenas a consulta pública resolver, a culpa é do seu resolvedor local. - Link lento ou saturado →
sudo iftopoubmonpara ver a largura de banda por conexão em tempo real (instale comsudo apt install iftop bmon).
Cada comando nessas cadeias confirma ou elimina uma camada (link, rota, resolução de nomes, socket), de modo que você restringe a falha em vez de adivinhar.
Recorra primeiro às ferramentas do iproute2 (ip, ss, ip neigh), use o net-tools como alternativa apenas em sistemas que ainda o incluem, e siga os caminhos do sintoma ao comando descritos acima na próxima vez que um bind falhar ou um host ficar mudo.
Perguntas Frequentes
Qual é a diferença entre ss e netstat, e eles são intercambiáveis?
Eles não são intercambiáveis. O ss é o substituto moderno, e a própria página de manual do netstat descreve o comando como majoritariamente obsoleto e aponta para o ss em seu lugar. O ss solicita os dados de socket ao kernel via netlink, enquanto o netstat lê arquivos de texto em /proc/net, e é por isso que o ss se sai melhor em servidores com muitos sockets. Ambos listam conexões e portas em escuta, mas scripts devem chamar o ss, porque o netstat pode não estar instalado.
Como encontro e encerro o processo que está usando uma porta específica no Linux?
Execute ss -tulnp | grep :8080 para encontrar o socket vinculado a essa porta; a flag -p exibe o PID e o nome do processo dono. Ver nomes de processos de sockets que não pertencem a você exige root, então prefixe com sudo. Uma vez com o PID em mãos, encerre-o com kill seguido do PID. Isso resolve o erro 'port already in use' quando um servidor ou container não consegue fazer o bind.
Por que o ifconfig retorna command not found no meu servidor?
Porque o ifconfig pertence ao pacote net-tools, que muitas distribuições modernas não instalam mais por padrão. A Red Hat lista ifconfig e route entre os comandos que o iproute2 substitui, o RHEL deixou o net-tools de fora da instalação padrão desde a versão 7, e o Debian fez o mesmo desde o Debian 9. Use ip addr no lugar para ver interfaces e endereços, ou instale o net-tools manualmente se algum script legado exigir o binário antigo.
Como saber se um problema de DNS é do domínio ou do meu resolvedor local?
Consulte um resolvedor público diretamente com dig +short example.com @8.8.8.8 e compare com dig +short example.com usando o seu resolvedor padrão. Se a consulta pública resolver mas a padrão não, a falha é do seu resolvedor local, não do domínio. A sintaxe @servidor força o dig a ignorar o resolvedor configurado, isolando a falha em um dos lados sem alterar nenhuma configuração do sistema.
Por que o traceroute ou o mtr não estão instalados no meu sistema?
traceroute, mtr, whois, nmap e iftop frequentemente não são incluídos em instalações mínimas ou padrão, por isso retornam command not found. Instale-os com sudo apt install mtr traceroute no Debian e no Ubuntu, ou sudo dnf install mtr traceroute no RHEL e no Fedora. Diferentemente do ip e do ss, que já vêm com o iproute2 por padrão, essas ferramentas de rastreamento de caminho e varredura normalmente precisam ser adicionadas pelo gerenciador de pacotes.