GNU/Linux >> LINUX-Kenntnisse >  >> Linux

7 praktische Linux-Locate-Befehlsbeispiele – mlocate und updatedb

Wenn Sie nach Dateien suchen müssen, verwenden Sie normalerweise den Befehl find. find ist ein gutes Suchprogramm, aber es ist langsam.

Jedoch lokalisieren kann sehr schnell nach Dateien suchen.

Obwohl der locate-Befehl sehr schnell arbeitet, hat er den find-Befehl noch nicht überflügelt, da er einige Einschränkungen hat.

Dieser Artikel erklärt alles, was Sie über den Befehl locate wissen müssen .

Wie funktioniert der Ortungsbefehl? – updatedb und updatedb.conf

Wenn wir sagen, dass locate sehr schnell sucht, dann stellt sich als erstes die Frage:Was macht locate so schnell?.

Nun, locate durchsucht nicht die Dateien auf der Festplatte, sondern sucht nach Dateipfaden in einer Datenbank.

Die Datenbank ist eine Datei, die Informationen über die Dateien und ihren Pfad auf Ihrem System enthält. Die Locate-Datenbankdatei befindet sich unter:

/var/lib/mlocate/mlocate.db

Die nächste logische Frage lautet:Was hält diese mlocate-Datenbank auf dem neuesten Stand?

Nun, es gibt ein weiteres Dienstprogramm namens updatedb . Wenn Sie updatedb ausführen, scannt es das gesamte System und aktualisiert die Datenbankdatei mlocate.db.

Eine Einschränkung des Befehls „locate“ ist also seine Abhängigkeit von der Datenbank, die von einem anderen Dienstprogramm „updatedb“ aktualisiert werden kann. Um die neuesten und zuverlässigsten Ergebnisse des Befehls „locate“ zu erhalten, sollte die Datenbank, auf der er arbeitet, daher in regelmäßigen Abständen aktualisiert werden.

Wir können auch das Dienstprogramm „updatedb“ nach unseren Bedürfnissen konfigurieren. Dies kann durch Aktualisieren der updatedb.conf erreicht werden. Dies ist eine Konfigurationsdatei, die updatedb liest, bevor die Datenbank aktualisiert wird. updatedb.conf befindet sich unter /etc/ :

# cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre_lite tmpfs usbfs udf fuse.glusterfs fuse.sshfs ecryptfs fusesmb devtmpfs"

Die Datei updatedb.conf enthält Informationen in Form von VARIABLES=VALUES. Diese Variablen können wie folgt klassifiziert werden:

  • PRUNEFS :Eine durch Leerzeichen getrennte Liste von Dateisystemtypen (wie in /etc/mtab verwendet), die nicht von updatedb gescannt werden sollten. Beim Abgleich des Dateisystemtyps wird die Groß-/Kleinschreibung nicht beachtet. Standardmäßig werden keine Dateisystemtypen übersprungen. Wenn das Scannen eines Dateisystems übersprungen wird, werden alle im Unterbaum gemounteten Dateisysteme ebenfalls übersprungen, selbst wenn ihr  Typ  mit keinem Eintrag in PRUNEFS übereinstimmt.
  • PRUNENAMES :Eine durch Leerzeichen getrennte Liste von Verzeichnisnamen (ohne Pfade), die nicht von updatedb gescannt werden sollen. Standardmäßig werden keine Verzeichnisnamen übersprungen. Beachten Sie, dass nur Verzeichnisse angegeben werden können und kein Mustermechanismus (z. B. Globbing) verwendet wird.
  • PRUNEPATHS :Eine durch Leerzeichen getrennte Liste von Pfadnamen von Verzeichnissen, die nicht von updatedb gescannt werden sollen. Jeder Pfadname muss genau in der Form vorliegen, in der das Verzeichnis von locate gemeldet würde. Standardmäßig werden keine Pfade übersprungen.
  • PRUNE_BIND_MOUNTS :  Eine  der  Zeichenfolgen  0,  nein,  1  oder ja. Wenn PRUNE_BIND_MOUNTS 1 oder ja ist, werden Bind-Mounts nicht von updatedb gescannt. Alle im Unterbaum eines Bind-Mounts gemounteten Dateisysteme werden ebenfalls übersprungen, selbst wenn sie keine Bind-Mounts sind. Bind Mounts werden standardmäßig nicht übersprungen.

