Eu tenho uma instalação 16.04 configurada com minha pasta Downloads apontando para um disco rígido secundário (mostra Downloads -> /mnt/data/Downloads
). Quando corro locate
para procurar arquivos, ele não mostra nenhum arquivo nesta unidade. Eu executei um sudo updatedb
e verifico meu updatedb.conf
(nada que vejo excluiu o /mnt
diretório ou os arquivos que estou procurando)
O interessante para mim é quando eu cd /mnt/data/Downloads
corrolocalizarPosso ver tudo neste diretório, mas não na minha unidade principal. É quase como se o Ubuntu tivesse dois bancos de dados de localização diferentes, dependendo da unidade em que estou.
Como posso remediar esta situação?
Adicional: Aqui está o meuupdatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"
Tentei correr sudo locate
e isso não alterou os resultados. Tentei correr mlocate
e sudo mlocate
isso também não alterou os resultados.
Também tentei encontrar outro updatedb.conf
arquivo e não encontrei nada.
Atualização 1:O sistema de arquivos na unidade secundária é ext4.
Atualização 2:Nada está criptografado também. Estive pesquisando no Google e percebi que isso tem sido um problema para alguns usuários.
Atualização 3:Estou mais confuso agora. Estou tentando encontrar todos os arquivos .iso na minha máquina, abaixo estão os resultados:
@:~$ localizar FreeNAS
/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso
@:~$ localizar *.iso
/home/hudsona/ubuntu-16.04.1-server-amd64.iso
@:~$ localizar iso
/home//ubuntu-16.04.1-server-amd64.iso
/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso
(e vários outros resultados)
@:~$ encontrar. -type f -name "*.iso"
./ubuntu-16.04.1-server-amd64.iso
Atualização 4:Mais resultados:sudo localizar / -type f -name "*.iso"me dá os resultados que desejo, mas leva muito tempo para voltar com esses resultados.
Eu queria me aprofundar e ver se realmente tinha dois bancos de dados diferentes, já que obtenho resultados de localização diferentes com base na unidade em que estou. Depois de verificar a página MAN, procurei por um arquivo mlocate.db em meu sistema, aqui estão meus resultados :
- /usr/share/man/man5/mlocate.db.5.gz
- /var/lib/mlocate/mlocate.db
- /var/lib/mlocate/mlocate.db.VEzhqO
Eu estava pensando que o arquivo .VEzhqO poderia ser um banco de dados secundário, então tentei especificar isso com o sinalizador -d para o comando de localização. Isso me deu o erro "não é possível definir estatísticas". O mistério continua.
Atualização 5:Eu reproduzi isso em outra máquina Ubuntu, edição de servidor 16.04.
Atualização 6:Então eu tenho uma solução, localize "*.iso", mas agora estou curioso para saber "por que" isso funciona. Olhei a página da MAN e estes dois links:http://www.linfo.org/locate.htmlehttp://www.howtogeek.com/112674/how-to-find-files-and-folders-in-linux-using-the-command-line/. Nada disso esclarece por que isso funciona.
Responder1
Em todos os shells, o uso *.iso
expande para uma lista de arquivos antes de chamar o comando, portanto, em
locate *.iso
o shell expande automaticamente a expressão criando uma lista de nomes de arquivos a partir dos arquivos no diretório atual. Suponha que haja no diretório atual dois arquivos iso file1.iso
e file2.iso
; o comando resultante será na verdade:
locate file1.iso file2.iso
então o shell irá executá-lo. Então, locate
tentaremos encontrar arquivos contendo essas duas strings, procurando efetivamente por "*file1.iso*"
ou "*file2.iso*"
.
É por isso que locate iso
encontre mais arquivos do que locate *.iso
; locate
está realmente procurando "*iso*"
no primeiro caso. A solução (e a maneira correta de usá-la, IMHO) é citar os caracteres especiais do shell quando o comando aceita expressões usando-os, como o seguinte find
comando:
find /etc/ -type f -iname "*.conf"
Se houver dois ou mais arquivos conf no diretório atual e não usarmos aspas, o comando find falhará ao analisar o segundo nome de arquivo gerado, e nossa densidade de cabelo será severamente reduzida em desespero e pesquisando no Google; D porque a mensagem de erro parece não relacionado à ausência de cotações.
Responder2
Por algum motivo,
locate *.iso
pesquisa apenas em seu diretório atual por arquivos .iso enquanto
locate "*.iso"
pesquisa todas as suas unidades. Esta é a solução para o meu problema.
Responder3
Locate se aplica automaticamente *
antes e depois da string, então a solução mais fácil é:
locate .iso
Eu também tenho duas unidades do Windows montadas. ao executar locate
a partir da partição Ubuntu, obtenho resultados semelhantes aos da sua pergunta. Usando esta resposta, os resultados corretos são obtidos:
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate "*.iso" | wc -l
3
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate *.iso | wc -l
3
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate .iso | wc -l
45