BASH. Как узнать IP адрес сетевого интерфейса?

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Hemp
Сообщения: 17
ОС: Debian

BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение Hemp »

Собственно, необходимо занести в переменную IP адрес сетевого интерфейса eth0, который выдаётся динамически.
Как это можно реализовать?
Языком сценариев Bash, практически не владею (на уровне echo"Hello"), но вижу, это примерно, так:
1. Копирую в файл вывод команды ifconfig eth0
2. В цикле, посимвольно перебираю этот временный файл.
3. Найдя, строчку "inet addr:", отсчитываю 15 символов (XXX.XXX.XXX.XXX), которые составляют сам IP адрес
4. Заношу, эти 15 символов, в переменную.
5. Удаляю, временный файл.

Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение Nazyvaemykh »

IP=$(ifconfig eth0| sed -n '2 {s/^.*inet addr:\([0-9.]*\) .*/\1/;p}')
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение rm_ »

1. Копирую в файл вывод команды ifconfig eth0
2. В цикле, посимвольно перебираю этот временный файл.
3. Найдя, строчку "inet addr:", отсчитываю 15 символов (XXX.XXX.XXX.XXX), которые составляют сам IP адрес
4. Заношу, эти 15 символов, в переменную.
5. Удаляю, временный файл.

Кошмар какой, срочно читать любую книжку по скриптингу, или даже статью, вот например:
http://www.ibm.com/developerworks/library/l-bash.html
http://www.ibm.com/developerworks/library/l-bash2.html
http://www.ibm.com/developerworks/library/l-bash3.html

Правильный способ выше уже сказали, а если чуть менее страшно выглядящий и без sed'а, то вот:

Код: Выделить всё

IP=`ifconfig eth0 | grep "inet addr" | head -n 1 | cut -d : -f 2 | cut -d " " -f 1`


А с использованием ip вместо ifconfig, будет работать даже не из под рута:

Код: Выделить всё

IP=`ip addr list eth0 | grep "  inet " | head -n 1 | cut -d " " -f 6 | cut -d / -f 1`
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение Luinnar »

Ну вот как-то так:

Код: Выделить всё

ifconfig eth0 | sed -n '/inet addr:/s/^[^:]*:\([0-9\.]*\).*/\1/gp'


PS: уже опередили:)
Спасибо сказали:
Аватара пользователя
Goodvin
Ведущий рубрики
Сообщения: 4333
Статус: ⚝⚠⚒⚑⚖☭☞☣☤&

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение Goodvin »

Hemp писал(а):
03.06.2010 11:35
1. Копирую в файл вывод команды ifconfig eth0

Настоятельно рекомендую вместо устаревшего замшелого ifconfig использовать более современный инструмент ip

Например, вместо

Код: Выделить всё

ifconfig eth0
попробуйте

Код: Выделить всё

 ip a s eth0


Само собой, способ "вырезания" адреса немного изменится:

Код: Выделить всё

IP=`ip a s eth0 | grep "inet" | cut -d "/" -f 1 | cut -c 10-`
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение t.t »

rm_ писал(а):
03.06.2010 11:45
А с использованием ip вместо ifconfig, будет работать даже не из под рута:
Для вывода информации об интерфейсах ifconfig-у совсем не нужны права рута. Другой вопрос, что он лежит в /sbin, который далеко не во всех дистрибутивах по умолчанию включается в пользовательский $PATH. Но это решается указанием полного пути.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Hemp
Сообщения: 17
ОС: Debian

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение Hemp »

Всем спасибо за оперативную помощь. Буду разбираться, пробовать.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение t.t »

rm_ писал(а):
03.06.2010 11:45
Кошмар какой, срочно читать любую книжку по скриптингу, или даже статью, вот например:
http://www.ibm.com/developerworks/library/l-bash.html
http://www.ibm.com/developerworks/library/l-bash2.html
http://www.ibm.com/developerworks/library/l-bash3.html
При всём уважении к Роббинсу, эа статья мне совершенно не понравилась. Увидев имя, подумал, неужели на developerworks-е всё-таки встречаются стоящие материалы? Прочитав немного, понял: стандартное для этого ресурса качество ниже среднего.

По прежнему порекомендую "Advanced bash scripting guide":
http://tldp.org/LDP/abs/html/
http://rus-linux.net/MyLDP/BOOKS/abs-guide...t/abs-book.html

Более кратких материалов сравнимого качества так и не нашёл.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Davinel
Сообщения: 481
ОС: Ubuntu

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение Davinel »

Goodvin писал(а):
03.06.2010 11:48
Настоятельно рекомендую вместо устаревшего замшелого ifconfig использовать более современный инструмент ip

Хм, а в каком оно пакете может присутствовать, а то у меня сего более современного инсутрмента как то нету.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение SLEDopit »

Davinel писал(а):
03.06.2010 17:14
Хм, а в каком оно пакете может присутствовать, а то у меня сего более современного инсутрмента как то нету.

Код: Выделить всё

 $ apt-file search /bin/ip | grep ip$
iproute: /bin/ip
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение sash-kan »

вроде бы самый короткий код:

Код: Выделить всё

IP=$(ip -o -f inet a sh eth0 | grep -Eo '[0-9.]{7,}')


Davinel писал(а):
03.06.2010 17:14
Хм, а в каком оно пакете может присутствовать, а то у меня сего более современного инсутрмента как то нету.
пакет iproute[2], только бинарник в некоторых дистрибутивах запихивают в /sbin и не всегда делают симлинк в /bin.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
nauman
Сообщения: 2

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение nauman »

Значит не актуально, удалил.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение sash-kan »

nauman писал(а):
05.08.2010 22:19
написанный на питоне
почему не на фортране?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
nauman
Сообщения: 2

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение nauman »

sash-kan писал(а):
05.08.2010 22:32
nauman писал(а):
05.08.2010 22:19
написанный на питоне
почему не на фортране?

Питоновские скрипты отлично заменяют скрипты bash.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение sash-kan »

nauman писал(а):
05.08.2010 22:42
Питоновские скрипты отлично заменяют скрипты bash.
ну, как бы раздел называется «работа в командной строке». скрипты-то тут при чём? скрипты — это куда-то в сторону «программирование».
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение SLEDopit »

nauman писал(а):
05.08.2010 22:42
Питоновские скрипты отлично заменяют скрипты bash.
На баше все то, что вы написали выглядит в разы короче:

Код: Выделить всё

wget -qO - 2ip.ru|egrep -m 1 -o "([0-9]+\.){3}[0-9]+"

Только вот ip интерфейса и внешний ip часто совсем не совпадают.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Goodvin
Ведущий рубрики
Сообщения: 4333
Статус: ⚝⚠⚒⚑⚖☭☞☣☤&

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение Goodvin »

nauman писал(а):
05.08.2010 22:19
Значит не актуально, удалил.

Это вообще о чём и к чему?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: BASH. Как узнать IP адрес сетевого интерфейса?

Сообщение SLEDopit »

Goodvin писал(а):
06.08.2010 09:40
Это вообще о чём и к чему?
Вчера на месте этого сообшения был скрипт на питоне, который лезет на 2ip.ru и достает внешний ip адрес.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали: