Je lepší se vyhnout použití ifconfig
pro získání IP adresy ve skriptech je v některých distribucích zastaralá (např. CentOS a další, ve výchozím nastavení ji již neinstalujte).
V jiných systémech se výstup ifconfig liší podle vydání distribuce (např. výstup/mezery/pole ifconfig
se například liší od Debianu 8 až Debianu 9).
Pro získání IP adresy s ip
, podobným způsobem se ptáte:
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '
Nebo ještě lépe:
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249
Nebo, jak se ptáte "IP="
#!/bin/bash
echo -n "IP="
ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
Bezostyšné přizpůsobení nápadu od @Roman
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } '
IP=192.168.1.249
Normální výstup:
$ 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
Od man ip
:
-o, -jeden řádek
výstup každého záznamu na jeden řádek, nahrazování řádků znakem '\'. To se hodí, když chcete výstup porovnat pomocí wc(1) nebo grep(1).
Podívejte se na jeden příklad proč ifconfig
nedoporučuje se:BBB:`bbb-conf --check` zobrazující IP adresy jako `inet` - ifconfig woes
Pro pochopení proč ifconfig
je na cestě ven, viz Rozdíl mezi příkazy 'ifconfig' a 'ip'
ifconfig
je od net-tools, které dlouho nebyly schopny plně držet krok se síťovým stackem Linuxu. Stále také používá ioctl pro konfiguraci sítě, což je ošklivý a méně výkonný způsob interakce s jádrem.Kolem roku 2005 byl představen nový mechanismus pro ovládání síťového zásobníku - netlink sockets.
Konfigurace síťového rozhraní
iproute2
využívá mechanismus tohoto plně duplexního síťového soketu, zatímcoifconfig
spoléhá na systémové volání anioctl.
Awk
řešení:
ifconfig -a | awk 'NR==2{ sub(/^[^0-9]*/, "", $2); printf "IP=%s\n", $2; exit }'
Ukázkový výstup:
IP=10.0.2.15