Наскільки мені подобається Олі (що багато!), Я не погоджуюся з ним за 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`ing всіх файлів для рядка займає багато часу
Я знаю, що можу зіткнутися з параметрами команди 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
команда, яка оновлює базу даних локалізації , запускається лише один раз на день за замовчуванням. Ви можете запустити його вручну перед тим, як шукати файли, щойно додані, використовуючи:
$ 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
команди є своя база даних, яка дає їй блискавичну швидкість порівняно.