распечатайте IP-адрес с именем интерфейса

[112069] Вы можете использовать pstree, чтобы получить представление обо всем процессе вместе с родителями. В следующем примере я получу родительский процесс импульсной студии, у которой PID 1913:В вашем случае я бы использовал pgrep plus pstree, например: Обратите внимание, что если родитель скрипта был убит, то высока вероятность того, что его родитель будет init. В таком случае, вам понадобится более агрессивный способ получить родительский процесс.[112074].
1
02.02.2015, 16:01
5 ответов

Следующее будет делать то, что вы хотите:

$ ip addr | awk '
/^[0-9]+:/ { 
  sub(/:/,"",$2); iface=$2 } 
/^[[:space:]]*inet / { 
  split($2, a, "/")
  print iface" : "a[1] 
}'
lo : 127.0.0.1
br0 : 10.1.10.12
7
27.01.2020, 23:11

Это работает для меня:

for IF in $(ip link show | awk -F: '$1>0 {print $2}')
do
  echo -n "$IF : "
  ip addr show dev "$IF" | awk '$1=="inet"{print gensub("/.*","","",$2)}' | xargs
done

Вы можете запустить все это на одну строку, если вы предпочитаете, но я думал, что это будет незначительно проще понимать как петлю.

IP-ссылка обеспечивает список интерфейсов. IP-адрес IP-адрес SEV «$, если» обеспечивает список IP-адресов, связанных с именованным интерфейсом. awk разбивается IP-адрес для каждой строки, которая начинается с INET .

Это не совпадает INET6 , и поэтому не даст вам адресов IPv6. Однако, если вы хотите включить их, вы можете изменить $ 1 == «Inet» , чтобы в $ 1 ~ / ^ inet / .

1
27.01.2020, 23:11

Введите это ниже, чтобы отобразить список всех интерфейсов, которые имеют ips-

ip r show|grep " src "|cut -d " " -f 3,12

Выход:

tun0 10.0.0.1
eth0 10.0.0.2
enp1 10.0.0.3

Имейте в виду, что -он не будет захватывать интерфейсы, которым не назначены IP-адреса.

0
27.01.2020, 23:11

Попробуйте это:

ip -o a show | cut -d ' ' -f 2,7

lo 127.0.0.1/8

lo ::1/128

enp0s31f6 10.35.4.166/23

enp0s31f6 2620:52:0:2304:367:c01c:fe74:22ed/64

enp0s31f6 fe80::9a54:7adb:839e:fdb6/64

wlp58s0 10.201.132.132/22

wlp58s0 fe80::fa34:41ff:feb3:a06/64

virbr0 192.168.122.1/24

docker0 172.17.0.1/16

2
27.01.2020, 23:11

Только для адресов IPv4 используйте

ip -o addr | awk '{split($4, a, "/"); print $2" : "a[1]}' | grep -v '::'

Я придумал это, потому что принятый ответ неудобно вставлять в файл.bashrc в качестве псевдонима.

Вводить такую ​​длинную команду каждый раз утомительно.

поэтому я создал псевдоним в своем файле bashrc

sudo nano ~/.bashrc

добавить эту строку в конец файла

alias myip="ip -o addr | awk '{split(\$4, a, \"/\"); print \$2\" : \"a[1]}' | grep -v '::'"

Сохранить с помощью Ctrl+O, затем выйти с помощью Ctrl+X

source ~/.bashrc

вам может понадобиться префикс sudo для вышеуказанной команды

теперь вы можете просто дать команду "myip" в терминале, как показано ниже

enter image description here

1
11.04.2020, 04:32

Теги

Похожие вопросы