ip -4 addr show eth0 | grep -oP "(?<=inet ).*(?=/)"
IP アドレスを取得するには:
echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`
これにより、eth0 の IP アドレスが得られます。
編集:Ubuntu の最近のバージョンではインターフェイスの名前が変更されたため、これは機能しなくなりました。代わりに、これを使用できます:
hostname --all-ip-addresses
または hostname -I
、同じことを行います (ホストのすべての IP アドレスを提供します)。
目的が IP アドレスを見つけることである場合 インターネットの方向に接続されている場合、これは適切なソリューションです。
編集 2021:「sed」および「grep」バージョンと新しい「awk」バージョンを追加 (一部は gnu)
インターネットに接続されている IP adder を見つけるには、ip route
を使用できます。 指図。 Linux の新しいバージョンでは、次のような典型的な出力でより多くの情報を得ることができます:
ip route get 8.8.8.8
8.8.8.8 via 10.36.15.1 dev ens160 src 10.36.15.150 uid 1002
cache
IP を取得するには src の後に IP を見つける必要があります 、awk を使用 、セド または grep
ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}'
ip route get 8.8.8.8 | awk 'match($0,/src (\S*)/,a)&&$0=a[1]'
ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/src/)$0=$(i+1)}NR==1'
ip route get 8.8.8.8 | sed -E 's/.*src (\S+) .*/\1/;t;d'
ip route get 8.8.8.8 | sed 's/.*src \([^ ]*\).*/\1/;t;d'
ip route get 8.8.8.8 | sed -nE '1{s/.*?src (\S+) .*/\1/;p}'
ip route get 8.8.8.8 | grep -oP 'src \K[^ ]+'
10.36.15.150
インターフェースが気に入ったら awk を使用した名前 、セド または grep
ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}'
ip route get 8.8.8.8 | awk 'match($0,/dev (\S*)/,a)&&$0=a[1]'
ip route get 8.8.8.8 | awk '{for(i=1;i<=NF;i++)if($i~/dev/)$0=$(i+1)}NR==1'
ip route get 8.8.8.8 | sed -E 's/.*?dev (\S+) .*/\1/;t;d'
ip route get 8.8.8.8 | sed 's/.*dev \([^ ]*\).*/\1/;t;d'
ip route get 8.8.8.8 | sed -nE '1{s/.*?dev (\S+) .*/\1/;p}'
ip route get 8.8.8.8 | grep -oP 'dev \K[^ ]+'
ens192
ip route
8.8.8.8
に到達するために必要なルートを表示するだけです。 . 8.8.8.8
は Google の DNS です。
これを変数に保存したい場合は、次のようにします:
my_ip=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}')
my_interface=$(ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}')
他のソリューションが失敗する理由:
ifconfig eth0
- お使いのインターフェースに別の名前がある場合 (eno1、wifi、venet0 など)
- インターフェースが複数ある場合
- IP 接続方向が、複数の IF のリストの最初ではない
Hostname -I
- 127.0.1.1 のみ取得可能
- すべてのシステムで機能するわけではありません。
- インターネットに接続されている IP だけでなく、すべての IP を提供します。 -I, --all-ip-addresses ホストのすべてのアドレス
IP のスペース区切りのリストを取得する場合は、hostname
を使用できます --all-ip-addresses
を使用したコマンド (短い -I
) フラグ
hostname -I
ここで説明されているように:IPアドレスをbash変数に入れる.もっと良い方法はありますか?