Как найти IP-адрес моего компьютера с помощью оболочки bash? - PullRequest
25 голосов
/ 10 мая 2009

Время от времени мне нужно запускать сервер разработки Django и просматривать его на других машинах в моей сети, как описано здесь:

http://docs.djangoproject.com/en/dev/ref/django-admin/#runserver

IP-адрес моей машины имеет тенденцию меняться время от времени, поэтому я хотел бы иметь небольшой псевдоним оболочки или что-то, что выплевывает команду manage.py с текущим IP-адресом моей машины, возможно, так:

python manage.py runserver $(COMMAND TO FIND MY MACHINE’S IP ADDRESS GOES HERE):8000

Ответы [ 15 ]

51 голосов
/ 10 мая 2009
ifconfig en0 | grep inet | grep -v inet6

Ожидаемый результат будет в следующем виде:

inet 192.168.111.1 сетевая маска 0xffffff00, широковещательная передача 192.168.111.255

Добавьте оператор awk для печати второго столбца, чтобы избежать использования cut (awk - довольно стандартный инструмент Unix):

ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}'

Я использую следующее для получения текущего IP-адреса в локальной сети, где первые несколько цифр IP-адреса всегда одинаковы (замените 192.168.111 на свои собственные номера):

ifconfig | grep 192.168.111 | awk '{print $2}'

Чтобы получить ip другого компьютера, имя которого вы знаете, попробуйте (замените имя хоста и 192.168.111 своими собственными значениями):

ping -c 1 hostname | grep 192.168.11 | grep 'bytes from' | awk '{print $4}' | sed 's/://g'
15 голосов
/ 10 мая 2009

Возможно, вы уже знаете, но запускаете

python manage.py runserver 0.0.0.0:8000

делает вашу машину видимой для всех в сети.

Есть ли причина, по которой вам нужно указать свой IP-адрес?

7 голосов
/ 25 апреля 2013

Это должно работать так же, как и другие команды, которые я уже видел:

ifconfig eth0 | grep inet | awk '{print $2}' | cut -d':' -f2
  • Замените eth0 на нужный интерфейс (eth0, eth1, wlan0 ...)

I̶ ̶t̶h̶i̶n̶k̶ ̶y̶o̶u̶ ̶c̶a̶n̶ ̶a̶l̶s̶o̶ ̶w̶r̶i̶t̶e̶: ̶

̶ ̶ ̶ ̶h̶o̶s̶t̶n̶a̶m̶e̶ ̶ -̶I̶ ̶ | ̶ ̶c̶u̶t̶ ̶-̶d̶'̶ ̶'̶ ̶-̶f̶1̶ ̶

5 голосов
/ 26 декабря 2011

Лучшее решение будет:

ifconfig | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'
4 голосов
/ 14 апреля 2012

Это быстрый и грязный способ, который работает под OSX

/sbin/ifconfig | grep 'inet ' | grep -v '127.0.0.1' | head -n1 | awk '{print $2}'

Обычно получают все интерфейсы с адресом IPV4, пропускают localhost, а затем получают первый интерфейс.

Кроме того, используйте путь к ifconfig. Я видел, как многие из сценариев скрипта тормозят при использовании из ex. cron из-за ошибки PATH.

4 голосов
/ 01 января 2012

Люди используют количество символов для извлечения правильных столбцов из строки IP-адреса, но использование пробелов в качестве разделителя делает его более масштабируемым для IP-адресов различной длины ...

ifconfig en1 | grep inet | grep -v inet6 | cut -d" " -f2
3 голосов
/ 04 октября 2016

В Mac OS X 10.11.6 El Capitan (и, возможно, более старых версиях) вы можете напечатать свой IP с помощью

ipconfig getifaddr <device>

, где <device> равно en0, en1 и т. Д.

http://osxdaily.com/2010/11/21/find-ip-address-mac/

3 голосов
/ 21 ноября 2012

Следующая команда отлично работает для меня на RHEL 6.3:

 ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'
3 голосов
/ 10 мая 2009

ifconfig это, вероятно, то, что вы ищете. Вам нужно будет либо запустить его через grep, чтобы отфильтровать часть шума.

2 голосов
/ 04 апреля 2013

Это может быть не так элегантно, как в некоторых других решениях, но оно работает в системах Linux и выглядит более комфортно, чем регулярное выражение:

ifconfig eth0 | grep 'inet addr:' | awk '{print $2}' | awk -F ':' '{print $2}'
...