为了便于管理,通常会为服务器和个人计算机赋予一个可读的主机名。那么,如何修改Linux/macOS的主机名呢?
临时修改
hostname命令
在Linux/macOS中,hostname命令既可以查看当前主机名,也可以临时修改主机名。在Linux的hostname帮助手册中,我找到了如下的描述文字:
Note, that this is effective only until the next reboot. Edit /etc/hostname for permanent change.
Note, that only the super-user can change the names.
言下之意是:第一,只有超级用户才能修改主机名;第二,使用这种方式进行修改,重启后就会失效。
下面,我将使用该命令,将主机名修改为33
(当前主机名为hgs
):
在修改成功后,hostname输出了更新后的主机名。
然而,终端中显示的主机名,即提示符hegongshan@
和:
中间的字符串仍然为原来的主机名hgs
。此时,只需要退出当前终端,然后打开一个新的终端,就能看到修改后的主机名。
调用库函数
事实上,hostname命令调用了函数gethostname()和sethostname()去实现上面的查看和修改操作。
这两个函数定义在<unistd.h>,函数原型如下所示:
1 | /* |
接下来,我将使用C语言获取主机名,并将主机名恢复为原来的hgs
:
1 |
|
执行结果如下所示:
注意:在执行时,使用了sudo命令,这是因为只有超级用户才能修改主机名;如果不加sudo,修改操作将会执行失败。
此外,主机名的长度也是有限制的,最大长度为配置项_SC_HOST_NAME_MAX
设置的字节数。
1 |
|
执行结果如下所示:
也就是说,在Linux中,主机名的最大长度为64个字符(1个字符占1个字节)。
永久修改
Linux
在Linux中,如果想要永久地修改主机名,只需要修改文件/etc/hostname
即可,修改在重启后生效。
需要注意的是,该文件的所有者为root,其他用户没有写权限:
因此,在执行修改操作时,同样需要使用root账号,或者添加sudo
命令。
macOS
在macOS中,可以使用scutil
命令永久修改主机名。例如,将主机名更改为33
:
重新进入终端后,修改生效: