Як налаштувати / тощо / проблеми, щоб показати IP-адресу для eth0


12

У мене є декілька віртуальних машин Linux з мостовими інтерфейсами, і я хотів би, щоб IP-адреса машини з’явилася після завантаження машини (у вході, де зазвичай відображається реліз та ядро).

З того, що я можу сказати, повідомлення вибране з / etc / issues, але я не впевнений, як і коли писати на нього.


Привіт Бруно, чи можете ви змінити прийняту відповідь на PabloC? Його відповідь справді чудова. Пошук документації для цього дуже важкий, і його відповідь дуже повна.
Пітер Сенна

Відповіді:


13

Це просто текстовий файл ... ви пишете в нього так само, як і ви надсилаєте текст у файл із будь-яким іншим скриптом оболонки. Щось подібне замінить / etc / problem лише на вашу ip-адресу:

ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d: > /etc/issue

Очевидно, ви можете зробити це довільно складнішим, залежно від того, яку інформацію ви хочете у вашому /etc/issueфайлі.

Ви можете записати в цей файл у вашому локальному еквіваленті /etc/rc.d/rc.local (який, як правило, виконується після всіх інших сценаріїв запуску).


5
Трохи більше Linuxy сказатиip address show eth0 | awk '/inet / {print $2}' | cut -d/ -f1
Сорпігаль

Я не впевнений, як це більш лінуксично, але так, це теж працює.
larsks

1
@larks: Це більш linuxy, оскільки на linux ip- це інструмент, який ви повинні використовувати для подібних речей. ifconfigтехнічно лише для сумісності.
Сорпігаль

34

На CentOS 7 та Debian 8 (а може бути й інших) просто додайте наступний рядок до/etc/issue

My IP address: \4

і це вирішить IPv4-адресу машини. Якщо у вас є кілька мережевих інтерфейсів і ви хочете вибрати один конкретний, ви можете вказати його

My IP address: \4{eth0}

Перевірте man gettyсписок підтримуваних послідовностей евакуації вашого дистрибутива.


Також працює над CentOS 8 :)
Orsiris de Jong

Це чудово спрацювало на моєму Centos 7 vm.
Кевін Мейсон

6

Цей скрипт додасть / видалить IP-адреси до / із /etc/issueфайлу за потреби:

#!/bin/sh
PREFIX="Local IP addresses:"
IPADDRS=$(hostname -I | tr " " "\n" | grep -v "^$" | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tr "\n" " ")

perl -i -p -0777 -e "s/^$PREFIX[^\n]*\n\n//m; s/$/\n$PREFIX $IPADDRS\n/ if length('$IPADDRS')>6" /etc/issue

Якщо ви використовуєте дистрибутив на основі Debian, найкраще розмістити сценарій у цих місцях:

/etc/network/if-up.d/update-issue
/etc/network/if-post-down.d/update-issue

Таким чином сценарії виконуються щоразу, коли з’являється або знижується інтерфейс. Якщо розмістити його в /etc/rc.d/rc.localнедоліку, він має бути виконаний лише один раз під час завантаження.


3
Для тих, хто шукає, у Red Hat / CentOS / тощо цей сценарій був би /sbin/if{up,down}-local. (Якщо він існує, його називають /etc/sysconfig/network-scripts/ip{up,down}-post.)
Аарон Коплі

@powpow: Чому "Локальні IP-адреси"? --all-ip-addressesвиводить також "загальнодоступні" IP-адреси. Можливо, щось на кшталт "IP адреси всіх зовнішніх інтерфейсів цього хоста:" має більше сенсу.
ypid

4

ви можете написати це один раз. на жаль, для отримання ip адреси eth0 не існує послідовності втечі, але є послідовність виходу, яку ви можете використовувати в / etc / issue для показу імені хоста: \ n

ви завжди можете статично встановити ip машини в / etc / issue, записавши його безпосередньо у файл. майте на увазі, що файл /etc/issue.net використовується для віддалених входів, щоб ви могли також редагувати це.

все одно після роботи у вікні терміналу ви втратите початковий екран та інформацію про адресу ip / хоста. найкращий спосіб - встановити ім'я хоста в підказці (більшість дистрибутивів Linux), використовуючи \ h або \ H або знову, статично встановити ip-адресу, яку ви знаєте, встановлену на хості в змінній PS1, для якої можна встановити змінну PS1 в / etc / профіль у більшості дистрибутивів Linux.


1
Це лише для того, щоб знати, до якого IP-зв’язку підключитися після завантаження vm, тому достатньо встановити його так, як говорять larsks :)
Бруно Лопес

1

Велике спасибі @larsks за початок роботи. Я виявив, що у мене виникли проблеми із завершенням сценарію до того, як він був потрібний, тому файл моєї проблеми завжди був порожнім. Тож я додав паузу на 1 секунду і циклічно. Я насправді не баш скриптер, тому якщо є кращий спосіб зробити це, будь ласка, дайте мені знати. Я додав, COUNTщоб переконатися, що він не циклічно назавжди.

#!/bin/sh

COUNT=1

while [ $COUNT -lt 10 ]
do
  echo $COUNT

  COUNT=$((COUNT + 1))
  IP=`ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d: `
  if [ -n "$IP" ]; then
    break
  fi 
  sleep 1
done


echo "IP: " $IP | cat > /etc/issue

Я помістив цей сценарій у /etc/network/if-up.d/.


1

Systemd робить це порівняно просто. systemctl edit getty@із вмістом, як-от:

[Service]
ExecStartPre=-/bin/bash -c '[ ! -f /etc/.issue.orig ] && cp /etc/issue /etc/.issue.orig; int=`ls /sys/class/net|grep enp|head -1`; sed -r "s/\\\\\\n/[\\\\\\4\{$$int\}]/" < /etc/.issue.orig > /etc/issue'

Потім systemctl daemon-reload && systemctl restart getty@tty1


0

Для тих, хто приземлився тут, де використовується Ubuntu 19.04, я прийняв відповідь від @ powpow.

Я створив файл /etc/network/if-up.d/update-issueіз наступним вмістом:

#!/bin/sh
PREFIX="Ubuntu 19.04 - dev"
IPADDRS=$(hostname -I | tr " " "\n" | grep -v "^$" | sort -t . -k 1,1n | head -1 | tr "\n" " ")
echo "$PREFIX\n\nIP: $IPADDRS\n" > /etc/issue

Потім я позначив файл як виконуваний: chmod 0755 /etc/network/if-up.d/update-issue

Чудово працює!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.