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 locate
nach Dateien suche, werden auf dieser Festplatte keine Dateien angezeigt. Ich habe einen ausgeführt sudo updatedb
und überprüfe meinen updatedb.conf
(nichts, was ich sehe, außer dem /mnt
Verzeichnis oder den Dateien, nach denen ich suche) .
Das Interessante für mich ist, wenn ich cd /mnt/data/Downloads
dann 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 mlocate
das hat die Ergebnisse auch nicht verändert.
Ich habe auch versucht, eine andere updatedb.conf
Datei 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 *.iso
eine 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.iso
und file2.iso
; der resultierende Befehl lautet dann:
locate file1.iso file2.iso
dann wird es von der Shell ausgeführt. locate
Es wird also versucht, Dateien zu finden, die diese beiden Zeichenfolgen enthalten, und zwar effektiv nach "*file1.iso*"
oder "*file2.iso*"
.
Deshalb locate iso
findet find mehr Dateien als locate *.iso
; im ersten Fall locate
tatsä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 find
Befehl:
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 locate
von 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