如何设置/ etc / issues以显示eth0的IP地址


12

我有几个具有桥接接口的linux虚拟机,我希望在机器启动后显示机器的IP地址(在登录名中,通常显示版本和内核)。

据我所知,该消息是从/ etc / issues中拾取的,但是我不确定如何以及何时写入它。


嘿,布鲁诺,您可以将PabloC的接受答案更改为吗?他的回答确实很棒。为此很难找到文档,他的答案也很完整。
彼得·塞纳

Answers:


13

这只是一个文本文件...您可以使用与其他任何shell脚本一样将文本发送到文件的方式写入文件。这样的事情将只用您的IP地址替换/ etc / issue:

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
Sorpigal 2010年

我不确定这会是什么Linuxy,但是是的,它也可以工作。
larsk 2010年

1
@larks:更具Linuxy性,因为在Linux ip上,您应该将其用于此类操作。ifconfig从技术上讲只是为了兼容性。
Sorpigal 2010年

33

CentOS 7Debian 8(可能还有其他)上,只需将以下行添加到/etc/issue

My IP address: \4

并将解析为计算机的IPv4地址。如果您有多个网络接口,并且想要选择一个特定的接口,则可以使用

My IP address: \4{eth0}

检查man getty分发中支持的转义序列的列表。


也可以在CentOS 8上使用:)
Orsiris de Jong,

这在我的Centos 7虚拟机上完美运行。
凯文·梅森

6

该脚本将/etc/issue根据需要向文件添加IP地址/从文件中删除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在启动过程中的缺点是只能执行一次蜂鸣。


3
对于在Red Hat / CentOS / etc中进行搜索的任何人,此脚本都是/sbin/if{up,down}-local。(如果存在,则称为/etc/sysconfig/network-scripts/ip{up,down}-post。)
亚伦·科普利

@powpow:为什么选择“本地IP地址”?--all-ip-addresses输出“公共” IP地址。也许类似“此主机的所有外部接口的IP地址:”之类的说法更有意义。
ypid 2015年

4

你可以写一次。不幸的是,没有盖蒂转义序列可以显示eth0的IP地址,但是您可以在/ etc / issue中使用一个转义序列来显示主机名:\ n

您始终可以通过直接将机器的ip写入文件来在/ etc / issue中静态设置它的ip。请注意,文件/etc/issue.net用于远程登录,因此您可能也要对其进行编辑。

无论如何,在终端窗口中工作后,您将失去初始屏幕和ip /主机地址信息。最好的方法是使用\ h或\ H或再次在提示符下设置主机名(大多数Linux发行版都这样做),以静态方式设置PS1变量中主机上设置的IP地址,您可以在/ etc /中设置PS1变量。大多数Linux发行版上的配置文件。


1
这只是想知道在启动vm之后要连接到哪个IP,因此按照larsks的说明进行设置就足够了:)
Bruno Lopes 2010年

1

非常感谢@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/


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

很棒!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.