Как узнать IP адрес, используя командную строку Linux

Раньше для просмотра текущих сетевых интерфейсов и их параметров (включая IP-адреса), использовалась команда ifconfig. Но она уже несколько лет как устарела, и в современных дистрибутивах Linux не поддерживается.
Вместо ifconfig рекомендуется использовать команду ip
Определяем IP-адрес командой ip
Чтобы определить IP-адрес вашего сетевого интерфейса можно использовать команду ip address (или эквивалентный вызов ip addr или просто ip a ).
ip address 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp2s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:24:1d:83:da:25 brd ff:ff:ff:ff:ff:ff inet 192.168.2.2/24 brd 192.168.2.255 scope global dynamic noprefixroute enp2s0 valid_lft 76434sec preferred_lft 76434sec inet6 fe80::1f6e:e0e4:27d1:e643/64 scope link noprefixroute valid_lft forever preferred_lft forever

В результате выполнения команды на экран будет выведен список текущих сетевых интерфейсов и их параметры. Первый интерфейс в списке обычно lo — это loopback интерфейс (нас он сейчас не интересует). Нас интересует Ethernet-интерфейс или WiFi-интерфейс (в зависимости от того, какое у вас подключение).
Ethernet интерфейсы обычно имеют имена вида enp2s0 или eth0, а WiFi-интерфейсы имеют имена вида wlp2s0 или wlan0 (цифры в названии могут отличаться).
Найдите интересующий вас интерфейс в списке. Его IP-адрес выводится на строке inet ..
В нашем примере это inet 192.168.2.2/24 . 192.168.2.2 — это IP-адрес. 24 — это маска подсети, соответствующая маске 255.255.255.0.
Определяем IP-адрес командой hostname
Воспользуемся командой hostname , чтобы вывести IP-адрес. Используем ключ -I
hostname -I

Команда выводит все сетевые адреса хоста (системы), кроме loopback интерфейса. Если у вас всего одно сетевое соединение, то, скорее всего, будет выведен один IP-адрес.
Через графическую утилиту
Хотя эта заметка рассматривает способы определения IP-адреса через командную строку, иногда проще посмотреть текущий IP-адрес через графические программы. В Ubuntu Linux это можно сделать в Параметрах системы в разделе Сеть .
unixforum.org
BASH. Как узнать IP адрес сетевого интерфейса?
На самом деле это единственный раздел про unix на этом форуме
18 сообщений • Страница 1 из 1
Hemp Сообщения: 17 ОС: Debian
BASH. Как узнать IP адрес сетевого интерфейса?
Сообщение Hemp » 03.06.2010 11:35
Собственно, необходимо занести в переменную IP адрес сетевого интерфейса eth0, который выдаётся динамически.
Как это можно реализовать?
Языком сценариев Bash, практически не владею (на уровне echo»Hello»), но вижу, это примерно, так:
1. Копирую в файл вывод команды ifconfig eth0
2. В цикле, посимвольно перебираю этот временный файл.
3. Найдя, строчку «inet addr:», отсчитываю 15 символов (XXX.XXX.XXX.XXX), которые составляют сам IP адрес
4. Заношу, эти 15 символов, в переменную.
5. Удаляю, временный файл.
Определить ip адрес компьютера в локальной сети (Bash скрипт, Linux)
Также можно написать небольшой скрипт на bash, который будет без труда справляться с поставленной задачей. Написание данного скрипта и будет рассмотрено в рамках данной статьи.

