Вопрос или проблема
Используя sudo systemd-resolve --statistics
, я могу увидеть текущую статистику кэша DNS, например:
Кэш
Текущий размер кэша: 68
Удары по кэшу: 412
Промахи по кэшу: 461
Я хотел бы увидеть все записи в кэше DNS (здесь 68), возможно ли это?
Вы можете использовать следующую команду, чтобы отправить сигнал USR1
(Пользовательский сигнал 1) в systemd-resolved
:
sudo pkill -USR1 systemd-resolve
Это НЕ остановит сервис. Это просто прикажет systemd-resolved
записать все текущие записи кэша (и некоторую другую информацию) в системный лог.
Затем вы можете экспортировать сообщения лога, записанные systemd-resolved
, в текстовый файл с помощью следующей команды:
sudo journalctl -u systemd-resolved > ~/resolved.txt
Откройте созданный таким образом текстовый файл в текстовом редакторе на ваш выбор и найдите CACHE:
. После этого будет следовать список записей кэша.
Обратите внимание, что текстовый файл может содержать несколько строк с CACHE:
.
С тех пор как systemd 254 (проблема 14796, выпущен в 2023 году), у нас есть
sudo resolvectl show-cache
Из заметок о выпуске v254:
* resolvectl получил новый глагол "show-cache" для отображения текущего
содержания кэша systemd-resolved. Этот глагол взаимодействует с демоном
systemd-resolved и требует привилегий.
Чтобы очистить кэш, используйте resolvectl flush-caches
(systemd-resolve --flush-caches
в более ранних версиях systemd).
Ответ или решение
Чтобы просмотреть кэш DNS, используемый системой systemd-resolved
, вы можете воспользоваться несколькими подходами. Вот подробное руководство по этому процессу.
Использование команды для получения информации о кэше
-
Статистика кэша: Для начала вы можете проверить общую статистику кэширования, используя следующую команду:
sudo systemd-resolve --statistics
Эта команда покажет основные параметры, такие как текущий размер кэша, количество попаданий в кэш и промахов. Например:
Cache Current Cache Size: 68 Cache Hits: 412 Cache Misses: 461
Однако эта команда не отображает все текущие записи кэша.
Получение подробной информации о записях кэша
Для того чтобы увидеть полный список всех записей в кэше DNS, вы можете отправить сигнал USR1
службе systemd-resolved
:
-
Отправка сигнала
USR1
:sudo pkill -USR1 systemd-resolved
Этот сигнал не остановит службу, а заставит
systemd-resolved
записать все текущее содержимое кэша и другую информацию в системный журнал. -
Просмотр логов: После отправки сигнала вам необходимо обратиться к системному журналу, чтобы извлечь данные о кэше. Используйте следующую команду:
sudo journalctl -u systemd-resolved > ~/resolved.txt
Эта команда сохранит сообщение журнала в текстовый файл
resolved.txt
в вашем домашнем каталоге. Затем откройте этот файл в текстовом редакторе и выполните поиск по словуCACHE:
. В результате вы увидите список записей кэша.Обратите внимание: В файле может быть несколько строк с
CACHE:
, содержащих разные записи кэша.
Прямой просмотр кэша (начиная с версии systemd 254)
С версии systemd 254 добавлена возможность прямого просмотра содержимого кэша с использованием новой команды:
-
Команда
resolvectl show-cache
:sudo resolvectl show-cache
Эта команда отправляет запрос к демону
systemd-resolved
и требует привилегий. Она предоставит полный список текущих записей кэша, что значительно упрощает процесс и избавляет от необходимости просматривать системные логи.
Очистка кэша
Если вам необходимо очистить кэш DNS, выполните следующую команду:
-
Очистка кэша:
sudo resolvectl flush-caches
Либо для более старых версий systemd:
sudo systemd-resolve --flush-caches
Заключение
Используя описанные выше методы, вы сможете легко просматривать и управлять кэшем DNS в вашей системе. Современные версии systemd предоставляют удобные команды для работы с кэшем, упрощая администрирование и диагностику сетевых проблем.