hostname 是Linux系统中用于显示或设置系统主机名的命令。主机名在网络环境中非常重要,它用于标识网络中的计算机,使其他设备能够通过名称而不是IP地址来访问该计算机。主机名分为三种类型:静态主机名(static)、临时主机名(transient)和灵活主机名(pretty)。
# 显示主机名
hostname [选项]
# 设置主机名
hostname [选项] 新主机名
| 选项 | 说明 |
|---|---|
-a, --alias |
显示主机的别名 |
-A, --all-fqdns |
显示所有FQDN(完全限定域名) |
-b, --boot |
如果未设置主机名,则设置默认主机名 |
-d, --domain |
显示DNS域名 |
-f, --fqdn, --long |
显示FQDN(完全限定域名) |
-F, --file 文件 |
从指定文件读取主机名 |
-h, --help |
显示帮助信息 |
-i, --ip-address |
显示主机的IP地址 |
-I, --all-ip-addresses |
显示主机的所有IP地址 |
-s, --short |
显示短主机名(不显示域名部分) |
-V, --version |
显示版本信息 |
-y, --yp, --nis |
显示NIS域名 |
| 类型 | 说明 | 配置文件 |
|---|---|---|
静态主机名static |
系统启动时从配置文件读取的主机名,由系统管理员设置,存储在配置文件中 | /etc/hostname |
临时主机名transient |
运行时动态设置的主机名,系统重启后会丢失,通常由DHCP或mDNS设置 | 运行时内核参数 |
灵活主机名pretty |
可以包含特殊字符和空格的主机名,用于显示给用户 | /etc/machine-info |
查看当前系统的主机名:
# 显示当前主机名
hostname
# 显示短主机名(不包含域名)
hostname -s
# 显示FQDN(完全限定域名)
hostname -f
# 显示DNS域名部分
hostname -d
查看与主机名相关的网络信息:
# 显示主机的IP地址
hostname -i
# 显示所有IP地址
hostname -I
# 显示所有FQDN
hostname -A
# 显示主机别名
hostname -a
临时修改主机名(重启后失效):
# 查看当前主机名
hostname
# 临时设置新主机名
sudo hostname new-server-name
# 验证修改
hostname
不同Linux发行版的永久主机名设置方法:
# 方法1:使用hostnamectl命令(systemd系统)
sudo hostnamectl set-hostname new-server-name
# 方法2:直接修改配置文件
echo "new-server-name" | sudo tee /etc/hostname
# 方法3:使用sysctl命令(旧系统)
sudo sysctl kernel.hostname=new-server-name
# 方法4:使用hostname命令并保存到文件
sudo hostname new-server-name
sudo hostname > /etc/hostname
systemd系统推荐使用hostnamectl管理主机名:
# 查看所有主机名信息
hostnamectl
# 设置静态主机名
sudo hostnamectl set-hostname "server.example.com"
# 设置灵活主机名(可包含空格和特殊字符)
sudo hostnamectl set-hostname --pretty "Production Server #1"
# 只设置临时主机名
sudo hostnamectl set-hostname --transient "temp-server"
# 查看特定类型的主机名
hostnamectl status --static
hostnamectl status --transient
hostnamectl status --pretty
# 创建包含主机名的文件
echo "my-new-hostname" > /tmp/new-hostname.txt
# 从文件读取并设置主机名
sudo hostname -F /tmp/new-hostname.txt
# 验证
hostname
# 显示NIS域名
hostname -y
# 如果未设置主机名,则设置默认主机名
sudo hostname -b
# 显示与主机名解析相关的信息
getent hosts $(hostname)
# 查看DNS解析
nslookup $(hostname)
dig $(hostname)
存储静态主机名的主配置文件:
# 查看文件内容
cat /etc/hostname
# 输出:server01
# 编辑文件(需要root权限)
sudo nano /etc/hostname
# 或
sudo vim /etc/hostname
本地主机名解析文件,将主机名映射到IP地址:
# 典型配置示例
cat /etc/hosts
# 输出:
# 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
# ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# 192.168.1.100 server01.example.com server01
存储灵活主机名和其他机器信息:
# 查看文件内容
cat /etc/machine-info
# 可能包含:
# PRETTY_HOSTNAME="Production Web Server"
# ICON_NAME=computer-server
# CHASSIS=server
/proc/sys/kernel/hostname读取初始主机名/etc/hostname文件/etc/hostname存在,则设置静态主机名/etc/hosts文件以确保本地解析正常工作hostname命令临时修改的主机名在重启后会丢失hostname -I会显示所有接口的IP地址# 1. 检查当前所有类型的主机名
hostnamectl
# 2. 检查主机名解析
hostname -f
getent hosts $(hostname)
# 3. 检查DNS解析
nslookup $(hostname)
dig $(hostname) A
# 4. 检查相关配置文件
cat /etc/hostname
cat /etc/hosts
cat /etc/machine-info
# 5. 检查内核参数
sysctl kernel.hostname
cat /proc/sys/kernel/hostname
# 6. 检查网络服务是否覆盖主机名
# 对于NetworkManager
nmcli general hostname
# 对于systemd-networkd
networkctl status
# 7. 重启主机名服务(旧系统)
sudo service hostname restart
# 或
sudo systemctl restart systemd-hostnamed
#!/bin/bash
# 获取主机名并存储在变量中
HOSTNAME=$(hostname)
SHORT_HOSTNAME=$(hostname -s)
FQDN=$(hostname -f)
echo "当前主机名: $HOSTNAME"
echo "短主机名: $SHORT_HOSTNAME"
echo "FQDN: $FQDN"
# 根据主机名执行不同操作
case $(hostname -s) in
web*)
echo "这是Web服务器"
;;
db*)
echo "这是数据库服务器"
;;
*)
echo "这是其他类型服务器"
;;
esac
# 检查主机名是否有效
if [[ ! $(hostname) =~ ^[a-zA-Z0-9.-]+$ ]]; then
echo "错误: 主机名包含无效字符"
exit 1
fi
# 自动生成基于主机名的配置
CONFIG_FILE="/etc/app/config-$(hostname -s).conf"
echo "生成配置文件: $CONFIG_FILE"
hostnamectl - systemd系统的主机名管理工具domainname - 显示或设置系统的NIS域名dnsdomainname - 显示系统的DNS域名sysctl - 查看和修改内核参数,包括主机名uname - 显示系统信息,包括节点名(主机名)nmcli - NetworkManager命令行工具,可管理主机名