web-dev-qa-db-ja.com

コマンドラインでネットワークインターフェイス名とMACアドレスを取得する

コマンドを実行すると

ip link | awk '{print $2}'

ubuntu 18.04では、次の出力が得られます。

lo:
00:00:00:00:00:00
wlp1s0:
2c:6e:85:bf:01:00
enp2s0:
14:18:77:a3:01:02

このようにフォーマットしたい(loなし)

wlp1s0: 2c:6e:85:bf:01:00
enp2s0: 14:18:77:a3:01:02

どうすればよいですか?

3
ajcg

Ubuntuを使用している場合は、/sys/class/net/<dev>/addressからMACアドレスを取得できます。

$ cat /sys/class/net/enp0s3/address
08:00:27:15:dc:fd

だから、次のようなもの:

find /sys/class/net -mindepth 1 -maxdepth 1 ! -name lo -printf "%P: " -execdir cat {}/address \;

くれます:

enp0s3: 08:00:27:15:dc:fd
docker0: 02:42:61:cb:85:33

または、ipの1行モードを使用すると、スクリプト作成に便利です。

$ ip -o link | awk '$2 != "lo:" {print $2, $(NF-2)}'
enp0s3: 08:00:27:15:dc:fd
docker0: 02:42:61:cb:85:33
7
muru

IPリンクの使用

ip -o link | grep ether | awk '{ print $2" : "$17 }'
  • どこ -oは、すべてのインターフェースのオンライン結果を提供します。
  • grep etherは、イーサネットアドレスが割り当てられているインターフェースのみを除外します。
  • そしてawkは、コロンを挟んで行の2番目と17番目の列を出力するだけです。

OR

ip -br link | grep -v LOOPBACK | awk '{ print $1 " : " $3 }'

どこ

  • -brは、インターフェイスのbrief情報を提供します。
  • grep -v LOOPBACKは、LOOPBACKインターフェイスにのみ存在するWord loを無視します。
  • そしてawkは最初と3番目の列を出力します。

Ifconfigの使用

ifconfig | grep HW | awk '{ print $1" : "$5 }'

どこ grep HWは、ハードウェアアドレスが割り当てられているインターフェースのみを除外します。

ハック

grep HWまたはgrep etherは実際にはloを無視します。

HWアドレスがない が割り当てられているループバックインターフェイス。

2
C0deDaedalus

[素早い回答]:

インターフェイス名を知らなくてもMACアドレスを取得する方法:

cat /sys/class/net/$(ip route show default | awk '/default/ {print $5}')/address

次のコマンドは、インターフェース名を返します。

ip route show default | awk '/default/ {print $5}'
1
Benyamin Jafari

私は醜いハックなワンライナーを作りました:

 ip link | awk -F' ' '{print $2 $17}' | paste -d " "  - - | grep -v lo:

スペースを区切り文字として使用してフィールドを数えると、2番目と17番目に必要なフィールドが表示されます。

しかし、それらは上下に印刷され、ペーストは隣接する行を列として配置します。隣接する行を並べて配置するという貼り付けの修正。 lo行が表示されないようにする賢い方法が見つからなかったので、grepで印刷する前に除外しました

ここでのテスト:

ip link | awk -F' ' '{print $2 $17}' | paste -d " "  - - | grep -v lo:
enp2s0: 50:9a:4c:b5:af:ea
wlp3s0: e8:9e:b4:66:e3:ea
1
vfbsilva

引数なしxargsは、すべての改行、タブ、および複数のスペースを1つのスペースに置き換えます。 -n 2を追加することで、1行おきにその行をスライスします。そう:

ip link | awk '{print $2}' | xargs -n 2
0
Petras L