Linux主机名,简单理解就是这台机器在网络里的名字。类似给电脑命名“我的台式机”,只不过Linux主机名供系统识别,同一网络下其他主机也能识别。主机名会显示在终端提示符、日志文件,还有SSH登录欢迎信息。你敲命令看到user@ubuntu:~$,ubuntu就是主机名。
主机名核心作用是网络内标识设备。举个例子,局域网两台Linux机器,一台命名web-server,另一台db-server,SSH连接时直接输入ssh db-server,不用记忆IP地址。前提是配合DNS或者/etc/hosts文件。主机名还会影响不少服务运行,邮件服务器发信会携带主机名,部分软件授权绑定主机名,监控系统依靠主机名区分各个节点。

查看当前主机名,终端输入hostname,回车直接返回结果。hostnamectl是新版systemd系统常用命令,输出静态主机名、瞬态主机名、图标名称、机器ID、操作系统版本等信息。只想查看主机名,hostname就足够。注意部分系统hostname返回短名称,部分返回完整域名,取决于系统配置。
修改主机名分为临时修改和永久修改。临时修改执行hostname 新名字,例如sudo hostname myserver,执行立刻生效,终端提示符不一定马上变化,新开终端或者重新登录就会显示新名称。这类修改重启后失效,系统恢复原有名称,适合临时调试测试,不适合长期使用。
永久修改要看Linux发行版。目前主流发行版使用systemd,推荐hostnamectl set-hostname 新名字。命令直接修改/etc/hostname文件,即时生效,无需重启。示例sudo hostnamectl set-hostname web01,执行完成后用hostnamectl确认。Ubuntu16.04之后、CentOS7之后、Debian9之后都支持这条命令。
老旧系统比如CentOS6,需要手动修改文件。编辑/etc/sysconfig/network,修改HOSTNAME=对应的字段,之后重启网络服务或者整机重启。同时修改/etc/hostname,没有该文件则跳过。老版本Ubuntu直接编辑/etc/hostname,替换内部主机名,执行sudo hostname 新名字即时生效。老系统现在使用不多,了解即可。
修改主机名之后,经常被忽略的是/etc/hosts文件。文件内一般存在一行127.0.1.1 旧主机名,如果修改主机名但没有同步更新这一行,部分程序解析本机主机名会变慢甚至报错。建议同步修改这一行主机名。如果局域网依靠主机名互相访问,其他机器的DNS或者/etc/hosts记录也要同步更新。
主机名命名有约定规范。只能包含字母、数字、连字符,不能使用下划线、空格或者特殊符号,长度一般不超过63字符。推荐全部小写,Linux区分大小写,但主机名通常不区分,小写能规避很多问题。不要以纯数字开头,也不要和现有域名冲突。如果主机名附带域名后缀,类似web01.example.com,这叫FQDN完全限定域名,普通主机名一般只用前面一段,也就是web01。
修改主机名之后,终端提示符不变,或者部分服务依旧显示旧名称,大多是当前登录shell保留旧环境变量,退出重新登录就能解决。重启后主机名变回原来的值,说明只做了临时修改,永久配置文件没有修改成功,回去检查/etc/hostname或者hostnamectl配置。
主机名虽小,多机环境下,起一个好识别、有业务含义的名称能节省大量管理成本。按业务用途命名web01、db01、cache01,或者按地域命名bj-web、sh-db,比默认localhost或者随机字符串更实用。管理几十台服务器,看到主机名就能判断设备用途,不用逐个查询IP。