Краще уникати використання ifconfig
для отримання IP-адреси в скриптах, вона застаріла в деяких дистрибутивах (наприклад, CentOS та інші, більше не встановлюйте її за замовчуванням).
В інших системах вихід ifconfig змінюється залежно від випуску дистрибутива (наприклад, вихід / інтервал / поля ifconfig
відрізняються від Debian 8 до Debian 9, наприклад).
Для отримання IP-адреси ip
аналогічним чином ви запитуєте:
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '
Або ще краще:
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249
Або, як ви запитаєте "IP ="
#!/bin/bash
echo -n "IP="
ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
Безсоромно адаптуючи ідею від @Roman
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } '
IP=192.168.1.249
Нормальний вихід:
$ ip -o -4 address show
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: eth0 inet 192.168.1.249/24 brd 192.168.1.255 scope global eth0\ valid_lft forever preferred_lft forever
Від man ip
:
-o, -одне
виведення кожного запису в одному рядку, замінюючи канали рядків символом '\'. Це зручно, коли ви хочете порахувати записи з wc (1) або зібрати (1) вихід.
Перегляньте один приклад того, чому ifconfig
не рекомендується: BBB: `bbb-conf - галочка`, що показує IP-адреси як` inet` - ifconfig woes
Щоб зрозуміти, чому ifconfig
саме на вихід, див. Відмінність між командами 'ifconfig' та 'ip'
ifconfig
- це мережеві інструменти, які давно не змогли повністю не відставати від мережевого стеку Linux. Він також все ще використовує ioctl для конфігурації мережі, що є некрасивим і менш потужним способом взаємодії з ядром.
Приблизно у 2005 році був введений новий механізм управління мережевим стеком - мережеві сокети.
Для налаштування мережевого інтерфейсу iproute2
використовується цей повнодуплексний механізм роз'єму мережі, при цьому ifconfig
покладається на системний виклик ioctl.