再起動せずにシステムのホスト名を変更する必要があります。 CentOS 7を実行していて、/ etc/hostnameファイルに正しいホスト名がありますが、プロンプトに古いホスト名が表示されます。システムを再起動すると、ホスト名ファイルを確認して適用することはわかっていますが、再起動せずに更新する方法はありますか?ここにコマンドラインからの情報があります:
[root@gandalf sysconfig]# cat network
NETWORKING=yes
GATEWAY=192.168.80.1
HOSTNAME="sauron.domain.com"
[root@gandalf sysconfig]# cd ..
[root@gandalf etc]# cat hostname
sauron
[root@gandalf etc]#
私はすぐにこのサーバーを再起動できず、ホスト名が古いシステム名を示しているため、私のチームの一部がサーバーを混同しています。簡単に言えば、表示するプロンプトが必要です[user@sauron dir]#
の代わりに [user@gandalf dir]#
。
グーグルはこれを回避しましたが、再起動せずにこれを行う方法を見つけることができませんでした。どうぞよろしくお願いいたします。
これは、hostname
コマンドを使用して実行できるはずです。
hostname -F /etc/hostname
この変更後、以前のホスト名は現在のプロンプトに引き続き表示されます。再起動せずに変更を確認するには、新しいシェルを入力します。 bash
を使用している場合は、次のように入力します。
bash
新しいhostname
が表示されます。
ネットワークサービスの再起動は必要ありません。以下のいずれかの手順を実行できます。
hostnamectl set-hostname "new.Host.name"
システムからログアウトしてログインする
OR
hostname "new.Host.name"
システムへのログアウトとログイン
OR
echo "new.Host.name" > /proc/sys/kernel/hostname
システムからログアウトしてログインする
ただし、HOSTNAME
が/etc/sysconfig/network
ファイルで設定されていることを確認してください。そうでない場合、システムの再起動中にホスト名を割り当てることができません。
hostname
(busybox&GNU)を使用し、/etc/hostname
で目的のホスト名を編集します。
hostname -F /etc/hostname
これは、パスに表示されるHOSTNAME
が、hostname
コマンドでは直接処理されず、_/etc/hostname
_の内部の実際の状態を直接反映しないために発生します。 _/etc/profile
_でログインしたときに設定される変数です。このファイルの小さなチャンクを見てください:
_HOSTNAME=`/bin/hostname 2>/dev/null`
HISTSIZE=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
export HISTCONTROL=ignoreboth
else
export HISTCONTROL=ignoredups
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
_
次の行を参照してください。
_HOSTNAME=`/bin/hostname 2>/dev/null`
_
これが、シェルプロンプトで使用される現在のホスト名を「キャッチ」するものです。そのため、そのホストに接続しているすべてのユーザーはログアウトして再度ログインする必要があります。しかし、これは動作の一部にすぎません。特定のシェルログインファイルを確認する必要があります(bashは通常_/etc/bashrc
_を使用します)。ここで_PS1
_プロンプト変数がどこにアセンブルされているかがわかります。
_# System wide functions and aliases
# Environment stuff goes in /etc/profile
# It's NOT a good idea to change this file unless you know what you
# are doing. It's much better to create a custom.sh Shell script in
# /etc/profile.d/ to make custom changes to your environment, as this
# will prevent the need for merging in future updates.
# are we an interactive shell?
if [ "$PS1" ]; then
if [ -z "$Prompt_COMMAND" ]; then
case $TERM in
xterm*)
if [ -e /etc/sysconfig/bash-Prompt-xterm ]; then
Prompt_COMMAND=/etc/sysconfig/bash-Prompt-xterm
else
Prompt_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
fi
;;
screen)
if [ -e /etc/sysconfig/bash-Prompt-screen ]; then
Prompt_COMMAND=/etc/sysconfig/bash-Prompt-screen
else
Prompt_COMMAND='printf "\033]0;%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"'
fi
;;
*)
[ -e /etc/sysconfig/bash-Prompt-default ] && Prompt_COMMAND=/etc/sysconfig/bash-Prompt-default
;;
esac
fi
_
_/etc/profile
_でエクスポートされたHOSTNAME
変数がここで使用されます:)。 bash(1)
、INVOCATION
セクションをご覧ください。
あなたの質問に単純な答えはありませんが、私が提案できることは:wall
コマンドを使用して全員に変更を伝えます:
_# wall "Hostname changed. Please logout and login again to have your Prompt information updated"
_