Создадим файл, который будет называться ipsearch при помощи любимого текстового редактора
Поместим туда следующее содержимое
#!/bin/bash for i in 192.168.1. do if ping -c1 -w1 $i &>/dev/null then echo $i is up; exit fi done
Разберем структуру BASH скрипта позволяющего определить ip адрес компьютера в локальной сети
Как и для любого скрипта, написанного под Linux в первой строке указывается sha-bang #, затем восклицательный знак и название командного интерпретатора
В основе скрипта цикл for — переменной i последовательно присваивается значение IP-адресов из заданного диапазона.
Для каждого из них выполняется последовательность действий описанная правилом if-then — в данном случае адрес просто пингуется, результат выполнения команды при этом перенаправляется в /dev/null. Если пинг есть (адрес доступен) в консоль выводится строка
[IP-адрес] is up
Завершается if при командой fi. exit обеспечивает выход из программы после завершения цикла for. Если exit не использовать после того как будет произведена попытка пропинговать все адреса из заданного диапазона потребуется нажать на клавиатуре сочетание клавиш CTRL+Z.
Добавляем права на исполнение файлу
Выполняем из консоли
Поскольку точкой в командной строке Linux обозначается текущая директория — указывая ./ мы задаем полный путь до исполняемого файла. Именно поэтому скрипт выполняется несмотря на то, что путь до него не прописан в переменной $PATH (она будет рассмотрена в одной из следующих статей).
То же самое, что делает написанный скрипт можно успешно выполнять при помощи однострочного скрипта
for i in 192.168.1.;do if ping -c1 -w1 $i &>/dev/null;then echo $i is up;fi;done
Однако скриптом пользоваться, в большинстве случаев, оказывается более удобно
Как определить ip через bash скрипт?
Как мне сделать так, чтобы я мог в скрипте написать например $ip и чтобы в конфиги прописался ip сервера в терминале которого был запущен скрипт. Такого плана хочу сделать:
echo «host $ip» > /etc/rclocal
- Вопрос задан более трёх лет назад
- 11838 просмотров
Комментировать
Решения вопроса 1
Saboteur @saboteur_kiev Куратор тега Linux
software engineer
У сервера может быть несколько IP адресов, несколько интерфейсов, и работать они могут с разными маршрутами.
Вы что именно хотите?
ifconfig пропарсить? или ip addr show?
Если внешний интерфейс один, то подойдет обычный
hostname -I
Ответ написан более трёх лет назад
Комментировать
Нравится 5 Комментировать
Ответы на вопрос 3

Программист
Если известно наименование интерфейса, то можно попробовать так
#!/bin/bash IP=$(ifconfig eth0 | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '< print $1>') echo "My IP is $IP"
Опять же, это будет адекватно работать если интерфейс один (исключая lo), если таких интерфейсов несколько, то нужно что-то по серьезнее писать.
Ответ написан более трёх лет назад
Нравится 1 3 комментария
noob4ik2 @noob4ik2 Автор вопроса
Спасибо большое. А если будет не eth0 (такое вряд ли будет, это я на будущее интересуюсь) Быть может есть какая-нибудь программа для определения? Чтобы я скриптом её поставил а потом одной командой определял ип. У меня всегда не больше 1 ип если что. Или например сразу несколько интерфейсов вбить

noob4ik2, Если уверены что интерфейс один, то указывать имя интерфейса не обязательно в скрипте
noob4ik2 @noob4ik2 Автор вопроса
Евгений, я на будущее интересуюсь) Быть может когда-то буду не уверен.

Внимание! Изменился адрес почты!
В самом наипростейшем случае, когда одна сетевуха, никаких наворотов — сначала netstat -in, чтобы получить список интерфейсов и их имен и откинуть lo0, а потом ifconfig по тому интерфейсу, который остался.
Но это наипростейший случай. Даже у компа с одной сетевухой может быть например виртуальная машина и мост, который обьединяет уже как минимум два интерефейса:
# netstat -in Kernel Interface table Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg br0 1500 850276 0 9811 0 138039 0 0 0 BMPRU eth0 1500 859789 0 1739 0 138070 0 0 0 BMRU lo 65536 3749 0 0 0 3749 0 0 0 LRU
Какой вот тут взяли бы? 🙂
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
выполни код:
icanhazip=`wget -q -4 -O- http://icanhazip.com`
теперь в переменной $icanhazip находится твой внешний IP
Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Linux
- +1 ещё
Почему меняется разрешение arch linux?
- 1 подписчик
- 4 часа назад
- 89 просмотров