GNU/Linux >> Znalost Linux >  >> Linux

zkontrolujte, zda je rozhraní eth0 aktivní (nakonfigurováno)

Můžete to udělat mnoha způsoby. Zde příklad:

$ cat /sys/class/net/eth0/operstate
up

ip a show ethX up

Pokud se nic nezobrazí, vaše rozhraní nefunguje


ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing 

Takže tady máme grep všudypřítomné ip stdout nástroje pro řádek, který obsahuje jak naše rozhraní, které nás zajímá, tak frázi "stav UP" (děkujeme @Lekenstein za upozornění na potřebu trochu více specifičnosti než jen UP ). Použijeme argument a jako krátký formulář pro address a to by mělo stačit k získání seznamu všech nakonfigurovaných síťových karet v systému.

Jedna výhoda použití ip mohlo by to být tak, že by to opravdu mělo být dostupné všude – tak například běžně konfiguruji síťová zařízení svého telefonu Android.

:colons se používají k zamezení částečné shody – tímto způsobem garantujeme shodu pro eth0 na rozdíl od jinak možného someothereth0 nebo eth007 .

Děkuji @RaphaelAhrens za to, že mě popostrčil ke správnosti a vysvětlil mé řešení.

UPRAVIT:

Chcete-li zvládnout současné požadavky, můžete:

ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'

Výše uvedené vytiskne IP adresu CIDR, pouze pokud je váš cíl $if je UP, zapojený a má jeden. Pro ipv6 je řešení stejně jednoduché jen s drobnými úpravami.

Pokud se vám nelíbí sed podobných výsledků byste mohli dosáhnout s jiným |pipe ... grep a přidání -A kontextová možnost na první grep - ale líbí se mi sed .


Linux
  1. Linux – Proč se ethernetové rozhraní nazývá Enp0s10 namísto Eth0?

  2. Grep -v Neočekávané chování?

  3. Jak grep \nv souboru

  1. Nakonfigurovat server DNS podle rozhraní nic (eth0 / eth1)?

  2. Proč se mé ethernetové rozhraní nazývá enp0s10 místo eth0?

  3. Zkontrolujte počet aktivních připojení na portu 80?

  1. Řez / Grep A Df -h?

  2. Grep And Tail -f?

  3. Jak mohu grep rekurzivně?