for file in $(ls)
do
#whatever you want to do with "${file}"
done
Chromium/Chrome действительно не кэширует DNS-запросы дольше минуты.
Интересно, что из bugs-chromium — Issue 164026 — DNS TTL не учитывается с 21 апреля 2011 г.
Единственный кеш DNS в системе находится в Chrome, и он не учитывает ТТЛ. Нам нужно либо исправить хром и/или добавить промежуточный кеш который правильно обрабатывает TTL.
Ответ в заявке от 4 декабря 2012 г.:
HostCache в настоящее время предполагает TTL=60 с для всех положительных результатов. С участием асинхронный преобразователь DNS, мы планируем использовать TTL=max(60s, server_reported_ttl), то есть не менее 60 с. Смысл в том, чтобы улучшить производительность кэша. (Когда CDN NS обеспечивает TTL=10-20 с, и это получение всех подресурсов занимает более 30 секунд, нам часто приходится повторно запрашивать одно и то же имя хоста во время загрузки одной страницы.)
Заявка закрыта 10 октября 2013 г. по следующим причинам:
Chrome на CrOS использует асинхронный преобразователь DNS, который учитывает TTL = max (60s, > server_reported_ttl)
Я закрываю это как WontFix (устарело/работает по назначению).
Это известная проблема уже много лет; их внутренний преобразователь DNS игнорирует TTL записей DNS и кэширует DNS-запросы только на 1 минуту.
В течение многих лет пользователи запрашивали функцию, позволяющую изменить это поведение по умолчанию, но Google так и не создал ее.
В прошлом вы могли отключить внутренний преобразователь DNS в chrome://flags
, в настоящее время он функционально больше не доступен.
Подводя итог, можно сказать, что это функция, т.е. он делает это по дизайну.
(Я изначально написал, что это никогда не может быть изменено, что, очевидно, не соответствует действительности.Решительный человек может либо перекомпилировать Chromium, либо взломать бинарники Chrome. ).
Итак, в качестве дополнения: существует множество задокументированных свидетельств того, что инженеры Google не намерены соблюдать значение TTL по умолчанию в полученных ответах DNS в Chrome/ium.
Из Отрицательное кэширование DNS-запросов (DNS NCACHE)
Как и в случае с кэшированием положительных ответов, распознаватель имеет смысл ограничение на то, как долго он будет кэшировать отрицательный ответ...
Хотя подразумевается, что преобразователь может/должен наложить максимальный лимит на кеширование ответа DNS, ограничение в 1 минуту в Google Chrome может быть слишком низким.
П.С. На самом деле я нашел ответ на то, что беспокоило меня в течение многих лет, когда я искал статистику Chrome, чтобы ответить на этот вопрос: Chrome: DNS-запросы со случайными DNS-именами: вредоносное ПО?
PPS Из приведенного ниже кода видно, что отрицательные ответы не кэшируются (TTL=0).
Из https://chromium.googlesource.com/chromium/src/net/dns/host_resolver_impl.cc
99 // Default TTL for successful resolutions with ProcTask.
100 const unsigned kCacheEntryTTLSeconds = 60;
101
102 // Default TTL for unsuccessful resolutions with ProcTask.
103 const unsigned kNegativeCacheEntryTTLSeconds = 0;
104
105 // Minimum TTL for successful resolutions with DnsTask.
106 const unsigned kMinimumTTLSeconds = kCacheEntryTTLSeconds;
1518 // Called by ProcTask when it completes.
1519 void OnProcTaskComplete(base::TimeTicks start_time,
1520 int net_error,
1521 const AddressList& addr_list) {
1522 DCHECK(is_proc_running());
1523
1524 if (dns_task_error_ != OK) {
1525 base::TimeDelta duration = base::TimeTicks::Now() - start_time;
1526 if (net_error == OK) {
1527 UMA_HISTOGRAM_LONG_TIMES_100("AsyncDNS.FallbackSuccess", duration);
1528 if ((dns_task_error_ == ERR_NAME_NOT_RESOLVED) &&
1529 ResemblesNetBIOSName(key_.hostname)) {
1530 UmaAsyncDnsResolveStatus(RESOLVE_STATUS_SUSPECT_NETBIOS);
1531 } else {
1532 UmaAsyncDnsResolveStatus(RESOLVE_STATUS_PROC_SUCCESS);
1533 }
1534 base::UmaHistogramSparse("Net.DNS.DnsTask.Errors",
1535 std::abs(dns_task_error_));
1536 resolver_->OnDnsTaskResolve(dns_task_error_);
1537 } else {
1538 UMA_HISTOGRAM_LONG_TIMES_100("AsyncDNS.FallbackFail", duration);
1539 UmaAsyncDnsResolveStatus(RESOLVE_STATUS_FAIL);
1540 }
1541 }
1542
1543 if (ContainsIcannNameCollisionIp(addr_list))
1544 net_error = ERR_ICANN_NAME_COLLISION;
1545
1546 base::TimeDelta ttl =
# always 0 seconds
1547 base::TimeDelta::FromSeconds(kNegativeCacheEntryTTLSeconds);
1548 if (net_error == OK)
# always 60 seconds
1549 ttl = base::TimeDelta::FromSeconds(kCacheEntryTTLSeconds);
1550
1551 // Source unknown because the system resolver could have gotten it from a
1552 // hosts file, its own cache, a DNS lookup or somewhere else.
1553 // Don't store the |ttl| in cache since it's not obtained from the server.
1554 CompleteRequests(
1555 MakeCacheEntry(net_error, addr_list, HostCache::Entry::SOURCE_UNKNOWN),
1556 ttl);
1557 }