How To Get Hostname In Linux

8 min read

The hostname serves as the unique identifier for a device on a network, allowing systems to recognize and communicate with one another without relying solely on IP addresses. Whether you are managing a fleet of servers, troubleshooting a connectivity issue, or writing automation scripts, knowing how to retrieve this identifier quickly is a fundamental Linux administration skill. This guide explores every reliable method to find your system's hostname, ranging from standard command-line utilities to inspecting configuration files directly.

Understanding the Linux Hostname Concept

Before diving into the commands, it helps to understand what the hostname actually represents in a Linux environment. Unlike a static label, the hostname in Linux exists in a few different contexts:

  • Static Hostname: The traditional hostname stored in /etc/hostname. This persists across reboots and is set during installation or by the system administrator.
  • Transient Hostname: A temporary hostname maintained by the kernel. It can be changed at runtime (using hostnamectl or the hostname command) but reverts to the static hostname upon reboot.
  • Pretty Hostname: A free-form UTF-8 name intended for presentation to users (e.g., "John's Workstation"), which may contain spaces and special characters not allowed in static hostnames.

Most modern distributions using systemd (like Ubuntu, Debian, RHEL, Fedora, Arch) manage these distinctions via hostnamectl, while older or minimal systems might rely solely on the /etc/hostname file and the hostname binary.

Method 1: Using the hostname Command (The Classic Approach)

The most universal and immediate way to display the system's DNS name is the hostname command. It works on virtually every Unix-like system, regardless of the init system (systemd, SysVinit, OpenRC) Less friction, more output..

Simply type:

hostname

The output will be a single line displaying the current transient hostname Small thing, real impact..

Useful Flags for the hostname Command

While the basic command is sufficient for a quick check, several flags provide deeper context:

  • -f or --fqdn: Displays the Fully Qualified Domain Name (FQDN). This combines the short hostname with the DNS domain name (e.g., server01.example.com). Note: This relies on correct DNS configuration in /etc/hosts or a reachable DNS server.
  • -s or --short: Displays the short hostname (the portion before the first dot). This is the default behavior.
  • -d or --domain: Prints only the DNS domain name.
  • -i or --ip-address: Shows the IP address(es) associated with the hostname. Be cautious with this flag; on systems with multiple interfaces, it may return multiple addresses or the loopback address (127.0.1.1) depending on /etc/hosts configuration.
  • -I or --all-ip-addresses: Displays all network addresses of the host, ignoring loopback. This is often more useful than -i for scripting.

Example:

$ hostname -f
web-prod-01.internal.company.local

Method 2: Using hostnamectl (The Modern Standard)

On any modern Linux distribution running systemd, hostnamectl is the preferred tool. It does not just display the hostname; it provides a comprehensive status overview, including the static, transient, and pretty hostnames, alongside system metadata like the kernel version, architecture, and machine ID.

Run the command without arguments for the full report:

hostnamectl

Sample Output:

   Static hostname: db-server-01
         Icon name: computer-vm
           Chassis: vm
        Machine ID: a1b2c3d4e5f6...
           Boot ID: f6e5d4c3b2a1...
    Virtualization: kvm
  Operating System: Ubuntu 22.04.3 LTS
            Kernel: Linux 5.15.0-91-generic
      Architecture: x86-64
 Hardware Vendor: QEMU
  Hardware Model: Standard PC (Q35 + ICH9, 2009)

Querying Specific Values with hostnamectl

If you are writing a script and need to parse only a specific value, use the --static, --transient, or --pretty flags combined with --value to suppress the label:

# Get only the static hostname (persistent across reboots)
hostnamectl --static

# Get only the transient hostname (current kernel value)
hostnamectl --transient

# Get the pretty hostname (human-readable)
hostnamectl --pretty

This structured output makes hostnamectl significantly superior to parsing /etc/hostname or the output of hostname for automation tools like Ansible, Puppet, or custom Bash scripts Not complicated — just consistent. That alone is useful..

Method 3: Inspecting the /proc/sys/kernel/hostname File

Linux exposes kernel parameters through the virtual filesystem procfs (/proc). That's why the current transient hostname is always available at /proc/sys/kernel/hostname. Reading this file is extremely fast and requires no external binary execution, which can be advantageous in highly constrained environments (like initramfs or minimal containers).

cat /proc/sys/kernel/hostname

This returns the exact same string as the hostname command (without arguments). Because it is a kernel interface, it reflects the transient hostname immediately if it has been changed at runtime, whereas /etc/hostname on disk will still show the old static value until updated.

Method 4: Reading the /etc/hostname Configuration File

For the persistent, static hostname—the one that survives a reboot—you must look at the configuration file. On systemd-based systems, this is /etc/hostname. On some older or non-systemd distributions (like Alpine Linux or older Slackware versions), it might be /etc/HOSTNAME or defined inside /etc/sysconfig/network Simple as that..

cat /etc/hostname

Important Distinction: If you recently changed the hostname using hostnamectl set-hostname or the hostname command without updating the file (or without the tool doing it automatically), this file will show the old name, while hostname and hostnamectl show the new transient name. Always verify this file if you are auditing system configuration for persistence.

