Як відредагувати файл hosts у Linux: покроково з прикладами

Як відредагувати файл hosts у Linux: покроково з прикладами
Категорії: Основи Linux

Файл /etc/hosts дозволяє призначити IP-адресу конкретному доменному імені локально, на вашому комп’ютері. Це зручно, щоб заблокувати сайт, перевести тестовий домен на 127.0.0.1, або тимчасово спрямувати адресу на інший сервер без зміни DNS. Тут покажу надійний мінімум дій і декілька альтернатив.

Що таке файл hosts і навіщо його редагувати

/etc/hosts — звичайний текстовий файл зі списком відповідностей «IP → ім’я хоста». Система спершу дивиться сюди, а потім звертається до DNS (сервіс, який перетворює імена типу example.com на IP). Приклади використання:

  • Призначити локальний проєкт на домен example.local: 127.0.0.1 example.local
  • Заблокувати сайт: 0.0.0.0 facebook.com
  • Тестувати міграцію на новий сервер, вказавши його IP лише на вашій машині

Тут знадобляться базові речі: термінал Linux (вікно для введення команд), права доступу Linux (дозволи на читання/запис), а також розуміння, що sudo — це запуск команди з правами адміністратора.

Найпростіший спосіб через термінал

Покажу безпечну схему: зробити резервну копію, відредагувати, перевірити результат.

  1. Зробіть резервну копію (на випадок, якщо щось піде не так):

    sudo cp /etc/hosts /etc/hosts.bak
  2. Відкрийте файл у простому редакторі nano:

    sudo nano /etc/hosts

    У nano керування просте: Ctrl+O — зберегти, Enter — підтвердити, Ctrl+X — вийти.

  3. Додайте потрібні рядки. Формат: IP, пробіл(и), ім’я хоста. Рядок з # — це коментар.

    # Локальний проєкт
    127.0.0.1 example.local
    127.0.0.1 www.example.local
    
    # Блокування сайту (IPv4 і IPv6)
    0.0.0.0 facebook.com
    ::1 facebook.com
  4. Очистьте DNS-кеш, щоб зміни застосувалися (див. розділ про кеш нижче). Найчастіше достатньо:

    sudo resolvectl flush-caches
  5. Перевірте, що ім’я розв’язується як треба:

    getent hosts example.local
    ping -c1 example.local

Альтернативні способи

Додати рядок без редактора

Підходить для швидкого додавання через термінал Linux. tee — утиліта, що записує введення у файл:

echo "127.0.0.1 example.test" | sudo tee -a /etc/hosts

Швидке повернення до резервної копії

sudo mv /etc/hosts.bak /etc/hosts

Інші редактори

Якщо вам звично: vim, micro або nano — усе працює однаково, головне — права адміністратора:

sudo micro /etc/hosts
sudo vim /etc/hosts

Спосіб через GUI

pkexec — запуск графічної програми з правами адміністратора через підтвердження у вікні. Виберіть редактор вашого середовища (GUI Linux):

  • GNOME:
    pkexec gnome-text-editor /etc/hosts
  • KDE (Kate):
    pkexec kate /etc/hosts
  • Cinnamon (Xed):
    pkexec xed /etc/hosts

Внесіть зміни, натисніть Зберегти, потім очистьте DNS-кеш (нижче).

Оновлення кешу DNS після змін

DNS-кеш — пам’ять нещодавніх відповідей DNS, яку тримають служби системи або браузер. Щоб застосувати оновлений hosts, корисно скинути кеш у системі:

  • Systemd-resolved (Ubuntu, Debian, Fedora з systemd):
    sudo resolvectl flush-caches
    # або на старіших системах
    sudo systemd-resolve --flush-caches
  • NetworkManager (інколи допомагає перезапуск):
    sudo systemctl restart NetworkManager
  • nscd (якщо встановлений):
    sudo systemctl restart nscd

Браузер теж кешує DNS. Закрийте вкладки або перезапустіть браузер, щоб результати були чесними.

Перевірка: як переконатися, що все працює

  • Подивитись, що система «бачить» ваш запис:
    getent hosts facebook.com
  • Швидкий пінг на ім’я (має показати IP з /etc/hosts):
    ping -c1 facebook.com

FAQ

Отримую «Permission denied» або «read-only»

Використайте sudo, бо /etc/hosts захищений правами. Якщо навіть з sudo «read-only file system», перевірте, чи не запущена система у режимі тільки для читання (наприклад, з LiveUSB), і перемонтуйте корінь у режим запису.

Пише «nano: command not found»

Встановіть редактор через пакетний менеджер (пакет — це встановлюваний набір файлів програми):

  • Ubuntu/Debian/Mint (apt команди):
    sudo apt update && sudo apt install -y nano
  • Fedora (dnf):
    sudo dnf install -y nano

«resolvectl: command not found»

Спробуйте альтернативу для старіших систем:

sudo systemd-resolve --flush-caches

Або перезапустіть NetworkManager:

sudo systemctl restart NetworkManager

Після змін сайт все одно відкривається

  • Очистьте DNS-кеш (система і браузер).
  • Переконайтеся, що немає дубліката домену нижче у файлі (останній збіг перемагає).
  • Додайте запис і для IPv6:
    ::1 facebook.com

Чи працюють зірочки типу *.example.com?

Ні. /etc/hosts розуміє лише конкретні імена. Для піддоменів додайте окремі рядки або використайте DNS-сервер.

Як скасувати зміни?

Відновіть резервну копію або просто видаліть додані рядки:

sudo nano /etc/hosts
# при потребі: відновлення цілком
sudo mv /etc/hosts.bak /etc/hosts

Порада від Kernelka

Підписуйте свої зміни коментарями і групуйте їх блоками — так легше навести лад пізніше 📝 Наприклад:

# --- DEV: проект блогу ---
127.0.0.1 blog.local
127.0.0.1 api.blog.local
# --- Блокування відволікань ---
0.0.0.0 tiktok.com
::1 tiktok.com

Щоб уникнути плутанини в управлінні файлами, тримайте один бекап /etc/hosts і оновлюйте його після великих правок. У мережеві налаштування браузера інколи теж корисно зазирнути — він міг запам’ятати стару адресу.

Підсумок

  • /etc/hosts керує локальним співставленням «IP → ім’я» і має вищий пріоритет за DNS.
  • Редагуйте з правами адміністратора: sudo nano /etc/hosts.
  • Робіть резервну копію перед змінами: sudo cp /etc/hosts /etc/hosts.bak.
  • Після збереження очистьте DNS-кеш: sudo resolvectl flush-caches.
  • Перевіряйте результат: getent hosts, ping -c1.
  • Для GUI використовуйте pkexec з вашим редактором (GNOME/KDE/Cinnamon).

Прокоментувати

На сайті відображається лише твоє ім'я та коментар. Електронна пошта використовується виключно для зв'язку з тобою за потреби.