以前は、bashで次のコマンドを使用して、サーバーのメインIPを見つけました。
ipaddr=$(/sbin/ifconfig|grep inet|head -1|sed 's/\:/ /'|awk '{print $3}' | grep -v '127.0.0.1')
しかし、centos7では、ifconfigが使用できず、yum install net-tools
を使用してifconfig
をインストールしてもコマンドが機能しなくなるため、機能しなくなりました。
CentOS 7の同等のコマンドは何ですか
どうもありがとう
hostname コマンドを使用できます:
ipaddr=$(hostname -I)
-i, --ip-address
:ホストのIPアドレスを表示します。これは、ホスト名を解決できる場合にのみ機能することに注意してください。
-I, --all-ip-addresses
:ホストのすべてのネットワークアドレスを表示します。このオプションは、すべてのネットワークインターフェイスで設定されたすべてのアドレスを列挙します。ループバックインターフェイスとIPv6リンクローカルアドレスは省略されています。オプション-iとは異なり、このオプションは名前解決に依存しません。出力の順序について何も仮定しないでください。
このようなもの-@ maarten-vanlinthoutの答えのリフ
ip -f inet a show eth0| grep inet| awk '{ print $2}' | cut -d/ -f1
SERVER_IP="$(ip addr show ens160 | grep 'inet ' | cut -f2 | awk '{ print $2}')"
ens160をインターフェイス名に置き換えます
次のような簡単なコマンドを実行できます
curl ifconfig.co
curl ifconfig.me
wget -qO - icanhazip.com
実際、外部ソースを使用したくない(または使用できない)場合は、以下をお勧めします。
DEVICE=$(ls -l /sys/class/net | awk '$NF~/pci0/ { print $(NF-2); exit }')
IPADDR=$(ip -br address show dev $DEVICE | awk '{print substr($3,1,index($3,"/")-1);}')
最初の行はPCIバス上の最初のネットワークデバイスの名前を取得し、2行目はそのIPアドレスを提供します。
ところでps ... | grep ... | awk ...
は悪臭を放ちます。 awkはgrepを必要としません。
外部サーバーのIPアドレスを取得する最も信頼できる方法は、外部サービスを使用することだと思います。
ipaddr=$(curl -s http://whatismyip.akamai.com/)
少し遅れて
curl -4 icanhazip.com
サーバーのプライマリIPアドレスを返します。