Method 5: Leveraging the uname Command

While primarily used for kernel information, the uname command can reveal the nodename (network node hostname) via the -n flag Nothing fancy..

uname -n

According to POSIX standards, this should output the hostname of the system. In practice, on Linux, uname -n outputs the same transient hostname as the hostname command and /proc/sys/kernel/hostname. It is a handy alternative if you are already using uname -a to check kernel versions and want the hostname in the same workflow.

Method 6: Checking the /etc/hosts File for Resolution Context

Technically, /etc/hosts does not store the hostname; it maps IP addresses to hostnames. On the flip side, it is critical for hostname resolution. If the hostname -f (FQDN) command returns an unexpected result or hangs, the issue is almost always in this file.

A standard /etc/hosts entry looks like this:

127.0.0.1       localhost
127.0.1.1       my-server.my.domain   my-server
  • 127.0.0.1: Reserved for the loopback interface (localhost).
  • 127.0.1.1: A Debian/Ubuntu convention

for mapping the system's own hostname to a distinct loopback IP (separate from 127.1) to ensure the FQDN resolves correctly even when the network is down. my.But 0. * FQDN First: The Fully Qualified Domain Name (my-server.Plus, 0. domain) must be the first entry after the IP; the short name (my-server) follows as an alias And that's really what it comes down to..

If this file is misconfigured—missing the FQDN, having the short name first, or pointing the hostname to a non-loopback IP that changes—commands like hostname -f, hostname --fqdn, or sudo (which performs a hostname lookup) may hang, fail, or return incorrect data.

Method 7: Querying systemd-hostnamed via hostnamectl

On modern systemd-based distributions, hostnamectl is the authoritative tool for querying and setting all three hostname classes simultaneously. It communicates directly with the systemd-hostnamed D-Bus service, providing a unified view that raw file reads cannot.

hostnamectl

Output includes:

  • Static hostname: The content of /etc/hostname (persistent). Worth adding: * Transient hostname: The current kernel value (runtime). Plus, * Pretty hostname: A free-form UTF-8 name for presentation (e. Even so, g. Which means , "Web Server 01 🌐"), stored in /etc/machine-info. * Icon name/Chassis: Metadata used by graphical environments.

To retrieve just one specific value programmatically (useful for scripts):

hostnamectl --static      # Persistent static hostname
hostnamectl --transient   # Current kernel hostname
hostnamectl --pretty      # User-friendly description

Method 8: Using sysctl for Kernel Parameter Inspection

Since the transient hostname is a kernel parameter (kernel.hostname), sysctl provides a standardized sysadmin interface to read (and write) it, consistent with how other kernel tunables are managed And that's really what it comes down to..

sysctl kernel.hostname
# Output: kernel.hostname = my-server

This is particularly useful when auditing kernel state via configuration management tools (Ansible, SaltStack) that prefer sysctl modules over raw file reads or command execution. Note that writing via sysctl -w kernel.hostname=newname changes only the transient hostname; it does not update /etc/hostname.

Method 9: NetworkManager (nmcli) and Cloud Metadata

On systems managed by NetworkManager, the hostname can be viewed (and set) via nmcli. This reflects the "network" view of the host identity.

nmcli general hostname

In cloud environments (AWS, Azure, GCE, DigitalOcean), the effective hostname is often injected via metadata services at boot. The local Linux hostname might be localhost or a generic default, while the cloud console shows a different name. To see what the cloud provider thinks the hostname is:

# AWS EC2
curl http://169.254.169.254/latest/meta-data/local-hostname

# Google Cloud (GCE)
curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/hostname

# Azure
curl -H "Metadata:true" "http://169.254.169.254/metadata/instance/compute/name?api-version=2021-02-01&format=text"

Discrepancies between hostnamectl and cloud metadata are a common source of confusion in dynamic infrastructure.

Method 10: Programmatic Access (Python, Go, C)

For application developers, shelling out to hostname is inefficient. Native libraries provide direct access:

Python (Standard Library):

import socket
# Transient hostname (kernel)
print(socket.gethostname())          
# FQDN (resolves via /etc/hosts or DNS)
print(socket.getfqdn())              

Go (Standard Library):

package main
import ("fmt"; "os")
func main() {
    name, _ := os.Hostname() // Reads /proc/sys/kernel/hostname or syscall
    fmt.Println(name)
}

C (POSIX):

#include 
#include 
int main() {
    char hostname[256];
    gethostname(hostname, sizeof(hostname)); // Syscall: gethostname(2)
    printf("%s\n", hostname);
    return 0;
}

These calls map directly to the gethostname(2) syscall, which reads the same kernel buffer exposed by /proc/sys/kernel/hostname.


Summary: Choosing the Right Method

Method Source Scope Best For
**hostname / `uname -
New and Fresh

Straight from the Editor

Worth the Next Click

Before You Go

Thank you for reading about How To Get Hostname In Linux. We hope the information has been useful. Feel free to contact us if you have any questions. See you next time — don't forget to bookmark!
⌂ Back to Home