Linux hostname 命令
什么是 hostname
hostname(主机名)是标识网络中计算机的唯一名称。就像每个人都有自己的名字一样,每台计算机也需要一个独特的名称来在网络中被识别。
在 Linux 系统中,hostname 用于:
- 标识本地计算机
- 在网络通信中识别设备
- 影响某些网络服务的运行
- 显示在终端提示符中
主机名通常分为三种类型:
- 静态主机名:存储在配置文件中,系统重启后保持不变
- 临时主机名:运行时临时设置,重启后失效
- 漂亮主机名:可包含特殊字符的描述性名称(如"My Laptop")
hostname 命令基本语法
hostname 命令的基本使用格式如下:
hostname [选项] [新主机名]
如果不带任何参数,直接执行 hostname
命令会显示当前系统的主机名:
实例
$ hostname
ubuntu-server
ubuntu-server
常用选项参数说明
hostname 命令支持多种选项来查看和设置不同类型的主机名:
选项 | 说明 |
---|---|
-a , --alias |
显示主机的别名(如果设置了的话) |
-A , --all-fqdns |
显示所有网络接口的 FQDN(完全限定域名) |
-b , --boot |
如果未设置主机名,则使用默认主机名 |
-d , --domain |
显示 DNS 域名 |
-f , --fqdn , --long |
显示 FQDN(完全限定域名) |
-F , --file |
从指定文件读取主机名 |
-i , --ip-address |
显示主机的 IP 地址 |
-I , --all-ip-addresses |
显示所有网络接口的 IP 地址 |
-s , --short |
显示短主机名(去掉域名部分) |
-y , --yp , --nis |
显示 NIS 域名 |
设置主机名的三种方法
1. 临时设置主机名(重启后失效)
实例
sudo hostname new-hostname
示例:
实例
$ sudo hostname test-server
$ hostname
test-server
$ hostname
test-server
注意:这种方法设置的主机名在系统重启后会恢复为原来的主机名。
2. 永久设置主机名(修改配置文件)
在大多数现代 Linux 发行版中(使用 systemd),可以这样永久修改主机名:
实例
sudo hostnamectl set-hostname new-hostname
示例:
实例
$ sudo hostnamectl set-hostname production-server
这个命令会同时修改:
/etc/hostname
文件- 系统的静态主机名
3. 手动编辑配置文件
你也可以直接编辑主机名配置文件:
编辑
/etc/hostname
文件:sudo nano /etc/hostname
删除原有内容,只写入新的主机名
更新
/etc/hosts
文件,确保有一行将主机名映射到 127.0.0.1:127.0.0.1 localhost new-hostname
应用更改(无需重启):
sudo systemctl restart systemd-hostnamed
查看不同类型的主机名
查看静态主机名
实例
hostnamectl --static
# 或
cat /etc/hostname
# 或
cat /etc/hostname
查看临时主机名
实例
hostname
# 或
hostnamectl --transient
# 或
hostnamectl --transient
查看漂亮主机名
实例
hostnamectl --pretty
查看 FQDN(完全限定域名)
实例
hostname -f
# 或
hostnamectl --fqdn
# 或
hostnamectl --fqdn
实际应用示例
示例1:查看当前系统的完整主机信息
实例
$ hostnamectl
Static hostname: ubuntu-server
Icon name: computer-vm
Chassis: vm
Machine ID: 1a2b3c4d5e6f7g8h9i0j
Boot ID: 1k2l3m4n5o6p7q8r9s0t
Virtualization: kvm
Operating System: Ubuntu 20.04 LTS
Kernel: Linux 5.4.0-42-generic
Architecture: x86-64
Static hostname: ubuntu-server
Icon name: computer-vm
Chassis: vm
Machine ID: 1a2b3c4d5e6f7g8h9i0j
Boot ID: 1k2l3m4n5o6p7q8r9s0t
Virtualization: kvm
Operating System: Ubuntu 20.04 LTS
Kernel: Linux 5.4.0-42-generic
Architecture: x86-64
示例2:同时设置静态和漂亮主机名
实例
sudo hostnamectl set-hostname "server01" --pretty "Primary Web Server"
示例3:通过网络获取主机名信息
实例
$ hostname -i
192.168.1.100
$ hostname -I
192.168.1.100 10.0.0.100
192.168.1.100
$ hostname -I
192.168.1.100 10.0.0.100
常见问题与解决方案
问题1:设置主机名后不生效
解决方案:
- 确保同时更新了
/etc/hosts
文件 - 检查是否有其他服务(如 NetworkManager)覆盖了主机名设置
- 尝试重启系统或运行:
sudo systemctl restart systemd-hostnamed
问题2:主机名包含非法字符
解决方案:
- 主机名只能包含:
- 字母 a-z
- 数字 0-9
- 连字符 (-)
- 不能以连字符开头或结尾
- 长度通常限制在 63 个字符内
问题3:网络服务无法识别新主机名
解决方案:
- 重启相关网络服务:
sudo systemctl restart networking
- 清除 DNS 缓存(如果适用)
- 确保 DNS 服务器已更新(如果是网络中的服务器)
最佳实践建议
命名规范:
- 使用有意义的名称,如 "web-prod-01"、"db-backup-02"
- 避免使用特殊字符和下划线
- 保持一致性,特别是在服务器集群中
多主机名环境:
- 使用静态主机名作为主要标识
- 使用漂亮主机名提供人类可读的描述
- 通过
/etc/hosts
为重要服务器添加别名
自动化管理:
- 在云环境中,可以使用 cloud-init 自动设置主机名
- 通过配置管理工具(如 Ansible)批量管理主机名
文档记录:
- 维护主机名与服务器角色的对应文档
- 在监控系统中使用主机名作为标识
总结
hostname 是 Linux 系统管理中的基础但重要的概念。通过本文,你应该已经掌握了:
- 查看和设置不同类型主机名的方法
- 永久修改主机名的正确流程
- 与主机名相关的常见问题解决方案
- 主机名管理的最佳实践
记住,在修改生产环境的主机名前,务必评估可能的影响,特别是在集群环境中,主机名的变更可能会影响服务发现和监控系统。
点我分享笔记