Я пытаюсь использовать только IP-адрес (inet) в качестве параметра в написанном мной скрипте.
Есть ли в терминале unix простой способ получить только IP-адрес, а не просматривать ifconfig
?
shell
unix
ip-address
каменщик
источник
источник
ip -o address
гораздо проще работать, чем с выходными даннымиip address
.Ответы:
Вы можете написать сценарий, который возвращает только IP, например:
Для MAC:
Или для системы Linux
источник
hostname -i
на мой он возвращается:::1 127.0.1.1 192.168.1.100
hostname
не переносимо.Это даст вам все интерфейсы IPv4, включая loopback 127.0.0.1:
Это покажет только
eth0
:Таким образом можно получить адреса IPv6:
Только
eth0
IPv6:источник
grep -oP
Терпит неудачу на BusyBox v1.24.1: неверный вариант - P-P
переключатель для регулярных выражений Perl, иначе мы не сможем использовать(?<=inet\s)
маркер просмотра назад . Вы можете получить аналогичный результат, запустивgrep -oe 'inet [0-9\.]\+'
или,grep -oe 'inet6 [0-9a-f:]\+'
но так я не могу избавиться от первого слова. Вman grep
отчетах SuSE этот-P
флаг является экспериментальным.ip -4 a show eth0 | grep -Po 'inet \K[0-9.]*'
Как правило, никогда не гарантируется, что система будет иметь только один IP-адрес, например, у вас могут быть как Ethernet-, так и WLAN-соединения, а если у вас есть активное VPN-соединение, то у вас будет еще один IP-адрес.
Linux
В Linux
hostname -I
отобразит текущий IP-адрес (а). Полагаясь на то, что он всегда возвращает только один IP-адрес, в некоторых сценариях, скорее всего, не будет работать должным образом (например, соединение VPN установлено), поэтому более надежным способом было бы преобразовать результат в массив, а затем перебрать элементы:OSX
В OSX, если вы знаете интерфейс , вы можете использовать:
который вернет только IP-адрес.
Или вы можете перебрать возможные имена интерфейсов, начиная с суффикса, то есть
en
:Кроме того, получение IP-адреса становится недетерминированным, если установлены как кабельное, так и Wi-Fi-соединение, когда машина имеет более одного интерфейса Ethernet или когда присутствуют туннели VPN.
Получение внешнего IP
Если вам нужен внешний IP-адрес, вы можете запросить службу в текстовом режиме, например
curl https://ipecho.net/plain
, вернуть внешний IP-адрес в виде обычного текста .И еще более быстрый способ получить внешний IP-адрес - это запросить известный DNS-сервер:
источник
Эта команда даст вам точный IP-адрес, какой вы хотите в Ubuntu.
источник
В последних версиях Ubuntu ( 14.04 - 16.04 ) эта команда помогала мне.
источник
print $1
может дать или нет правильный результат.Если у вас ограниченная среда, вы можете использовать эту команду:
источник
ip -o -4 addr show dev eth0 | cut -d' ' -f7 | cut -d'/' -f1
ip -4 addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
. И для v4, и для v6:ip addr show eth0 | grep inet | awk '{print $2}' | cut -d'/' -f1
ip -4 addr show eth0 | grep inet
выполните:ip -4 addr show | grep 192
Чтобы получить только IP-адрес в Mac OS X, вы можете ввести следующую команду:
источник
Команда
ifconfig
устарела, и вы должны использоватьip
команду в Linux.Также
ip a
предоставит вам область видимости в той же строке, что и IP, чтобы ее было проще использовать.Эта команда покажет вам ваш глобальный (внешний) IP:
Все IPv4 (также 127.0.0.1):
Все IPv6 (также :: 1):
источник
Мы можем просто использовать только 2 команды (ifconfig + awk), чтобы получить только IP (v4), который нам нужен, вот так:
В Linux, предполагая получить IP-адрес от
eth0
интерфейса, выполните следующую команду:В OSX, предполагая получить IP-адрес от
en0
интерфейса, выполните следующую команду:Чтобы узнать наш общедоступный / внешний IP-адрес, добавьте эту функцию в
~/.bashrc
Тогда беги,
whatismyip
источник
Чтобы распечатать только IP-адрес
eth0
, без другого текста:Чтобы определить ваш основной интерфейс (поскольку он может быть не eth0), используйте:
Две приведенные выше строки можно объединить в одну команду следующим образом:
источник
Я хотел что-то простое, что работало бы как псевдоним Bash. Я обнаружил, что это
hostname -I
работает лучше всего для меня (имя хоста v3.15).hostname -i
по какой-то причине возвращает IP-адрес обратной петли, ноhostname -I
дает мне правильный IP-адрес для wlan0 и без необходимости передавать вывод через grep или awk. Недостатком является то, чтоhostname -I
будут выводиться все IP-адреса, если у вас их больше одного.источник
Это сработает на Mac:
Это разрешено
ping 192.168.1.2
в моей машине.Совет от профессионалов :
$(...)
означает запускать все, что находится в скобках в подоболочке, и возвращать это как значение.источник
В
man hostname
есть еще более простой способ , который автоматически за исключением петлевой IP и показывает только список разделенных пробелами все назначенные для хоста IP - адреса:источник
Вы также можете использовать следующую команду:
ПРИМЕЧАНИЕ. Это будет работать, только если у вас есть подключение к Интернету.
источник
Несколько ответов , по всей видимости, использует более новую
ip
команду (замена дляifconfig
) , поэтому здесь есть один , который используетip addr
,grep
иawk
просто напечатать адрес IPv4 , связанный сwlan0
интерфейсом:Хотя это не самое компактное или необычное решение, его (возможно) легко понять (см. Объяснение ниже) и изменить для других целей, например, для получения последних 3 октетов MAC-адреса следующим образом:
Объяснение:
ip addr show wlan0
выводит информацию, связанную с указанным сетевым интерфейсомwlan0
, которая должна быть похожей на это:Далее
grep inet
фильтры из линий , которые не содержат «инет» (IPv4 и IPv6 конфигурации) иgrep -v inet6
фильтры из остальных строк , которые делают содержать «inet6», что должно привести в одну линию , как этот:Наконец, первый
awk
извлекает поле «172.18.18.1/24», а второй удаляет сокращенную сетевую маску, оставляя только IPv4-адрес.Кроме того, я думаю, стоит упомянуть, что если вы пишете сценарии, часто есть много более богатых и / или более надежных инструментов для получения этой информации, которые вы можете использовать вместо этого. Например, при использовании Node.js есть
ipaddr-linux
, при использовании Rubylinux-ip-parser
и т. Д.См. Также /unix/119269/how-to-get-ip-address-using-shell-script
источник
Используйте следующую команду:
источник
Вот моя версия, в которой вы можете передать список интерфейсов, упорядоченных по приоритету:
Поэтому, если я подключен к VPN, Wi-Fi и Ethernet, мой адрес VPN (на интерфейсе tap0) будет возвращен. Скрипт работает как в Linux, так и в OSX, и может принимать аргументы, если вы хотите переопределить IFLIST.
Обратите внимание: если вы хотите использовать IPV6, вам придется заменить inet на inet6.
источник
Мне это всегда нужно в самые неожиданные моменты, и я обязательно начинаю искать подобные темы на SO. Итак, я написал простой скрипт для получения адресов IPv4 через netstat, который называется
echoip
- вы можете найти его здесь . Bash для сетевых адресов выглядит так, он также получает ваш публичный адрес с ipecho.net:echoip
Сценарий дает такой вывод:источник
используйте этот однострочный скрипт:
ifconfig | grep "inet " | grep -v 127.0.0.1|awk 'match($0, /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)/) {print substr($0,RSTART,RLENGTH)}'
mac и linux (проверено в ubuntu) работают.источник
ifconfig en0
илиifconfig eth1
т. Д., Если знаете, какой интерфейс вам нужен :)Я предпочитаю не использовать
awk
и тому подобное в скриптах ..ip
есть возможность вывода в JSON.Если вы не укажете,
$interface
вы получите все IP-адреса:источник
bash ip -j addr show eth0 | jp "[0].addr_info[?family== 'inet'].local | [0]"
показывает все твои ips
источник
На 64-битной версии Redhat это решило для меня проблему.
источник
источник
При поиске вашего внешнего IP-адреса на хосте с NAT многие ответы предлагают использовать методы на основе HTTP,
ifconfig.me
например:За прошедшие годы я видел, как многие из этих сайтов приходят и уходят, и я считаю этот метод на основе DNS более надежным:
У меня есть этот удобный псевдоним
~/.bashrc
:источник
Эти два способа сработали для меня:
Чтобы получить IP-адрес вашего интерфейса eth0. Замените eth0 в приведенном ниже примере своим именем интерфейса.
ifconfig eth0 | grep -w "inet" | tr -s " " | cut -f3 -d" "
Использование имени хоста: это даст вам inet, то есть IP-адрес вашего etho. использование -I даст вам значение inet для всех интерфейсов, где бы это значение ни присутствовало.
hostname -i
источник
Это возвращает только IP-адрес вашей системы.
источник
Я бы использовал,
Hostname -L
чтобы получить только IP-адрес для использования в качестве переменной в скрипте.источник
hostname -i
илиhostname -I
?user@linux:~$ Hostname -L -bash: Hostname: command not found user@linux:~$
1. КапиталH
ошибается 2. Нет такого-L