ブリッジインターフェイスを備えたいくつかのLinux仮想マシンがあり、マシンのブート後に(通常はリリースとカーネルが表示されるログインで)マシンのIPアドレスを表示したいのですが。
メッセージからわかるように/ etc/issuesからメッセージが取得されますが、いつどのようにメッセージに書き込むかわかりません。
これは単なるテキストファイルです。他のシェルスクリプトを使用してファイルにテキストを送信するのと同じ方法で書き込みます。このようなものは/ etc/issueをあなたの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アドレスに解決されます。複数のネットワークインターフェイスがあり、特定の1つを選択する場合は、次のコマンドで指定できます。
My IP address: \4{eth0}
ディストリビューションでサポートされているエスケープシーケンスのリストについては、man getty
を確認してください。
このスクリプトは、必要に応じて/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回だけ実行されるという欠点があります。
一度書くことができます。残念ながら、eth0のIPアドレスを表示するgettyエスケープシーケンスはありませんが、/ etc/issueでホスト名を表示するために使用できるエスケープシーケンスがあります:\ n
/ etc/issueでマシンのIPを常に静的に設定することで、ファイルに直接書き込むことができます。 /etc/issue.netファイルがリモートログインに使用されることに注意してください。そのため、このファイルも編集する必要がある場合があります。
とにかく、ターミナルウィンドウで作業した後は、初期画面と、それに伴うIP /ホストアドレス情報が失われます。最善の方法は、\ hまたは\ Hを使用してプロンプトでホスト名を設定することです(ほとんどのLinuxディストリビューションではそうです)。または、ホストにPS1変数で設定されていることがわかっているIPアドレスを静的に設定する/ etc /でPS1変数を設定できます。ほとんどのLinuxディストリビューションのプロファイル。
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
はじめに@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/
。
ここに着陸して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
よく働く!