Beachten Sie, dass alle oben genannten Konfigurationsinformationen auch über die Befehlszeilenoptionen des Dienstprogramms „updatedb“ geändert oder aktualisiert werden können.

Bevor Sie versuchen, Beispiele für Befehle zu finden, sollten Sie unbedingt Beispiele für Befehle suchen.

Praktische Beispiele für den Ortungsbefehl

1. Suchen Sie eine Datei mit locate

Um eine bestimmte Datei mithilfe von locate zu suchen, gehen Sie einfach wie folgt vor

$ locate sysctl.conf
/etc/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

Der folgende Befehl sucht im gesamten System nach httpd.conf.

$ locate httpd.conf
/etc/httpd/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/httpd.conf.bak

Sie können auch „locate -0“ verwenden, um alle Ausgaben in einer Zeile anzuzeigen. Zum Beispiel:

$ locate -0 httpd.conf

2. Nur die Anzahl anzeigen

Um die Anzahl der übereinstimmenden Einträge zu erhalten, verwenden Sie locate -c wie unten gezeigt.

$ locate -c httpd.conf
3

3. Verwenden Sie updatedb, um die mlocate-Datenbank zu aktualisieren

Angenommen, Sie haben eine Sicherungskopie einer vorhandenen Datei erstellt:

# cd /etc
# cp sysctl.conf sysctl.conf.orig

Wenn Sie versuchen, mit dem Dienstprogramm „locate“ nach sysctl.conf zu suchen, werden Sie sysctl.conf.orig nicht finden.

# locate sysctl.conf
/etc/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

Der Grund dafür ist, dass nach dem Erstellen von sysctl.conf.orig die Datenbank, auf der das Locate-Dienstprogramm funktioniert, nicht aktualisiert wird. Aktualisieren wir also die Datenbank mit dem Befehl „updatedb“ und führen Sie locate erneut aus:

