GNU/Linux >> Linux の 問題 >  >> Linux

ifconfig コマンドから最初の IP アドレスをキャプチャする方法は?

ifconfig の使用は避けたほうがよいでしょう 一部のディストリビューションでは推奨されていないため、スクリプトで IP アドレスを取得します (たとえば、CentOS などでは、デフォルトでインストールしないでください)。

他のシステムでは、ifconfig の出力はディストリビューションのリリースによって異なります (例:ifconfig の出力/間隔/フィールド たとえば、Debian 8 と Debian 9 では異なります)。

ip で IP アドレスを取得する場合 、あなたが尋ねているのと同様の方法で:

ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '

またはさらに良いことに:

$ ip -o -4  address show  | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249

または、あなたが尋ねるように "IP="

#!/bin/bash
echo -n "IP="
ip -o -4  address show  | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '

@Roman からのアイデアを恥知らずに適応

$ ip -o -4  address show  | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } ' 
IP=192.168.1.249

通常の出力:

 $ 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

man ip から :

<ブロック引用>

-o、-oneline
改行を「\」文字に置き換えて、各レコードを 1 行に出力します。これは、wc(1) でレコードをカウントしたり、出力を grep(1) したい場合に便利です。

ifconfig の理由の一例をご覧ください はお勧めしません:BBB:`bbb-conf --check` で IP アドレスが `inet` として表示される - ifconfig の問題

ifconfig の理由を理解するため 「ifconfig」コマンドと「ip」コマンドの違いを参照してください

<ブロック引用>

ifconfig 長い間、Linux ネットワーク スタックに完全に追いつくことができなかった net-tools からのものです。また、ネットワーク構成には依然として ioctl を使用しますが、これはカーネルと対話する方法としては醜く、あまり強力ではありません。

2005 年頃、ネットワーク スタックを制御するための新しいメカニズムが導入されました - netlink ソケット。

ネットワーク インターフェイス iproute2 を構成するには ifconfig の間、その全二重ネットリンク ソケット メカニズムを利用します。 anioctl システムコールに依存しています。


Awk 解決策:

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

出力例:

IP=10.0.2.15

Linux
  1. コマンドラインからミュートする方法は?

  2. コマンドラインから時間を追跡する方法は?

  3. トップコマンドの出力をLinuxのファイルにキャプチャする方法は?

  1. 最初の一致後に検索コマンドを停止する方法は?

  2. Bashコマンドの最初の単語をすばやく変更するには?

  3. コマンドラインから IP アドレスを取得するにはどうすればよいですか?

  1. コマンドラインからIcewmを再起動する方法は?

  2. Grub2のコマンドからの出力に等しい変数を設定するにはどうすればよいですか?

  3. ワイルドカード*はコマンドとしてどのように解釈されますか?