16.04 Trova non trovare i file in / mnt

5

Ho installato un'installazione 16.04 con la mia cartella Download che punta a un disco rigido secondario (mostra Downloads -> /mnt/data/Downloads ). Quando eseguo locate per cercare i file, non mostra alcun file su questa unità. Ho eseguito un sudo updatedb e controllo il mio updatedb.conf (nulla vedo esclusa la directory /mnt oi file che sto cercando)

La cosa interessante per me è quando I cd /mnt/data/Downloads quindi eseguire locate posso vedere tutto in questa directory ma non sulla mia unità primaria. È quasi come se Ubuntu avesse due diversi database di localizzazione a seconda di quale unità sono attiva.

Come posso porre rimedio a questa situazione?

Ulteriori : ecco il mio updatedb.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"

Ho provato a eseguire sudo locate e questo non ha modificato i risultati. Ho provato a eseguire mlocate e sudo mlocate e questo non ha modificato neanche i risultati.

Ho anche provato a trovare un altro updatedb.conf file e sono uscito vuoto.

Aggiornamento 1: il file system sull'unità secondaria è ext4.

Aggiornamento 2: Nulla è crittografato. Sono stato su Google e ho notato che è stato un problema per alcuni utenti.

Aggiornamento 3: ora sono più confuso. Sto cercando di trovare tutti i file .iso sulla mia macchina, sotto ci sono i risultati:

@: ~ $ locate FreeNAS

/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso

@: ~ $ locate * .iso

/home/hudsona/ubuntu-16.04.1-server-amd64.iso

@: ~ $ locate iso

/home//ubuntu-16.04.1-server-amd64.iso

/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso

(e molti altri risultati)

@: ~ $ find. -type f -name "* .iso"

./ ubuntu-16.04.1-server-amd64.iso

Aggiornamento 4: Altri risultati: sudo find / -type f -name "* .iso" mi dà i risultati che voglio ma richiede molto tempo per tornare indietro con quei risultati.

Volevo scavare e vedere se avevo effettivamente due database diversi da quando ottengo risultati di localizzazione diversi in base all'unità in cui mi trovo. Dopo aver controllato la pagina MAN ho cercato un file mlocate.db sul mio sistema, ecco i miei risultati:

  • /usr/share/man/man5/mlocate.db.5.gz
  • /var/lib/mlocate/mlocate.db
  • /var/lib/mlocate/mlocate.db.VEzhqO

Stavo pensando che il file .VEzhqO potrebbe essere un database secondario, quindi ho provato a specificarlo con il flag -d per il comando locate. Questo mi ha dato l'errore "can not stat". Il mistero continua.

Aggiornamento 5: l'ho riprodotto su un'altra macchina Ubuntu, edizione server 16.04.

Aggiornamento 6: Quindi ho una soluzione, individua "* .iso" ma ora sono curioso di sapere perché funziona. Ho esaminato la pagina MAN e questi due link: link e link . Nessuno di questi ha chiarito il motivo per cui funziona.

    
posta Winski Tech 07.09.2016 - 16:47

3 risposte

1

In tutte le shell, utilizzando *.iso si espande in un elenco di file prima di chiamare il comando, quindi in

locate *.iso

la shell espande automaticamente l'espressione creando un elenco di file da file nella directory corrente. Supponiamo lì dove nella directory corrente due file iso file1.iso e file2.iso ; il comando risultante sarà in realtà:

locate file1.iso file2.iso

allora la shell lo eseguirà. Quindi, locate cercherà di trovare i file contenenti queste due stringhe, cercando efficacemente "*file1.iso*" o "*file2.iso*" .

Ecco perché locate iso trova più file di locate *.iso ; locate sta effettivamente cercando "*iso*" nel primo caso. La soluzione (e il modo giusto di usarlo, IMHO) sta citando i caratteri speciali della shell quando il comando accetta espressioni che li usano, come il seguente comando find :

find /etc/ -type f -iname "*.conf"

Se ci sono due o più file conf nella directory corrente e non usiamo virgolette, il comando find fallirà analizzando il secondo nomefile generato, e la nostra densità dei capelli sarà severamente ridotta nella disperazione e su google, D perché il messaggio di errore sembra non correlato all'assenza di virgolette.

    
risposta data Fjor 22.04.2017 - 09:53
0

Per qualche motivo,

locate *.iso 

cerca solo la directory corrente per i file .iso mentre

locate "*.iso" 

cerca tutte le tue unità. Questa è la soluzione al mio problema però.

    
risposta data Winski Tech 12.09.2016 - 16:05
0

Locate applica automaticamente * prima e dopo la stringa, quindi la soluzione più semplice è:

locate .iso

Ho anche installato due unità Windows. quando eseguo locate dalla partizione di Ubuntu ottengo risultati simili alla tua domanda. Usando questa risposta si ottengono i risultati corretti:

───────────────────────────────────────────────────────────────────────────────────────────
[email protected]:~/Downloads/cfiles$ locate "*.iso" | wc -l
3
───────────────────────────────────────────────────────────────────────────────────────────
[email protected]:~/Downloads/cfiles$ locate *.iso | wc -l
3
───────────────────────────────────────────────────────────────────────────────────────────
[email protected]:~/Downloads/cfiles$ locate .iso | wc -l
45
    
risposta data WinEunuuchs2Unix 19.04.2018 - 19:59

Leggi altre domande sui tag