Следующее будет делать то, что вы хотите:
$ 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
Это работает для меня:
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 /
.
Введите это ниже, чтобы отобразить список всех интерфейсов, которые имеют 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-адреса.
Попробуйте это:
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
Только для адресов 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" в терминале, как показано ниже