È meglio evitare di utilizzare ifconfig
per ottenere un indirizzo IP in uno script che è deprecato in alcune distribuzioni (ad esempio CentOS e altri, non installarlo più per impostazione predefinita).
In altri sistemi, l'output di ifconfig varia in base al rilascio della distribuzione (ad esempio output / spaziatura / campi ifconfig
differisce da Debian 8 a Debian 9, per esempio).
Per ottenere l'indirizzo IP con ip
, in un modo simile si chiede:
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '
O meglio ancora:
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249
Oppure, quando chiedi "IP ="
#!/bin/bash
echo -n "IP="
ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
Adattando spudoratamente l'idea di @Roman
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } '
IP=192.168.1.249
Uscita normale:
$ ip -o -4 address show
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: eth0 inet 192.168.1.249/24 brd 192.168.1.255 scope global eth0\ valid_lft forever preferred_lft forever
Da man ip
:
-o, -online genera
ogni record su una singola riga, sostituendo i feed di riga con il carattere '\'. Questo è utile quando si desidera contare i record con wc (1) o grep (1) l'output.
Vedi un esempio del perché ifconfig
non è consigliato: BBB: `bbb-conf --check` mostra gli indirizzi IP come` inet` - ifconfig woes
Per capire perché ifconfig
sta uscendo, vedere Differenza tra i comandi 'ifconfig' e 'ip'
ifconfig
proviene da net-tools, che non è stato in grado di tenere il passo con lo stack di rete Linux per molto tempo. Inoltre utilizza ancora ioctl per la configurazione di rete, che è un modo brutto e meno potente di interagire con il kernel.
Intorno al 2005 è stato introdotto un nuovo meccanismo per il controllo dello stack di rete: i socket netlink.
Per configurare l'interfaccia di rete si iproute2
utilizza quel meccanismo di socket netlink full-duplex, mentre ifconfig
si basa su una chiamata di sistema ioctl.