Как найти IP-адрес компьютера с помощью оболочки bash?
Время от времени мне нужно запустить сервер разработки Django и просматривать его на других компьютерах в моей сети, как описано здесь:
http://docs.djangoproject.com/en/dev/ref/django-admin/#runserver
Мой IP-адрес компьютера имеет тенденцию меняться каждый раз, поэтому Id любит иметь небольшой псевдоним оболочки или что-то, что выплескивает команду manage.py с моим текущим IP-адресом компьютеров, может быть, вот так:
python manage.py runserver $(COMMAND TO FIND MY MACHINE’S IP ADDRESS GOES HERE):8000
Ответы
Ответ 1
ifconfig en0 | grep inet | grep -v inet6
Ожидается, что вывод выше будет в следующем виде:
inet 192.168.111.1 netmask 0xffffff00 broadcast 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'
Ответ 2
Возможно, вы уже знаете, но запустите
python manage.py runserver 0.0.0.0:8000
делает вашу машину видимой для всех в сети.
Есть ли причина, по которой вам нужно указать свой IP?
Ответ 3
Thi должен работать так же хорошо, как и другие команды, которые я уже видел:
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̶ ̶
Ответ 4
Лучшим решением будет:
ifconfig | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'
Ответ 5
Люди используют количество символов, чтобы вывести правильные столбцы из строки IP-адреса, но использование пробелов в качестве разделителя делает это более масштабируемым для разных IP-адресов длины...
ifconfig en1 | grep inet | grep -v inet6 | cut -d" " -f2
Ответ 6
Это быстрый и грязный способ, который работает под OSX
/sbin/ifconfig | grep 'inet ' | grep -v '127.0.0.1' | head -n1 | awk '{print $2}'
В основном получить все интерфейсы с адресом IPV4, пропустить локальный хост, а затем получить первый интерфейс.
Также используйте путь к ifconfig. Я видел, как много сковородок script тормоз при использовании от ex. cron из-за сбоя PATH.
Ответ 7
ifconfig
, вероятно, то, что вам нужно. Вам нужно либо запустить его через grep
, чтобы отфильтровать некоторые из них.
Ответ 8
Следующая команда отлично работает для меня на RHEL 6.3:
ifconfig | grep -v '127.0.0.1' | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p'
Ответ 9
В 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/
Ответ 10
Это может быть не так элегантно, как некоторые из других решений, но он работает на системах Linux и более удобен для просмотра, чем регулярное выражение:
ifconfig eth0 | grep 'inet addr:' | awk '{print $2}' | awk -F ':' '{print $2}'
Ответ 11
Попробуйте это (если вы являетесь пользователем Arch)
resolveip -s $HOSTNAME
Альтернативный
Для получения адреса IPv4 вы можете использовать:
host $(uname -n) | grep "address" | grep -v "IPv6" | head -n 1 | awk '{print $4}'
Для получения IPv6:
host $(uname -n) | grep "IPv6 address" | head -n 1 | awk '{print $5}'
Вы можете заменить $(uname -n) на $(имя хоста), если хотите.
Ответ 12
Здесь находится решение найти текущий IP-адрес:
route -n get default|grep interface|awk ‘{ print $2 }’|xargs ipconfig getifaddr
тестируется только на Mac.
Ответ 13
Это проверяет ваш интерфейс по умолчанию и использует его для извлечения первичного ip.
Полезно, когда у вас много интерфейсов и тонны виртуальных IP-адресов:
netstat -rn | gawk '/UG/ {print $NF}' | xargs ifconfig | gawk 'match($0,/inet addr:(.*) B/,a) {print a[1]}'
Ответ 14
Recap: если вы хотите использовать copy/paste
в командной строке и просто получите сетевой IP-адрес, вот что работает на Mac (на WiFi):
echo $(ifconfig en0 | grep inet | grep -v inet6 | cut -d" " -f2)
Здесь присваивается значение переменной bash script:
LOCAL_IP=$(ifconfig en0 | grep inet | grep -v inet6 | cut -d" " -f2)
Это основано на ответах Valentin Rocher и Matt Kropmton
Ответ 15
Простая команда для точного определения IP-адреса с интерфейсом по умолчанию.
ip -o route get "8.8.8.8" 2>/dev/null | sed -e 's/^.* src \([^ ]*\) .*$/\1/'
или
ip route | grep src | awk -F 'src' '{print $NF; exit}' | awk '{print $1}'
Проверено на всех ОС Unix