Por mais que eu goste de Oli (o que é muito!), Eu discordo dele no find
comando. Eu não gosto disso
find
comando leva mais de três minutos
Tomemos, por exemplo, este comando simples:
$ 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
Demora mais de três minutos para find
pesquisar tudo a partir de /
. Por padrão, resmas de mensagens de erro são exibidas e você deve procurá-las para encontrar o que está procurando. Ainda assim, é melhor do grep
que procurar em toda a unidade uma string que leva 53 horas : `grep`ing todos os arquivos de uma string leva muito tempo
Eu sei que posso mexer nos parâmetros do comando find para fazê-lo funcionar melhor, mas o ponto aqui é a quantidade de tempo que leva para executar.
locate
comando leva menos de um segundo
Agora vamos usar locate
:
$ time locate mail-transport-agent.target
/lib/systemd/system/mail-transport-agent.target
real 0m0.816s
user 0m0.792s
sys 0m0.024s
O comando localizar leva menos de um segundo!
updatedb
executar apenas uma vez por dia por padrão
É verdade que o updatedb
comando que atualiza o banco de dados de localização é executado apenas uma vez por dia, por padrão. Você pode executá-lo manualmente antes de procurar arquivos adicionados recentemente usando:
$ time sudo updatedb
real 0m3.460s
user 0m0.503s
sys 0m1.167s
Embora isso leve três segundos, é pequeno em comparação aos find
3 ou mais minutos do comando.
Atualizei meu sudo crontab -e
para incluir a linha na parte inferior:
# m h dom mon dow command
0 0 1 * * /bin/journalctl --vacuum-size=200M
*/5 * * * * /usr/bin/updatedb
Agora, a cada cinco minutos updatedb
é executado e o locate
banco de dados de comandos está quase sempre atualizado.
Mas não há atributos?
Você pode canalizar a locate
saída para outros comandos. Se, por exemplo, você deseja os atributos do arquivo, pode usar:
$ 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: -
Sumário
Postei esta resposta para mostrar a velocidade e facilidade de uso de locate
. Tentei abordar algumas das falhas de comando apontadas por outros.
O find
comando precisa percorrer toda a estrutura de diretórios para encontrar arquivos. O locate
comando possui seu próprio banco de dados, o que lhe confere a velocidade da luz em comparação.