ifconfig
一部のディストリビューション(CentOSなど)では廃止されているため、スクリプトでIPアドレスを取得するためにを使用することは避けた方がよいでしょう。デフォルトではインストールしないでください。
他のシステムでは、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
推奨されない理由の1つの例を参照してください:BBB:IPアドレスを「inet」として表示する「bbb-conf --check」-ifconfig woes
なぜそうなっているか理解するにifconfig
は、「ifconfig」コマンドと「ip」コマンドの違いをご覧ください。
ifconfig
長い間Linuxネットワークスタックに完全に追いつくことができなかったnet-toolsからのものです。また、ネットワーク構成にioctlを引き続き使用します。これは、カーネルと対話するための醜くて強力ではない方法です。
2005年頃、ネットワークスタックを制御するための新しいメカニズムであるnetlinkソケットが導入されました。
ネットワークインターフェースを構成するには、ioctlシステムコールに依存しiproute2
ながら、その全二重のnetlinkソケットメカニズムをifconfig
利用します。