ip ed ss strumenti del futuro: dimenticate ifconfig e netstat

by Marco Bonfiglio on

Un amministratore di sistema si affida ad una serie di strumenti, spesso specifici del sistema operativo su cui sta operando, per poter raccogliere informazioni sullo stato della macchina o impostarne alcuni parametri. Per la gestione della connettività di rete, tra quei strumenti usuali per linux, i comandi ifconfig e netstat sono stati per decenni fondamentali, ma esistono delle alternative: ss può sostituire egregiamente netsat, ed è capace di fare pure di più, mentre ip può sostituire ifconfig (e infatti in molte distribuzioni già lo fa).

Chris Siebenmann, sviluppatore di lunga data in ambito Unix/Linux (nonché creatore degli rpmtools, per citarne uno), si spinge oltre, argomentando che la scelta non può più essere basata solo su gusti personali, ma è dettata anche da questioni tecniche.

Su ssnetstat, il cui compito è visualizzare lo stato delle connessioni del sistema, e per cui abbiamo già dato un confronto delle informazioni fornite, il problema è nel metodo di recupero delle informazioni: netstat legge i file presenti sotto /proc, il mountpoint in cui il kernel espone le sue informazioni, mentre ss utilizza chiamate dirette al kernel, risultando molto più efficiente. Chris stesso ammette che su sistemi casalinghi la differenza fattuale può essere trascurabile, ma in ambiti di alto carico l’effetto è notevole.

Per ifconfig ed ip il problema può diventare evidente subito; entrambi questi programmi si occupano di gestire un’interfaccia di rete, indirizzo IP compreso. Può capitare di dover assegnare più indirizzi IP alla stessa interfaccia fisica, operazione che normalmente avviene tramite alias: invece di associare l’IP all’interfaccia stessa, si crea un’etichetta e lo si associa a quest’ultima. Però, questa tecnica, non è necessaria, tanto che ip è in grado di associare più indirizzi IP alla stessa interfaccia. ifconfig, aspettandosi il metodo classico, semplicemente si perde delle informazioni. Chris stesso ci fornisce l’esempio:

ifconfig -a
[...]
em0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 128.100.3.XX netmask 255.255.255.0 broadcast 128.100.3.255
inet6 fe80::6245:cbff:fea0:e8dd prefixlen 64 scopeid 0x20<link>
ether 60:45:cb:a0:e8:dd txqueuelen 1000 (Ethernet)
[...]
ip -4 addr show em0
[...]
  inet 128.100.3.XX/24 brd 128.100.3.255 scope global em0
    valid_lft forever preferred_lft forever
  inet 128.100.3.YY/24 brd 128.100.3.255 scope global secondary em0
    valid_lft forever preferred_lft forever

Come si vede, l’indirizzo 128.100.3.YY semplicemente non compare con il primo comando.

Sembra quindi che il sistemista moderno debba adeguarsi, imparando i nuovi comandi e dimenticando i vecchi. Magari non proprio subito… e no, stavolta non abbiamo detto systemd!

Leggi il contenuto originale su Mia mamma usa Linux!

Written by: Marco Bonfiglio