hostnamectl ist ein systemd-Tool zur Verwaltung des System-Hostnames. Es ermöglicht das Anzeigen und Setzen des Hostnames sowie zusätzlicher Systemidentifikationsinformationen wie Betriebssystem, Kernel-Version und Hardware-Informationen.
hostnamectl [OPTIONEN] [BEFEHL]
Linux unterscheidet drei Arten von Hostnamen:
| Typ | Beschreibung | Beispiel |
|---|---|---|
| Static | Permanenter Hostname, gespeichert in /etc/hostname | server01 |
| Transient | Temporärer Hostname vom Kernel, kann sich zur Laufzeit ändern | server01.local |
| Pretty | Freiformatiger, beschreibender Name für Anzeige | Web Server 01 |
# Vollständige Systeminformationen hostnamectl # Nur Hostname ausgeben hostnamectl hostname # Alternative (klassisch) hostname
Ausgabe-Beispiel:
Static hostname: server01
Icon name: computer-vm
Chassis: vm
Machine ID: 1234567890abcdef1234567890abcdef
Boot ID: fedcba0987654321fedcba0987654321
Virtualization: kvm
Operating System: Ubuntu 22.04.3 LTS
Kernel: Linux 5.15.0-91-generic
Architecture: x86-64
# Static Hostname setzen (permanent) sudo hostnamectl set-hostname meinserver # Mit FQDN (Fully Qualified Domain Name) sudo hostnamectl set-hostname server01.example.com # Nur Pretty Hostname setzen sudo hostnamectl set-hostname "Production Web Server" --pretty # Transient Hostname setzen (temporär) sudo hostnamectl set-hostname temp-server --transient
# /etc/hosts anpassen sudo nano /etc/hosts # Alte Einträge ersetzen: 127.0.1.1 alter-name # Durch neue ersetzen: 127.0.1.1 neuer-name
# Chassis-Typ definieren (für Systemerkennung) sudo hostnamectl set-chassis server # Mögliche Werte: # desktop, laptop, server, tablet, handset, watch, vm, container
# Deployment-Umgebung setzen sudo hostnamectl set-deployment production # Beispiele: development, testing, staging, production
# Standort des Systems sudo hostnamectl set-location "Rechenzentrum Frankfurt, Rack 12"
# Hostname mit allen Informationen setzen sudo hostnamectl set-hostname web01.example.com sudo hostnamectl set-hostname "Production Webserver 01" --pretty sudo hostnamectl set-chassis server sudo hostnamectl set-deployment production sudo hostnamectl set-location "DC Frankfurt Rack 12" # /etc/hosts aktualisieren echo "127.0.1.1 web01.example.com web01" | sudo tee -a /etc/hosts # Ergebnis prüfen hostnamectl
# Gültige Zeichen: a-z, 0-9, Bindestrich (-) # NICHT erlaubt: Leerzeichen, Unterstriche, Sonderzeichen # Max. 64 Zeichen # Gut: sudo hostnamectl set-hostname web-server-01 # Schlecht: sudo hostnamectl set-hostname "web_server 01" # Fehler!
#!/bin/bash # Hostname in Variable speichern HOSTNAME=$(hostnamectl hostname) # Prüfen ob Hostname gesetzt ist if [ -z "$HOSTNAME" ]; then echo "Kein Hostname gesetzt!" exit 1 fi echo "Arbeite auf Server: $HOSTNAME"
# Vollständige Ausgabe hostnamectl status # Als JSON (für Skripte) hostnamectl --json=pretty # Einzelne Felder abfragen hostnamectl --property=StaticHostname hostnamectl --property=KernelVersion hostnamectl --property=OperatingSystemPrettyName
# Chassis-Typ anzeigen hostnamectl --property=Chassis # Virtualisierung prüfen hostnamectl --property=Virtualization # Architektur hostnamectl --property=Architecture
Der Static Hostname wird hier gespeichert:
# Inhalt anzeigen cat /etc/hostname # Manuell bearbeiten (nicht empfohlen, besser hostnamectl nutzen) echo "neuer-server" | sudo tee /etc/hostname
Zusätzliche Systeminfos (Pretty Name, Chassis, etc.):
# Inhalt anzeigen cat /etc/machine-info # Beispiel-Inhalt: PRETTY_HOSTNAME="Production Web Server" CHASSIS="server" DEPLOYMENT="production" LOCATION="DC Frankfurt Rack 12"
Bei Cloud-Instanzen (AWS, Azure, etc.) wird der Hostname oft von Cloud-Init gesetzt:
# Cloud-Init Konfiguration prüfen cat /etc/cloud/cloud.cfg | grep preserve_hostname # Änderungen persistent machen # In /etc/cloud/cloud.cfg setzen: preserve_hostname: true
# Dienste, die Hostname cachen, neu starten sudo systemctl restart systemd-hostnamed # Prüfen ob /etc/hostname existiert ls -l /etc/hostname # Manuelle Synchronisation sudo hostnamectl set-hostname $(cat /etc/hostname)
# Preserve Hostname aktivieren sudo nano /etc/cloud/cloud.cfg # Setze: preserve_hostname: true # Oder Cloud-Init Netzwerk-Modul deaktivieren sudo touch /etc/cloud/cloud-init.disabled
# Bereinigungsfunktion clean_hostname() { echo "$1" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9-' | cut -c1-64 } # Verwendung NEW_HOSTNAME=$(clean_hostname "Web Server 01") sudo hostnamectl set-hostname "$NEW_HOSTNAME"