GNU/Linux >> Linux Esercitazione >  >> Linux

Come acquisire il primo indirizzo IP da un comando ifconfig?

È meglio evitare di usare ifconfig per ottenere un indirizzo IP in uno script poiché è deprecato in alcune distribuzioni (ad esempio CentOS e altri, non installarlo più per impostazione predefinita).

In altri sistemi, l'output di ifconfig varia a seconda del rilascio della distribuzione (ad esempio l'output/spaziatura/campi di ifconfig differisce da Debian 8 a Debian 9, per esempio).

Per ottenere l'indirizzo IP con ip , in modo simile stai chiedendo:

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, come 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, -una riga
emette ogni record su una singola riga, sostituendo i line feed con il carattere '\'. Questo è comodo quando vuoi contare i record con wc(1) o grep(1) l'output.

Guarda un esempio del perché ifconfig non è consigliato:BBB:`bbb-conf --check` che mostra gli indirizzi IP come `inet` - ifconfig guai

Per capire perché ifconfig sta per uscire, vedi 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. Utilizza ancora ioctl anche 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 iproute2 fa uso di quel meccanismo di socket netlink full-duplex, mentre ifconfig si basa sulla chiamata di sistema anioctl.


Awk soluzione:

ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'

Esempio di output:

IP=10.0.2.15

Linux
  1. Come tenere traccia del tempo dalla riga di comando?

  2. Come faccio a inviare e-mail dalla riga di comando?

  3. Come posso eseguire il codice PHP dalla riga di comando?

  4. Come acquisire l'output di un comando top in un file in Linux?

  5. Come eseguire il comando Vim dalla shell?

Come cercare file dal Terminale su Linux

Come scoprire l'indirizzo IP pubblico dalla riga di comando su Linux

Come riavviare Ubuntu dal terminale

Come cambiare rapidamente la prima parola in un comando Bash?

Come visualizzare un'interfaccia Wi-Fi da una riga di comando?

Come ottengo il mio indirizzo IP dalla riga di comando?