web-dev-qa-db-ja.com

/ etc / issuesをセットアップしてeth0のIPアドレスを表示する方法

ブリッジインターフェイスを備えたいくつかのLinux仮想マシンがあり、マシンのブート後に(通常はリリースとカーネルが表示されるログインで)マシンのIPアドレスを表示したいのですが。

メッセージからわかるように/ etc/issuesからメッセージが取得されますが、いつどのようにメッセージに書き込むかわかりません。

12
Bruno Lopes

これは単なるテキストファイルです。他のシェルスクリプトを使用してファイルにテキストを送信するのと同じ方法で書き込みます。このようなものは/ etc/issueをあなたのIPアドレスだけに置き換えます:

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

/etc/issueファイルに必要な情報に応じて、これを任意に複雑にすることができます。

ローカルで/etc/rc.d/rc.localに相当するファイルに書き込むことができます(通常、他のすべての起動スクリプトの後に実行されます)。

13
larsks

CentOS 7およびDebian 8(およびその他)の場合、/etc/issueに次の行を追加するだけです。

My IP address: \4

これは、マシンのIPv4アドレスに解決されます。複数のネットワークインターフェイスがあり、特定の1つを選択する場合は、次のコマンドで指定できます。

My IP address: \4{eth0}

ディストリビューションでサポートされているエスケープシーケンスのリストについては、man gettyを確認してください。

34
PaoloC

このスクリプトは、必要に応じて/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に配置すると、起動時にbeeingが1回だけ実行されるという欠点があります。

6
powpow

一度書くことができます。残念ながら、eth0のIPアドレスを表示するgettyエスケープシーケンスはありませんが、/ etc/issueでホスト名を表示するために使用できるエスケープシーケンスがあります:\ n

/ etc/issueでマシンのIPを常に静的に設定することで、ファイルに直接書き込むことができます。 /etc/issue.netファイルがリモートログインに使用されることに注意してください。そのため、このファイルも編集する必要がある場合があります。

とにかく、ターミナルウィンドウで作業した後は、初期画面と、それに伴うIP /ホストアドレス情報が失われます。最善の方法は、\ hまたは\ Hを使用してプロンプトでホスト名を設定することです(ほとんどのLinuxディストリビューションではそうです)。または、ホストにPS1変数で設定されていることがわかっているIPアドレスを静的に設定する/ etc /でPS1変数を設定できます。ほとんどのLinuxディストリビューションのプロファイル。

4
user237419

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

1
h0tw1r3

はじめに@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

ここに着陸して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

よく働く!

0
Steve McDonald