$ updatedb
updatedb: can not open a temporary file for `/var/lib/mlocate/mlocate.db'

Bitte beachten Sie, dass update db als root ausgeführt werden muss.

# updatedb

Wenn Sie nach updatedb locate ausführen, finden Sie die Datei sysctl.conf.orig.

# locate sysctl.conf
/etc/sysctl.conf
/etc/sysctl.conf.orig
/usr/share/man/man5/sysctl.conf.5.gz

4. Speicherort der mlocate-Datenbank ändern

Die Standarddatenbank, die Dienstprogramm-Lesevorgänge findet, ist /var/lib/mlocate/mlocate.db, aber wenn Sie den Befehl locate mit einer anderen Datenbank verknüpfen möchten, die sich an einem anderen Ort befindet, verwenden Sie die Option -d.

Zum Beispiel:

$ locate -d <new db path> <filename>

Beachten Sie, dass der Datenbankpfad auch von stdin genommen werden kann und wenn ein leerer Pfad angegeben wird, dann wird die Standarddatenbank ausgewählt.

5. Dateiexistenz prüfen

Nehmen wir nun an, die Datei sysctl.conf.orig, die wir in Beispiel 3 oben erstellt haben, wurde gelöscht, und wenn Sie versuchen, sysctl.conf zu finden, wird immer noch die Datei sysctl.conf.orig angezeigt.

# cd /etc
# rm sysctl.conf.orig

# locate sysctl.conf
/etc/sysctl.conf
/etc/sysctl.conf.orig
/usr/share/man/man5/sysctl.conf.5.gz

Wie Sie der obigen Ausgabe entnehmen können, zeigt der Befehl locate sysctl.conf.orig an, selbst nachdem die Datei gelöscht wurde. Dieses Ergebnis ist irreführend.

Natürlich können Sie updatedb ausführen und es erneut mit locate versuchen, was die richtigen Ergebnisse zeigt.

Oder Sie können einfach „locate -e“ verwenden, wodurch nur die Dateien angezeigt werden, die im System vorhanden sind, wenn Sie den Befehl „locate“ ausführen. d.h. selbst wenn die Datei in mlocate.db vorhanden ist, wird immer noch überprüft, ob die Datei physisch im System vorhanden ist, bevor sie angezeigt wird.

# locate -e sysctl.conf
/etc/sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

6. Ignoriere Groß-/Kleinschreibung in der Lokalisierungsausgabe

Der Befehl locate ist standardmäßig so konfiguriert, dass er den Dateinamen unter Berücksichtigung der Groß-/Kleinschreibung akzeptiert. Um die Ergebnisse unabhängig von der Groß-/Kleinschreibung zu machen, können wir die Option -i verwenden:

Im folgenden Beispiel haben wir zwei Dateien mit Klein- und Großbuchstaben erstellt.

# cd /tmp
# touch new.txt NEW.txt

# updatedb

Wenn Sie den Befehl locate nur mit Kleinbuchstaben verwenden, findet er nur die kleingeschriebene Datei.

# locate new.txt
/tmp/new.txt

Verwenden Sie locate -i, wodurch die Groß-/Kleinschreibung ignoriert wird, und suchen Sie nach Dateien in Klein- und Großbuchstaben.

$ locate -i new.txt
/tmp/NEW.txt
/tmp/new.txt
/usr/share/doc/samba-common/WHATSNEW.txt.gz

7. Beschränken Sie die Lokalisierungsausgabe

Im folgenden Beispiel hat der Befehl locate mehrere Einträge angezeigt.

$ locate passwd
/etc/passwd
/etc/passwd-
/etc/dovecot/conf.d/auth-passwdfile.conf.ext
/etc/pam.d/passwd
/etc/security/opasswd
/etc/vsftpd/passwd
/lib64/security/pam_unix_passwd.so
/usr/bin/gpasswd
/usr/bin/htpasswd
/usr/bin/ldappasswd
/usr/bin/mksmbpasswd.sh
/usr/bin/passwd
..

Wenn Sie nur eine bestimmte Anzahl von Datensätzen anzeigen möchten, verwenden Sie die Option locate -l und geben Sie an, wie viele Datensätze Sie in der Ausgabe des Befehls „locate“ sehen möchten.

Im Folgenden werden beispielsweise nur 5 Datensätze angezeigt (selbst wenn der Befehl locate mehrere Datensätze findet...)

$ locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/dovecot/conf.d/auth-passwdfile.conf.ext
/etc/pam.d/passwd
/etc/security/opasswd

Befehlsbeispiele finden

Wie Sie sehen, sind die Beispiele für den Befehl locate recht einfach zu verwenden. Um jedoch eine zuverlässige Ausgabe zu erhalten und einige komplexe Suchoperationen durchzuführen, sollten Sie auch wissen, wie der Befehl find effektiv verwendet wird.

  • Mama, ich habe es gefunden! — 15 praktische Beispiele für Linux-Suchbefehle
  • Daddy, ich habe es gefunden!, 15 fantastische Beispiele für Linux-Suchbefehle (Teil 2)

Linux
  1. Linux-Cat-Befehl:Verwendung und Beispiele

  2. Linux-Befehle – Übersicht und Beispiele

  3. cp-Befehl unter Linux:7 praktische Beispiele

  4. 10 praktische Beispiele für Linux-nm-Befehle

  5. Suchen Sie nach Befehlsbeispielen in Linux

12 praktische Beispiele für In Command unter Linux

16 Praktische und nützliche Beispiele für Echo Command unter Linux

15 Praktische Beispiele für den Rsync-Befehl unter Linux

5 praktische Beispiele für Tail-Befehle unter Linux

Echo-Befehl unter Linux:7 praktische Beispiele

Praktischer Ping-Befehl in Linux-Beispielen