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


12

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

私が伝えることができるものから、メッセージは/ etc / issuesから取り出されますが、それをいつどのように書き込むべきかわかりません。


ちょっとブルーノ、PabloCの受け入れられた答えを変えることができますか?彼の答えは本当に素晴らしいです。このドキュメントを見つけるのは非常に難しく、彼の答えは非常に完全です。
ピーターセナ

回答:


13

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

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

それがもっとLinuxyなのかどうかはわかりませんが、はい、それも機能します。
ラースク

1
@larks:linux ipでは、この種のことを行うために使用するはずのツールであるため、もっとlinuxy です。ifconfig技術的には互換性のためだけです。
ソルピガル

30

のCentOS 7のDebian 8(そしておそらく他も同様)だけに次の行を追加/etc/issue

My IP address: \4

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

My IP address: \4{eth0}

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


CentOS 8でも動作します:)
Orsiris de Jong

これは私のCentos 7 vmで完全に機能しました。
ケビンメイソン

6

このスクリプトは/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ブートアップ中に1回だけ実行されるという欠点があります。


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

4

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

ファイルに直接書き込むことで、/ etc / issueにマシンのIPを常に静的に設定できます。ファイル/etc/issue.netはリモートログインに使用されるため、同様に編集することもできます。

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


1
これは、vmの起動後に接続するIPを知るためのものであるため、larsksが言うように設定するだけで十分です:)
ブルーノロペス

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

よく働く!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.