====== hostnamectl - Hostname verwalten ======
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.
===== Voraussetzungen =====
* Zugriff auf die Linux-Kommandozeile
* SystemD-basiertes System (Ubuntu 15.04+, Debian 8+, CentOS 7+)
* Root-Rechte zum Ändern des Hostnames
===== Grundlegende Syntax =====
hostnamectl [OPTIONEN] [BEFEHL]
===== Hostname-Typen =====
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 |
===== Häufige Anwendungsfälle =====
==== Hostname anzeigen ====
# 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
==== Hostname setzen ====
# 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
==== Nach Hostname-Änderung ====
# /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
===== Erweiterte Optionen =====
==== Chassis-Typ setzen ====
# Chassis-Typ definieren (für Systemerkennung)
sudo hostnamectl set-chassis server
# Mögliche Werte:
# desktop, laptop, server, tablet, handset, watch, vm, container
==== Deployment-Umgebung ====
# Deployment-Umgebung setzen
sudo hostnamectl set-deployment production
# Beispiele: development, testing, staging, production
==== Location setzen ====
# Standort des Systems
sudo hostnamectl set-location "Rechenzentrum Frankfurt, Rack 12"
===== Praktische Beispiele =====
==== Komplett-Konfiguration für Server ====
# 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
==== Hostname-Regeln und Best Practices ====
# 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!
==== Hostname in Skripten verwenden ====
#!/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"
===== Informationen abfragen =====
==== Detaillierte Systeminformationen ====
# 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
==== Hardware-Informationen ====
# Chassis-Typ anzeigen
hostnamectl --property=Chassis
# Virtualisierung prüfen
hostnamectl --property=Virtualization
# Architektur
hostnamectl --property=Architecture
===== Konfigurationsdateien =====
==== /etc/hostname ====
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
==== /etc/machine-info ====
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"
===== Integration mit Cloud-Init =====
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
===== Wichtige Hinweise =====
* Hostname-Änderungen erfordern **keinen Neustart**
* Nach Änderung sollte **/etc/hosts** aktualisiert werden
* Bei DNS-basierten Netzwerken muss der DNS-Eintrag passen
* Einige Dienste (z.B. Mailserver) benötigen FQDN
* Cloud-Instanzen können Hostname bei Neustart zurücksetzen
===== Fehlerbehebung =====
==== Hostname wird nicht übernommen ====
# 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)
==== Cloud-Init überschreibt 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
==== Hostname enthält ungültige Zeichen ====
# 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"
===== Siehe auch =====
* [[sammlung:localectl|localectl - Locale und Sprache verwalten]]
* [[sammlung:timedatectl|timedatectl - Zeit und Datum verwalten]]
* [[sammlung:systemd|SystemD Grundlagen]]
* [[sammlung:wichtige_konfigurationsdateien|Wichtige Konfigurationsdateien]]
{{tag>linux systemd hostname system konfiguration}}