У меня есть пара виртуальных машин Linux с мостовыми интерфейсами, и я бы хотел, чтобы IP-адрес машины отображался после загрузки машины (в логине, где обычно отображается версия и ядро).
Насколько я могу судить, сообщение взято из / etc / issues, но я не уверен, как и когда в него писать.
На CentOS 7 и Debian 8 (а может и другое), просто добавьте следующую строку в /etc/issue
My IP address: \4
и это разрешит IPv4-адрес машины. Если у вас есть несколько сетевых интерфейсов и вы хотите выбрать один конкретный, вы можете указать его с помощью
My IP address: \4{eth0}
Проверьте man getty
для списка поддерживаемых escape-последовательностей в вашем дистрибутиве.
Это просто текстовый файл ... вы пишете в него так же, как отправляете текст в файл с помощью любого другого сценария оболочки. Что-то вроде этого заменит / etc / issue только на ваш IP-адрес:
ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d: > /etc/issue
Очевидно, вы можете сделать это произвольно более сложным, в зависимости от того, какую информацию вы хотите /etc/issue
файл.
Вы можете записать в этот файл в своем локальном эквиваленте /etc/rc.d/rc.local (который обычно выполняется после всех других сценариев запуска).
Этот скрипт добавит / удалит 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
имеет недостаток в том, что он выполняется только один раз во время загрузки.
вы можете написать это один раз. к сожалению, нет escape-последовательности getty для отображения IP-адреса eth0, но есть escape-последовательность, которую вы можете использовать в / etc / issue для отображения имени хоста: \ n
вы всегда можете статически установить IP-адрес машины в / etc / issue, записав его прямо в файл. имейте в виду, что файл /etc/issue.net используется для удаленного входа в систему, поэтому вы также можете изменить его.
в любом случае, после работы в окне терминала вы потеряете начальный экран и информацию об адресе IP / хоста с ним. лучший способ - установить имя хоста в приглашении (большинство дистрибутивов Linux делают) с помощью \ h или \ H или снова, статически устанавливая IP-адрес, который, как вы знаете, установлен на хосте в переменной PS1, вы можете установить переменную PS1 в / etc / profile на большинстве дистрибутивов Linux.
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
Большое спасибо @larsks за то, что начали. Я обнаружил, что у меня были проблемы с завершением скрипта до того, как он понадобился, поэтому мой файл проблемы всегда был пустым. Я добавил паузу в 1 секунду и зациклился. Я на самом деле не скриптер bash, поэтому, если есть лучший способ сделать это, дайте мне знать. Я добавил 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/
.
Для всех, кто приземляется здесь, кто использует 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
Прекрасно работает!