我有几个Linux桥接接口的虚拟机,我希望机器的IP地址在机器启动后显示出来(在login时,它通常显示发行版和内核)。
从我可以告诉消息是从/ etc /问题,但我不知道如何以及何时写入它。
这只是一个文本文件,你可以用与其他shell脚本一样的方式将文本发送到文件。 像这样的东西会取代/ etc /问题只是你的IP地址:
ifconfig eth0 | awk '/inet addr/ {print $2}' | cut -f2 -d: > /etc/issue
显然你可以使这个任意更复杂,这取决于你的/etc/issue
文件中的信息。
你可以在你的本地文件中写入/etc/rc.d/rc.local(通常在所有其他的启动脚本之后执行)。
在CentOS 7和Debian 8上 (也可能是其他的),只需在/etc/issue
添加以下行即可
My IP address: \4
这将解决机器的IPv4地址。 如果您有多个networking接口,并且您想select一个特定的networking接口,则可以使用它进行指定
My IP address: \4{eth0}
该脚本将根据需要向/etc/issue
文件中添加/删除IP地址:
#!/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
中的缺点是在启动时只能执行一次。
你可以写一次。 不幸的是,没有getty转义序列来显示eth0的ip地址,但是可以在/ etc / issue中使用转义序列来显示主机名:\ n
你可以在/ etc / issue中直接写入文件来静态设置机器的ip地址。 注意文件/etc/issue.net用于远程login,所以你也可以编辑它。
无论如何,在terminal窗口工作后,你将失去初始屏幕和IP /主机地址信息。 最好的办法是在提示符(大多数Linux发行版)中设置主机名,使用\ h或\ H或者再次静态设置你知道的IP地址在主机上设置在PS1variables中,你可以在/ etc /在大多数Linux发行版的configuration文件。
非常感谢@larsks入门。 我发现我在脚本完成之前遇到了麻烦,所以我的问题文件总是空白。 所以我加了一个1秒的停顿,然后循环。 我不是真的bash scripter,所以如果有更好的方法做到这一点,请让我知道。 我添加了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/
。
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