web-dev-qa-db-ja.com

環境変数へのIPアドレスの割り当て

Eth0のIPアドレスを環境変数($ ipなど)にできるだけ簡単に割り当てるにはどうすればよいですか?

更新:DistroはUbuntu Server 12.04 LTSです。

11
user204863

より短い(そして私はよりきちんと見つける)方法はhostname -i。 ipconfig、ip、sed、awkなどの煩わしさはもうありません。

6
ott--

ip address showを使用する方法です。特に、照会しているインターフェイスがifconfigが認識できない複数のアドレスを持つ可能性がある最新のLinuxシステムでは特にそうです。

$ ip a s eth0 | awk '/inet / {print$2}'
10.13.211.83/24
192.168.17.21/16

もちろん、ネットマスクが必要ない場合は、パイプを使用して、次のようにさまざまなものにパイプします。

cut -d/ -f1

注:同じシステムで、ifconfigは以下を表示します。

$ ifconfig em1 | awk '/inet / {print $2}'
10.13.211.83
4
rsaw

こちらもチェックしてください:

ifconfig eth0 | awk '/inet /{print $2}' | cut -f2 -d':'

これはSolarisとHP-UXでも機能します(eth0の代わりに適切なnet devを使用してください)。

hostname -iコマンドについては、構成済みのインターフェース(ループバックを除く)がある場合はhostname -Iを試してください。

1
rook

これを試してください:

ip=$(
    ifconfig eth0 |
    Perl -ne 'print $1 if /inet\s.*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b/'
)
echo "$ip"
1
Gilles Quenot

定義されたインターフェイスにIPを割り当てたいので、正確な問題には答えませんが、外部IPを取得する方法(NATの背後にある場合でも)を将来の情報としてここに記載しておくと便利だと思いました。

ip=`wget -qO- ipecho.net/plain`
1
laurent

ご覧のように、 hostname -iは127.0.0.1を表示できます(NATはここ(archlinux)ではありません)、これは私たちが望むものではありません。

だから私は提案します:

dev=eth0
ip=$(
    ip a s dev $dev |
        awk '/inet /{gsub("/.*", "");print $2}'
)
echo "$ip"

または、-Pgrepのスイッチ:

ip a s dev eth0 | grep -oP 'inet\s+\K[^/]+'

私はそれが最短の解決策だと思います=)

0
Gilles Quenot