16.04 Locate findet keine Dateien in /mnt

16.04 Locate findet keine Dateien in /mnt

Ich habe eine 16.04-Installation eingerichtet, bei der mein Download-Ordner auf eine sekundäre Festplatte verweist (zeigt Downloads -> /mnt/data/Downloads). Wenn ich locatenach Dateien suche, werden auf dieser Festplatte keine Dateien angezeigt. Ich habe einen ausgeführt sudo updatedbund überprüfe meinen updatedb.conf(nichts, was ich sehe, außer dem /mntVerzeichnis oder den Dateien, nach denen ich suche) .

Das Interessante für mich ist, wenn ich cd /mnt/data/Downloadsdann laufeLokalisierenIch kann alles in diesem Verzeichnis sehen, aber nicht auf meinem primären Laufwerk. Es ist fast so, als hätte Ubuntu zwei verschiedene Standortdatenbanken, je nachdem, auf welchem ​​Laufwerk ich mich befinde.

Wie kann ich diese Situation beheben?

Zusätzlich: Hier ist meinsupdatedb.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"

Ich habe es mit Laufen versucht sudo locate, aber das hat die Ergebnisse nicht verändert. Ich habe es mit Laufen versucht mlocate, aber sudo mlocatedas hat die Ergebnisse auch nicht verändert.

Ich habe auch versucht, eine andere updatedb.confDatei zu finden, aber nichts gefunden.

Aktualisierung 1:Das Dateisystem auf dem sekundären Laufwerk ist ext4.

Aktualisierung 2:Auch ist nichts verschlüsselt. Ich habe ein bisschen gegoogelt und festgestellt, dass das für einige Benutzer ein Problem darstellt.

Aktualisierung 3:Jetzt bin ich noch verwirrter. Ich versuche, alle .iso-Dateien auf meinem Rechner zu finden. Unten sind die Ergebnisse:

@:~$ lokalisieren Sie FreeNAS

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

@:~$ lokalisieren Sie *.iso

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

@:~$ iso lokalisieren

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

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

(und eine Reihe anderer Ergebnisse)

@:~$ finde . -Typ f -name "*.iso"

./ubuntu-16.04.1-server-amd64.iso

Aktualisierung 4:Mehr Ergebnisse:sudo find / -type f -name "*.iso"liefert mir die gewünschten Ergebnisse, es dauert jedoch lange, bis diese Ergebnisse vorliegen.

Ich wollte tiefer graben und sehen, ob ich tatsächlich zwei verschiedene Datenbanken habe, da ich unterschiedliche Ergebnisse erhalte, je nachdem, auf welchem ​​Laufwerk ich mich befinde. Nachdem ich die MAN-Seite überprüft hatte, suchte ich auf meinem System nach einer mlocate.db-Datei. Hier sind meine Ergebnisse:

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

Ich dachte, die .VEzhqO-Datei könnte eine sekundäre Datenbank sein, also versuchte ich, dies mit dem Flag -d für den Locate-Befehl anzugeben. Das brachte mir die Fehlermeldung „Stat kann nicht ausgeführt werden“. Das Rätsel bleibt bestehen.

Aktualisierung 5:Ich habe dies auf einer anderen Ubuntu-Maschine, 16.04 Server Edition, reproduziert.

Aktualisierung 6:Ich habe also eine Lösung, suche nach „*.iso“, aber jetzt frage ich mich, „warum“ das funktioniert. Ich habe mir die MAN-Seite und diese beiden Links angesehen:http://www.linfo.org/locate.htmlUndhttp://www.howtogeek.com/112674/wie-man-Dateien und Ordner in Linux mithilfe der Befehlszeile findet/. Keines davon gibt Aufschluss darüber, warum das funktioniert.

Antwort1

In allen Shells wird mit using *.isoeine Liste von Dateien erstellt, bevor der Befehl aufgerufen wird.

locate *.iso

Die Shell erweitert den Ausdruck automatisch und erstellt eine Dateinamenliste aus den Dateien im aktuellen Verzeichnis. Angenommen, im aktuellen Verzeichnis befinden sich zwei ISO-Dateien file1.isound file2.iso; der resultierende Befehl lautet dann:

locate file1.iso file2.iso

dann wird es von der Shell ausgeführt. locateEs wird also versucht, Dateien zu finden, die diese beiden Zeichenfolgen enthalten, und zwar effektiv nach "*file1.iso*"oder "*file2.iso*".

Deshalb locate isofindet find mehr Dateien als locate *.iso; im ersten Fall locatetatsächlich sucht "*iso*". Die Lösung (und meiner Meinung nach die richtige Art, sie zu verwenden) besteht darin, die Sonderzeichen der Shell in Anführungszeichen zu setzen, wenn der Befehl Ausdrücke akzeptiert, die sie verwenden, wie der folgende findBefehl:

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

Wenn sich im aktuellen Verzeichnis zwei oder mehr Conf-Dateien befinden und wir keine Anführungszeichen verwenden, schlägt der Find-Befehl beim Parsen des zweiten generierten Dateinamens fehl und unsere Haardichte wird in unserer Verzweiflung und beim Googeln stark reduziert ;D, weil die Fehlermeldung scheinbar nichts mit dem Fehlen der Anführungszeichen zu tun hat.

Antwort2

Aus irgendeinem Grund,

locate *.iso 

durchsucht nur Ihr aktuelles Verzeichnis nach .iso-Dateien, während

locate "*.iso" 

durchsucht alle Ihre Laufwerke. Dies ist jedoch die Lösung für mein Problem.

Antwort3

„Locate“ wird automatisch *vor und nach der Zeichenfolge angewendet, daher ist die einfachste Lösung:

locate .iso

Ich habe auch zwei Windows-Laufwerke gemountet. Wenn ich locatevon einer Ubuntu-Partition aus arbeite, erhalte ich ähnliche Ergebnisse wie Ihre Frage. Mit dieser Antwort erhalte ich die richtigen Ergebnisse:

───────────────────────────────────────────────────────────────────────────────────────────
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

verwandte Informationen