我有几个带有桥接接口的 Linux 虚拟机,我希望机器的 IP 地址能够在机器启动后显示(在登录时,通常显示版本和内核)。
据我所知,该消息是从 /etc/issues 中获取的,但我不确定如何以及何时写入它。
答案1
它只是一个文本文件...你向它写入内容的方式与使用任何其他 shell 脚本向文件发送文本的方式相同。类似这样的操作会将 /etc/issue 替换为你的 ip 地址:
ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d: > /etc/issue
显然,您可以根据您想要在文件中包含的信息任意使其变得更加复杂/etc/issue
。
您可以在本地等效的 /etc/rc.d/rc.local 中写入此文件(通常在所有其他启动脚本之后执行)。
答案2
在CentOS 7和Debian 8(也可能是其他的),只需将以下行附加到/etc/issue
My IP address: \4
这将解析为机器的 IPv4 地址。如果您有多个网络接口,并且想要选择一个特定的,您可以使用
My IP address: \4{eth0}
检查man getty
您的发行版上支持的转义序列列表。
答案3
此脚本将根据需要在文件中添加/删除 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
缺点是启动时只会执行一次。
答案4
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