3

たとえば、Ubuntu lxc-start-ephemeralbashスクリプトは、起動されているコンテナーのIPアドレスを検出するために次のことを行います。

# Grab all the public globally routed IPv4 and IPv6 addresses
(sudo ip netns exec $NAME ip -4 addr show scope global && \
 sudo ip netns exec $NAME ip -6 addr show scope global) | grep inet | while read line; do
    ip=$(echo $line | awk '{print $2}' | cut -d '/' -f1)
    echo "$ip"
done

個人的には、このアプローチは文字列や出力をいじくり回す必要があるため、あまり好きではありません。同じ情報にアクセスするためのプログラムAPIはありますか(必ずしもbashである必要はありません)、それとも、のようなツールに常にシェルアウトしip、同じツールの他のバージョンで解析が壊れないことを期待する「正しい方法」ですか?

4

3 に答える 3

2

/sys(sysfs)も考慮してください。/sys/class/net/<device name>/...

于 2015-01-07T13:02:42.897 に答える
1

シェル スクリプトでは、テキストを解析してデータにアクセスする傾向があります。これは主に、シェル コードが実際に操作できるのは文字列のみであるためですが、テキストはバイナリ表現よりも移植性が高いためです。

ただし、原則として UI コマンドと API コマンドがあり、シェル スクリプトは前者ではなく後者を使用する必要があります。たとえば、出力statを解析しようとする代わりに呼び出す必要がありls -lます。または/proc、必要な情報を含むファイルが存在する可能性があるため、コマンドをまったく実行する必要はありませんが、そのファイル内のデータはテキスト形式のままです。

つまり、シェル スクリプトを作成するときは、基本的にすべてのテキストを解析するのに行き詰まります。

于 2013-02-20T02:34:58.367 に答える
0

proc ファイルシステムを使用する

IP アドレスを解析する別の方法が必要な場合は、/proc/net/arp直接解析できます。必要なデータを解析する必要がありますが、データの形式は、Linux カーネルによって proc ファイルシステムが変更された場合にのみ変更する必要があります。それはほとんどの目的で十分に安定しているようです、IMHO。

于 2013-02-20T00:31:58.937 に答える