Diz*_*ley 23 bash ubuntu hostname
我通过编辑 /etc/hostname 更改了我的主机名,并且可以使用hostname和hostname -F命令查看新的主机名。
但是 shell 提示仍然显示旧的主机名。
顺便说一下,这是 Ubuntu 11.0.4。提示设置在我.bashrc没有编辑的我。注销甚至重新启动都没有效果。
标准 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
Run Code Online (Sandbox Code Playgroud)
($debian_chroot 在我登录时未设置...)
我猜主机名是由特殊字符 \h 获取的。
这是 shell 中报告的 PS1 设置:
PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
Run Code Online (Sandbox Code Playgroud)
这是 PS1 显示的内容:
username@oldhostname:~$
Run Code Online (Sandbox Code Playgroud)
我使用沃伦回答中的确切命令重复了这个过程。事实证明,主机名在重新启动之前一直有效,但随后它就会丢失,即使/etc/hostname包含新的主机名。
Diz*_*ley 27
根据 Keith 和 Warren 之前的回答以及实际解决方案,我正在回答我自己的问题。感知到的问题是“我更改了主机名,为什么我的 bash PS1 提示未更改?” 实际问题是“为什么我的系统在重新启动时恢复到其旧主机名?”
在这种特殊情况下的答案是:DHCP 配置为覆盖本地设置。
更改主机名的有效方法
以下适用于 Ubuntu,ymmv。
通过编辑文件更改持久主机名/etc/hostname。
echo 'mynewhostname' | sudo tee /etc/hostname
Run Code Online (Sandbox Code Playgroud)要更改正在运行的系统的主机名,请使用hostname命令。如果没有步骤 1,这将在重新启动时重置。使用您刚刚设置的值是有意义的:
sudo hostname -F /etc/hostname
Run Code Online (Sandbox Code Playgroud)
或其等价物:
sudo hostname `cat /etc/hostname`
Run Code Online (Sandbox Code Playgroud)在/etc/hosts.
摘抄:
127.0.0.1 mynewhostname.mydomainname.com mynewhostname
Run Code Online (Sandbox Code Playgroud)检查机器是否正在运行 DHCP 客户端。除了 IP 地址之外,DHCP 服务器还可以覆盖主机名和 DNS 解析等设置。“云”托管服务可能会这样做,因此磁盘上的机器映像可以多次重复使用,而无需编辑配置文件。
如果存在,请编辑 DHCP 客户端配置文件/etc/default/dhcpcd以注释掉该SET_HOSTNAME指令:
#SET_HOSTNAME='yes'
Run Code Online (Sandbox Code Playgroud)如果可能,重新启动系统并检查名称是否已更改:
hostname
Run Code Online (Sandbox Code Playgroud)第 4 步对我来说是个新闻,并让我感到意外。我认为在这个答案中记录整个过程会很有用。这一步是由(Linode)我的托管服务的说明提供的,我真的应该正确阅读。
该文件/etc/hostname保存主机名的持久副本,并在启动期间用于设置运行时副本。要更改运行时副本而不重新启动,请说:
$ sudo hostname `cat /etc/hostname`
Run Code Online (Sandbox Code Playgroud)
或者只是将新主机名作为参数传递给命令hostname(1)。