GNU/Linux >> Znalost Linux >  >> Linux

Jak zachytit první IP adresu z příkazu ifconfig?

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ímco ifconfig 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

Linux
  1. Jak nainstalovat software z příkazového řádku Linuxu

  2. Jak zastavit příkaz Najít po prvním zápase?

  3. Jak sledovat čas z příkazového řádku?

  1. Jak mohu spustit kód PHP z příkazového řádku?

  2. Jak zachytit výstup top příkazu do souboru v linuxu?

  3. Jak spustit příkaz Vim z shellu?

  1. Jak vyvolat wi-fi rozhraní z příkazového řádku?

  2. Jak získám svou IP adresu z příkazového řádku?

  3. jak vygenerovat náhodnou MAC adresu z příkazového řádku Linuxu