ホスト名を変更しました。なぜbash PS1プロンプトが変更されないのですか


21

/ etc / hostnameを編集してホスト名を変更し、hostnameand hostname -Fコマンドを使用して新しいホスト名を表示できます。

ただし、シェルプロンプトには古いホスト名が表示されたままです。

ちなみにこれはUbuntu 11.0.4です。プロンプトは、.bashrc編集していないmyに設定されています。ログアウトしても再起動しても効果はありません。

標準のUbuntuの関連セクション.bashrc

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

($ debian_chrootはログイン時に設定解除されます...)

ホスト名は特殊文字\ hによって取得されると思います。

シェルで報告されるPS1設定は次のとおりです。

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

そして、ここにPS1が示すものがあります:

username@oldhostname:~$ 

ウォーレンの答えで正確なコマンドを使用してプロセスを繰り返しました。ホスト名は再起動するまで機能します/etc/hostnameが、新しいホスト名が含まれていても失われます。


何がecho $PS1表示されますか?
キース

@Keith-PS1を表示するように質問を更新しました。
ディズリー

更新のおかげで、dhcpがそれを許可したことを覚えていなかったので、それを許可しなかったので、それは私を追い払った。戻ってきて質問の先頭に立ち、(最終的に)あなたの編集を回答として追加してくれてありがとう、unix.SEへようこそ!
カレブ

回答:


24

キースとウォーレンによる以前の回答と実際の解決を踏まえて、私は自分の質問に答えています。認識されている問題は、「ホスト名を変更しましたが、なぜbash PS1プロンプトが変更されないのですか?」実際の問題は、「システムが再起動時に古いホスト名に戻ったのはなぜですか」でした。

この特定の場合の答えは、DHCPがローカル設定を上書きするように構成されていることです。

ホスト名を変更する効果的な方法

以下は、Ubuntu ymmvに適用されます。

  1. ファイルを編集して永続的なホスト名を変更します/etc/hostname

    echo 'mynewhostname' | sudo tee /etc/hostname
  2. 実行中のシステムのホスト名を変更するには、hostnameコマンドを使用します。手順1がなければ、これは再起動時にリセットされます。設定した値を使用することは理にかなっています:

    sudo hostname -F /etc/hostname

    またはその同等物:

    sudo hostname `cat /etc/hostname`
  3. で完全修飾ドメイン名(FQDN)を設定し/etc/hostsます。

    抜粋:

    127.0.0.1    mynewhostname.mydomainname.com    mynewhostname
  4. マシンがDHCPクライアントを実行しているかどうかを確認します。DHCPサーバーは、IPアドレスに加えて、ホスト名やDNS解決などの設定をオーバーライドする場合があります。「クラウド」ホスティングサービスがこれを行うと、構成ファイルを編集することなく、ディスク上のマシンのイメージを数回再利用できます。

    存在する場合は、DHCPクライアント構成ファイル/etc/default/dhcpcdを編集して、SET_HOSTNAMEディレクティブをコメント化します。

    #SET_HOSTNAME='yes'
  5. 可能であれば、システムを再起動し、名前が次のように変更されていることを確認します。

    hostname

ステップ4は私にとってニュースであり、私を捕まえました。この回答でプロセス全体を文書化することは有用だと思いました。そのステップは、(Linode)ホスティングサービスの指示の礼儀です。


この回答が適切だと思われる場合は、他の人からの賛成票に感謝します。自分の回答に投票できないからです。
ディズリー

2

ファイル/etc/hostnameはホスト名の永続的なコピーを保持し、起動時に実行時コピーを設定するために使用されます。再起動せずにランタイムコピーを変更するには、次のように言います。

$ sudo hostname `cat /etc/hostname`

または、hostname(1)コマンドのパラメーターとして新しいホスト名を渡すだけです。


私の問題は永続性にあります。ランタイムホスト名を使用して検証しました(質問を参照)。また、「sudo hostname -F / etc / hostname」は、コマンドの代替形式(man hostname)です。しかし、私はあなたが提案したようにしました。ホスト名は再起動時に失われます。:( FQDNも/etc/host.confに入れており、/etc/
host.conf

Qを解像度で更新しましたが、しばらくすると自分の質問に答えます。ウォーレン/キースに感謝します。
ディズリー

それは「FQDNも/ etc / hostsに入れました」であるはずです。
ディズリー

-1

私はあなたが持っている見る/hあなたにPS1今、あなたはあなたの古い&使用しようとしている新しいホスト名を投稿することができ、その後、FQDNを言及しますか?

  • /h 最初の「。」までのホスト名を表示します
  • /H 完全なFQDNを表示します

試してみる


こんにちはンジェクト。NBそれは/ hではなく\ hです。本番サーバーの場合、ホスト名は「oldname」と「newname」(ドットなし)でプライベートにするのが好きです。私はUnixの古い手ですが、これには困惑しました-dhcpcdがこのように使用されるのを見たことはありません。PS1プロンプトは間違っているように見えましたが、実際の問題は/ etc / hostnameが起動時にdhcpcdによって上書きされることでした。Dhcpcdが使用されるのは、マシンイメージを別のIPアドレス設定に再デプロイまたは複製できるため、ホストであるLinodeがDHCPを使用してデフォルト値を生成し、Ubuntoイメージの各インスタンスが一意になるためです。私はクラウド初心者なので、これはちょっとした楽しみでした。
ディズリー

-1
  • を大文字にhしますPS1

    PS1='${debian_chroot:+($debian_chroot)}\u@\H:\w\$ '
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.