web-dev-qa-db-ja.com

再起動せずにホスト名を強制的に更新する必要がある

再起動せずにシステムのホスト名を変更する必要があります。 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]#

グーグルはこれを回避しましたが、再起動せずにこれを行う方法を見つけることができませんでした。どうぞよろしくお願いいたします。

3
saleetzo

これは、hostnameコマンドを使用して実行できるはずです。

hostname -F /etc/hostname

この変更後、以前のホスト名は現在のプロンプトに引き続き表示されます。再起動せずに変更を確認するには、新しいシェルを入力します。 bashを使用している場合は、次のように入力します。

bash

新しいhostnameが表示されます。

3
Timothy Martin

ネットワークサービスの再起動は必要ありません。以下のいずれかの手順を実行できます。

hostnamectl set-hostname "new.Host.name"

システムからログアウトしてログインする

OR

hostname "new.Host.name"

システムへのログアウトとログイン

OR

echo "new.Host.name" > /proc/sys/kernel/hostname

システムからログアウトしてログインする

ただし、HOSTNAME/etc/sysconfig/networkファイルで設定されていることを確認してください。そうでない場合、システムの再起動中にホスト名を割り当てることができません。

0
Sourav

hostname(busybox&GNU)を使用し、/etc/hostnameで目的のホスト名を編集します。

hostname -F /etc/hostname
0
marc

これは、パスに表示される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" 
_
0
nwildner