Файл /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 — це запуск команди з правами адміністратора.
Найпростіший спосіб через термінал
Покажу безпечну схему: зробити резервну копію, відредагувати, перевірити результат.
-
Зробіть резервну копію (на випадок, якщо щось піде не так):
sudo cp /etc/hosts /etc/hosts.bak -
Відкрийте файл у простому редакторі nano:
sudo nano /etc/hostsУ nano керування просте: Ctrl+O — зберегти, Enter — підтвердити, Ctrl+X — вийти.
-
Додайте потрібні рядки. Формат: 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 -
Очистьте DNS-кеш, щоб зміни застосувалися (див. розділ про кеш нижче). Найчастіше достатньо:
sudo resolvectl flush-caches -
Перевірте, що ім’я розв’язується як треба:
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).