Есть ли способ проверить команду find (сравнить с локацией)?

Чтение адаптированного ответа на вопрос locate vs find: использование, плюсы и минусы друг друга, который говорит, что основным преимуществом locate является скорость, которую я хотел бы провести некоторое тестирование, и я могу воспользоваться ее использованием.

Мой первый шаг состоял в том, чтобы оценить скорость find инструмента при предоставлении сопоставимой услуги, такой как locate (отсюда только поиск имен файлов, без дополнительных функций).

Я был удивлен, увидев, что

 time find / 2>/dev/null >/dev/null 

который я предположил итерациями по всем файлам (в зависимости от разрешений пользователей), показал

 real 0m1.231s user 0m0.353s sys 0m0.867s 

довольно быстрый результат.

Мой вопрос в том, что прикладная команда – это способ фактического определения скорости find ?

Аспект вопроса, на который мне было бы интересно ответить, будет, если в файловой системе есть какие-то буферы, следовательно, в ОС (это ядро ​​Linux), что повлияет на результат?

Мои результаты, когда это отбрасывание кешей через echo 3 > /proc/sys/vm/drop_caches , значительно увеличило скорость find :

 $ sudo bash -c "echo 3 > /proc/sys/vm/drop_caches" $ time (find / 2>/dev/null >/dev/null) real 0m24.290s user 0m1.143s sys 0m8.230s 

Тем не менее, на моей Linux-системе последующее использование find вернулось к аналогичной скорости mlocate около 1 сек?

Подводя итог, мне интересно знать способ сравнения команды find (для сравнения с локацией)

Обновление / Примечание

В то время как вопрос был мотивирован другим, сравнивающим locate с find и я спрашиваю о измерении / сопоставлении скорости find я знаю, что крайне маловероятно, что сбор данных из живой OS / файловой системы (т.е. find ) будет быстрее, чем поиск в поиске базы данных (т.е. locate ). При довольно хорошем кешировании ядро ​​операционной системы я, тем не менее, имел довольно схожие сроки выполнения для поиска через find или locate .

Поэтому вопрос сводится к тому, достаточно ли отказаться от кэшей операционных систем (файловой системы), чтобы имитировать «фактическое» время, необходимое для find сделанное при холодном запуске, и, кроме того, насколько реалистично было бы предполагать, что эти ускоряющие кеши сохраняется (не похоже на файл базы данных updatedb locate ) для всех последующих вызовов на find .

В OpenBSD база данных локализации по умолчанию восстанавливается один раз в неделю с помощью сценария /etc/weekly вызывающего /usr/libexec/locate.updatedb как пользователь nobody .

Утилита locate.updatedb представляет собой скрипт /bin/sh ( pdksh на OpenBSD), который более или менее работает на основе корневых файловых систем. Все, что nobody может получить, помещается в базу данных локации.

Мне трудно поверить, что find / будет быстрее, чем locate в системе, где locate использует базу данных файлов, которая была создана с помощью find / .

Разумеется, разница заключается в том, что вы можете найти больше файлов , запустив find как пользователь, имеющий дополнительный доступ, чем пользователь.

В Linux , по крайней мере, на машине Ubuntu, на которой у меня есть доступ к работе, база данных locate кажется, воссоздается ежедневно, в соответствии с руководством locate(8) . Это делается с помощью утилиты updatedb .

Эта утилита (символическая ссылка на /usr/bin/updatedb.mlocate на этом компьютере) является скомпилированным двоичным mlocate принадлежащим к mlocate пакета.

Вы можете взглянуть на источники mlocate если хотите, но это в основном программа на C, которая проходит через файловую систему. mlocate также пытается избежать прохождения бит файловой системы, которая не изменилась между прогонами.

Опять же, мне трудно поверить, что запрос к mlocate данных mlocate будет медленнее (ни при каких обстоятельствах), чем запуск find / .

В конце концов, именно поэтому все инструменты locate (которые я знаю) работают против базы данных.