Найти против найти

Есть команды find а также locate искать файлы на диске.

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

Есть ли другие отличия? В каких ситуациях один предпочитает один или другой? И когда locate база данных обновляется обычно?

2 ответа

Решение

locate действительно хорош только для поиска файлов и их отображения людям. Вы можете сделать с ним несколько вещей, но я бы не стал доверять этому достаточно, чтобы разобрать, и, как вы говорите, невозможно гарантировать состояние внутренней базы данных, тем более что она запускается только из /etc/cron.daily/mlocate, один раз в день!

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

locate конечно, есть место в моем наборе инструментов, но обычно оно находится прямо внизу, как последняя попытка найти что-то. Это проще чем find тоже.

Как бы мне не нравился Оли (а это очень много!), Я не согласен с ним на find команда. Мне это не нравится

find Команда занимает более трех минут

Возьмем для примера эту простую команду:

$ time find / -type f -name "mail-transport-agent.target"
find: ‘/lost+found’: Permission denied
find: ‘/etc/ssmtp’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
    (... SNIP ...)
find: ‘/run/user/997’: Permission denied
find: ‘/run/sudo’: Permission denied
find: ‘/run/systemd/inaccessible’: Permission denied

real    3m40.589s
user    0m4.156s
sys     0m8.874s

Это займет более трех минут find искать все, начиная с /, По умолчанию появляется множество сообщений об ошибках, и вы должны искать их, чтобы найти то, что вы ищете. Еще лучше чем grep поиск строки по всему диску занимает 53 часа: `grep` для поиска всех файлов строки занимает много времени

Я знаю, что могу поиграться с параметрами команды find, чтобы она работала лучше, но суть здесь в том, сколько времени требуется для запуска.

locate команда занимает меньше секунды

Теперь давайте использовать locate:

$ time locate mail-transport-agent.target
/lib/systemd/system/mail-transport-agent.target

real    0m0.816s
user    0m0.792s
sys     0m0.024s

Команда locate занимает меньше секунды!

updatedb по умолчанию запускается только один раз в день

Это правда updatedb Команда, которая обновляет базу данных locate, по умолчанию выполняется только один раз в день. Вы можете запустить его вручную, прежде чем искать только что добавленные файлы, используя:

$ time sudo updatedb

real    0m3.460s
user    0m0.503s
sys     0m1.167s

Хотя это займет 3 секунды, это мало по сравнению с find Команды 3+ минуты.

Я обновил свой sudo crontab -e включить строку внизу:

# m h  dom mon dow   command
  0 0  1   *   *     /bin/journalctl --vacuum-size=200M
*/5 *  *   *   *     /usr/bin/updatedb

Теперь каждые пять минут updatedb запускается и locate База данных команд почти всегда актуальна.

Но нет никаких атрибутов?

Вы можете трубу locate вывод на другие команды. Например, если вам нужны атрибуты файла, вы можете использовать:

$ locate mail-transport-agent.target | xargs stat
  File: '/lib/systemd/system/mail-transport-agent.target'
  Size: 473         Blocks: 8          IO Block: 4096   regular file
Device: 10305h/66309d   Inode: 667460      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-03-31 18:11:55.091173104 -0600
Modify: 2017-10-27 04:11:45.000000000 -0600
Change: 2017-10-28 07:18:24.860065653 -0600
 Birth: -

Резюме

Я разместил этот ответ, чтобы показать скорость и простоту использования locate, Я пытался устранить некоторые недостатки команды, на которые указывали другие.

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

Другие вопросы по тегам