15%

Save 15% on All Hosting Services

Test your skills and get Discount on any hosting plan

Use code:

Skills
Get Started
30.10.2024
1 +1

Mastering the Linux Hosts File: The Complete Guide to Local DNS Control

Whether you're a developer testing a new application, a sysadmin troubleshooting DNS propagation, or simply someone who wants to block distracting websites, the /etc/hosts file is one of the most powerful and underutilized tools on any Linux system. This guide provides a deep, practical walkthrough of everything you need to know — from understanding what the hosts file is to editing it safely on your VPS Hosting environment.

Table of Contents

  1. What Is the Hosts File?
  2. Where Is the Hosts File Located on Linux?
  3. Understanding the Structure of the Hosts File
  4. How to Edit the Hosts File on Linux (Step-by-Step)
  5. Common Use Cases for the Hosts File
  6. Flushing the DNS Cache After Edits
  7. Best Practices and Security Considerations
  8. Conclusion

1. What Is the Hosts File? {#what-is-the-hosts-file}

The hosts file is a plain-text system file that maps human-readable hostnames — such as www.example.com — to their corresponding IP addresses. It functions as a local, static DNS resolver, and crucially, it is consulted by the operating system *before* any external DNS query is made.

This means that entries in your hosts file take absolute priority over DNS records returned by external name servers. That single characteristic makes it an incredibly versatile tool for:

  • Local development environments — Test a website under a real-looking domain without touching live DNS records.
  • DNS troubleshooting — Temporarily force a domain to resolve to a specific IP to test server configurations.
  • Website blocking — Redirect unwanted domains to a non-routable address, effectively blocking access.
  • Staging and pre-launch testing — Preview a new server setup before cutting over DNS globally.
  • Network security — Block known malicious domains at the OS level.

> Technical note: On Linux, the resolution order is governed by the /etc/nsswitch.conf file. The default configuration typically places files (i.e., /etc/hosts) before dns, ensuring local entries are always checked first.

2. Where Is the Hosts File Located on Linux? {#location}

On all major Linux distributions — including Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux, and Arch Linux — the hosts file is located at:

/etc/hosts

This path is consistent across distributions, making it easy to work with regardless of your environment. The file is owned by root and requires elevated privileges to edit.

Default Contents of /etc/hosts

A freshly provisioned Linux server — such as one running on AlexHost VPS Hosting — will typically contain default entries similar to the following:

127.0.0.1       localhost
127.0.1.1       your-hostname.example.com your-hostname

# The following lines are desirable for IPv6 capable hosts
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

These entries ensure that:

    localhost always resolves to the loopback address 127.0.0.1 (IPv4) and ::1 (IPv6).
    The server's own hostname resolves locally without requiring an external DNS lookup.
    
    Do not delete these default entries unless you have a specific and well-understood reason to do so. Removing them can cause unexpected behavior in system services, mail delivery, and application frameworks.
    3. Understanding the Structure of the Hosts File {#structure}
    The hosts file follows a simple, consistent format. Each non-blank, non-comment line represents a single mapping and adheres to this syntax:
    IP_address    hostname    [alias1]    [alias2]    ...
    
    
    
    
    Field
    Description
    
    
    
    
    IP_address
    The IPv4 or IPv6 address the hostname should resolve to
    
    
    hostname
    The primary fully qualified domain name (FQDN) or short hostname
    
    
    alias (optional)
    One or more additional names that should resolve to the same IP
    
    
    
    
    Key Formatting Rules
    
    Whitespace: Fields are separated by spaces or tabs. Multiple spaces are acceptable.
    Comments: Any text following a # character on a line is treated as a comment and ignored by the system.
    Case sensitivity: Hostnames are case-insensitive in practice, but lowercase is the convention.
    One IP per line: Each line begins with exactly one IP address, followed by one or more hostnames.
    
    Practical Examples
    Map a single domain to localhost:
    127.0.0.1    example.com
    Map multiple hostnames to the same IP on one line:
    127.0.0.1    example.com    www.example.com    staging.example.com
    Block a domain by pointing it to a non-routable address:
    0.0.0.0    ads.tracker.com
    Force a domain to resolve to a specific remote server IP:
    203.0.113.42    mywebsite.com    www.mywebsite.com
    Add inline comments for documentation:
    # Local development environment - Project Alpha
    127.0.0.1    alpha.local    api.alpha.local
    
    # Blocked domains - updated 2025-01-15
    0.0.0.0    malicious-site.com
    4. How to Edit the Hosts File on Linux (Step-by-Step) {#editing}
    Because /etc/hosts is a system configuration file, you need root or sudo privileges to modify it. Below is a complete, production-safe workflow.
    Step 1: Create a Backup Before Editing
    This is a non-negotiable best practice. Always back up the file before making any changes:
    sudo cp /etc/hosts /etc/hosts.bak
    You can verify the backup was created:
    ls -lh /etc/hosts*
    If something goes wrong, restore it instantly with:
    sudo cp /etc/hosts.bak /etc/hosts
    Step 2: Open the Hosts File with a Text Editor
    Using nano (recommended for beginners and quick edits):
    sudo nano /etc/hosts
    nano is user-friendly, displays keyboard shortcuts at the bottom of the screen, and is available on virtually every Linux distribution by default.
    Using vim (preferred by experienced administrators):
    sudo vim /etc/hosts
    Using vi (available on minimal installations):
    sudo vi /etc/hosts
    Step 3: Add, Modify, or Remove Entries
    Once the file is open, navigate to the appropriate location and make your changes. Here are the most common operations:
    Add a new mapping (append to the end of the file):
    127.0.0.1    myproject.local    www.myproject.local
    Block a website:
    0.0.0.0    facebook.com    www.facebook.com
    Override DNS for a domain (e.g., to test a new server):
    198.51.100.25    mywebsite.com    www.mywebsite.com
    Step 4: Save and Exit the Editor
    In nano:
    
    Press CTRL + O to write (save) the file.
    Press Enter to confirm the filename.
    Press CTRL + X to exit.
    
    In vim or vi:
    
    Press Esc to ensure you're in command mode.
    Type :wq and press Enter to write and quit.
    To quit without saving, type :q! and press Enter.
    
    Step 5: Verify the Syntax of Your Changes
    Before testing, visually confirm your entries look correct:
    cat /etc/hosts
    You can also use grep to quickly find a specific entry:
    grep "myproject.local" /etc/hosts
    Step 6: Test the New Mappings
    Use ping to verify that the hostname resolves to the expected IP address:
    ping -c 4 myproject.local
    For a blocked domain (mapped to 0.0.0.0 or 127.0.0.1), the ping should fail or return immediately:
    ping -c 2 facebook.com
    You can also use getent for a more direct hosts-file lookup:
    getent hosts myproject.local
    This command queries the system's name resolution stack (including /etc/hosts) and returns the resolved IP, making it more reliable than ping for verification purposes.
    5. Common Use Cases for the Hosts File {#use-cases}
    5.1. Local Web Development
    This is arguably the most common use case among developers. Instead of accessing your local project via http://localhost:3000 or http://127.0.0.1:8080, you can assign a meaningful, production-like domain name.
    Example setup:
    Add to /etc/hosts:
    127.0.0.1    myproject.local    api.myproject.local    admin.myproject.local
    After saving, navigate to http://myproject.local in your browser. Your request will resolve locally without ever touching an external DNS server.
    This approach is especially valuable when:
    
    Your application uses virtual hosting and requires a specific Host header.
    You're testing SSL certificates locally (using self-signed certs mapped to a proper domain name).
    You need to simulate a multi-subdomain architecture (e.g., api., admin., cdn.).
    
    If you're running multiple projects on a VPS with cPanel, the hosts file can also help you test domain configurations before DNS propagation completes.
    5.2. Blocking Unwanted Websites
    The hosts file is a lightweight, zero-dependency content blocker. By redirecting a domain to 0.0.0.0 (preferred over 127.0.0.1 as it fails faster with no connection attempt), you can block access at the OS level — affecting all browsers and applications simultaneously.
    Block social media distractions:
    0.0.0.0    facebook.com    www.facebook.com
    0.0.0.0    twitter.com    www.twitter.com
    0.0.0.0    reddit.com    www.reddit.com
    Block known ad-serving or tracking domains:
    0.0.0.0    doubleclick.net
    0.0.0.0    ads.google.com
    0.0.0.0    tracking.example-analytics.com
    > Pro tip: Community-maintained blocklists (such as those from the StevenBlack hosts project) compile tens of thousands of ad, tracking, and malware domains into a single hosts file format, which you can merge into your /etc/hosts.
    5.3. Pre-Launch Server Testing and DNS Cutover
    When migrating a website to a new server — for example, moving from Shared Web Hosting to a Dedicated Server — DNS propagation can take anywhere from minutes to 48 hours. The hosts file lets you preview the new server immediately, from your local machine only, without affecting other users.
    Scenario: You're migrating mywebsite.com to a new server at IP 203.0.113.42.
    Add to your local /etc/hosts:
    203.0.113.42    mywebsite.com    www.mywebsite.com
    Now, when you visit mywebsite.com in your browser, you'll see the new server's content. Other visitors worldwide will still see the old server until DNS propagates. Once you've confirmed everything works correctly, remove the entry and let DNS take over.
    This technique is invaluable for:
    
    Verifying web server configuration before go-live.
    Testing SSL Certificates on the new server.
    Confirming email routing and application behavior post-migration.
    
    5.4. Bypassing DNS Resolution Failures
    If a DNS server is temporarily unavailable or returning incorrect results, you can use the hosts file as an emergency override to restore connectivity to critical services.
    Example:
    # Emergency override - DNS server outage 2025-01-15
    198.51.100.10    internal-api.company.com
    198.51.100.11    database.company.com
    Remember to remove these entries once the underlying DNS issue is resolved to avoid stale mappings causing future confusion.
    5.5. Multi-Server Development Environments
    In complex development setups with multiple virtual machines or containers, the hosts file can map friendly names to each service:
    192.168.1.10    db.local         # Database server
    192.168.1.11    cache.local      # Redis/Memcached
    192.168.1.12    queue.local      # Message broker
    192.168.1.13    search.local     # Elasticsearch
    This eliminates the need to remember IP addresses and makes configuration files more readable and portable.
    6. Flushing the DNS Cache After Edits {#flushing-dns}
    On most modern Linux systems, changes to /etc/hosts take effect immediately for new connections. However, if your system or applications cache DNS responses, you may need to flush that cache to ensure the new mappings are used right away.
    For Systems Using systemd-resolved (Ubuntu 18.04+, Debian 10+, most modern distros):
    sudo systemctl restart systemd-resolved
    Or, to flush the cache without a full restart:
    sudo resolvectl flush-caches
    Verify the cache was flushed:
    sudo resolvectl statistics
    For Systems Using nscd (Name Service Cache Daemon):
    sudo systemctl restart nscd
    For Systems Using NetworkManager:
    sudo systemctl restart NetworkManager
    For Systems Using dnsmasq:
    sudo systemctl restart dnsmasq
    Checking Which DNS Resolver Your System Uses
    systemctl list-units --type=service | grep -E "resolved|nscd|dnsmasq|NetworkManager"
    > Browser caches: Note that web browsers maintain their own internal DNS cache, independent of the OS. After modifying /etc/hosts, you may also need to clear your browser's DNS cache. In Chrome/Chromium, navigate to chrome://net-internals/#dns and click Clear host cache.
    7. Best Practices and Security Considerations {#best-practices}
    ✅ Always Back Up Before Editing
    sudo cp /etc/hosts /etc/hosts.bak.$(date +%Y%m%d_%H%M%S)
    Using a timestamp in the backup filename ensures you can track multiple versions.
    ✅ Use Comments to Document Your Changes
    # Added 2025-01-15 by admin@example.com - staging server test
    203.0.113.42    staging.mywebsite.com
    This is especially important in team environments where multiple people may access the server.
    ✅ Remove Temporary Entries Promptly
    Entries added for testing or emergency overrides should be removed as soon as they're no longer needed. Stale entries can cause hard-to-diagnose connectivity issues months later.
    ✅ Validate Your Syntax
    A malformed hosts file entry won't cause a system crash, but it will silently fail to resolve. Always double-check your entries with:
    getent hosts <hostname>
    ⚠️ Security Warning: Hosts File Hijacking
    Malicious software sometimes modifies /etc/hosts to redirect legitimate domains (such as banking websites or update servers) to attacker-controlled IPs. This is a known attack vector called hosts file hijacking.
    Protect against this by:
    
    Setting restrictive file permissions: sudo chmod 644 /etc/hosts
  • Monitoring the file for unauthorized changes using tools like auditd or AIDE.
  • Regularly reviewing the file contents: cat /etc/hosts
  • ⚠️ The Hosts File Is Not a Substitute for Proper DNS

    For production environments, the hosts file should only be used for temporary overrides and local development. For permanent domain management, always use proper DNS records. If you need to register and manage domains professionally, Domain Registration through a reliable provider ensures your DNS infrastructure is robust and scalable.

    8. Conclusion {#conclusion}

    The /etc/hosts file is a deceptively simple yet remarkably powerful tool in every Linux administrator's and developer's toolkit. Its ability to override DNS resolution locally — with zero latency, no external dependencies, and no infrastructure changes — makes it indispensable for:

    • Developers building and testing applications locally.
    • Sysadmins managing server migrations and DNS cutover windows.
    • Security-conscious users blocking malicious or unwanted domains.
    • DevOps engineers orchestrating multi-service local environments.

    The key takeaways from this guide:

    TaskCommand / Action
    Open the hosts filesudo nano /etc/hosts
    Back up before editingsudo cp /etc/hosts /etc/hosts.bak
    Verify a mappinggetent hosts <hostname>
    Test with pingping -c 4 <hostname>
    Flush DNS cachesudo resolvectl flush-caches
    Restore from backupsudo cp /etc/hosts.bak /etc/hosts

    Whether you're running a lean development environment or managing a fleet of production servers on AlexHost VPS Hosting, mastering the hosts file is a foundational skill that pays dividends every time you need a fast, reliable, local DNS override. Edit with confidence, document your changes, and always keep a backup — happy routing!

    15%

    Save 15% on All Hosting Services

    Test your skills and get Discount on any hosting plan

    Use code:

    Skills
    Get Started