GNU/Linux >> Znalost Linux >  >> Linux

7 Praktické příklady lokalizačních příkazů pro Linux – mlocate a updatedb

Když potřebujete vyhledat nějaké soubory, můžete obvykle použít příkaz find. find je dobrý vyhledávací nástroj, ale je pomalý.

Nicméně najděte umí vyhledávat soubory velmi rychle.

Přestože příkaz locate funguje velmi rychle, stále nepřekonal příkaz find, protože má určitá omezení.

Tento článek vysvětluje vše, co potřebujete vědět o příkazu locate .

Jak funguje příkaz Locate? – updatedb a updatedb.conf

Když říkáme, že lokalizace vyhledává velmi rychle, pak první otázka, která nás napadne, je, že proč je lokalizace tak rychlá?.

No, locate neprohledává soubory na disku, ale hledá cesty k souborům v databázi.

Databáze je soubor, který obsahuje informace o souborech a jejich cestě ve vašem systému. Vyhledávací soubor databáze se nachází na adrese:

/var/lib/mlocate/mlocate.db

Další logickou otázkou je, co udržuje tuto databázi mlocate aktualizovanou?

Existuje další nástroj známý jako updatedb . Když spustíte updatedb, prohledá celý systém a aktualizuje databázový soubor mlocate.db.

Jedním omezením příkazu „locate“ je tedy jeho závislost na databázi, kterou lze aktualizovat pomocí jiného nástroje „updatedb“. Proto, abyste získali nejnovější a spolehlivé výsledky z příkazu ‚locate‘, měla by být databáze, na které pracuje, v pravidelných intervalech aktualizována.

Můžeme také nakonfigurovat nástroj „updatedb“ podle našich potřeb. Toho lze dosáhnout aktualizací souboru updatedb.conf. Toto je konfigurační soubor, který updatedb čte před aktualizací databáze. updatedb.conf se nachází v /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"

updatedb.conf soubor obsahuje informace ve tvaru PROMĚNNÉ=HODNOTY. Tyto proměnné lze klasifikovat do :

  • PRUNEFS :Seznam typů systémů souborů oddělených mezerami (jak se používá v /etc/mtab), které by neměly být prohledávány systémem updatedb. Při porovnávání typu systému souborů se nerozlišují velká a malá písmena. Ve výchozím nastavení nejsou přeskočeny žádné typy souborového systému. Když je skenování souborového systému přeskočeno, jsou přeskočeny i všechny souborové systémy připojené v podstromu, i když jejich typ  neodpovídá  žádné položce v PRUNEFS.
  • PRUNENAMES :Seznam názvů adresářů (bez cest) oddělených mezerami, které by neměly být prohledávány programem updatedb. Ve výchozím nastavení nejsou přeskakovány žádné názvy adresářů. Upozorňujeme, že lze zadat pouze adresáře a nepoužívá se žádný mechanismus vzorů (např.  globbing).
  • PRUNEPATHS :Seznam názvů cest k adresářům oddělený mezerami, které by neměly být prohledávány aktualizacíb. Každý název cesty musí být přesně ve tvaru, ve kterém by byl adresář hlášen podle umístění. Ve výchozím nastavení nejsou žádné cesty přeskočeny.
  • PRUNE_BIND_MOUNTS :  Jeden  z  řetězců  0,  ne,  1  nebo ano. Je-li PRUNE_BIND_MOUNTS 1 nebo ano, nejsou připojení k vazbě skenována pomocí updatedb. Všechny souborové systémy připojené v podstromu připojení připojení jsou také přeskočeny, i když se nejedná o připojení připojení. Ve výchozím nastavení se připojení připojení nepřeskočí.

Všimněte si, že všechny výše uvedené konfigurační informace lze také změnit nebo aktualizovat pomocí voleb příkazového řádku v obslužném programu ‘updatedb’.

Než se pokusíte najít příklady příkazů, nezapomeňte prozkoumat příklady příkazů.

Praktické příklady příkazu Locate

1. Vyhledejte soubor pomocí locate

Chcete-li vyhledat konkrétní soubor pomocí locate, proveďte následující

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

Následující příkaz hledá httpd.conf v celém systému.

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

Můžete také použít „locate -0“ pro zobrazení všech výstupů na jednom řádku. Například:

$ locate -0 httpd.conf

2. Zobrazit pouze počet

Chcete-li získat počet odpovídajících položek, použijte locate -c, jak je uvedeno níže.

$ locate -c httpd.conf
3

3. Použijte updatedb k obnovení databáze mlocate

Předpokládejme, že jste vytvořili zálohu existujícího souboru:

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

Pokud se pokusíte vyhledat sysctl.conf pomocí nástroje „locate“, nenajdete soubor sysctl.conf.orig.

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

Důvodem je, že po vytvoření sysctl.conf.orig se databáze, na které lokační nástroj pracuje, neaktualizuje. Pojďme tedy aktualizovat databázi pomocí příkazu ‚updatedb‘ a znovu provést locate:

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

Vezměte prosím na vědomí, že update db musí být spuštěn jako root.

# updatedb

Pokud po aktualizacib spustíte locate, najdete soubor sysctl.conf.orig.

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

4. Změňte umístění databáze mlocate

Výchozí databáze, kterou obslužný program locate čte, je /var/lib/mlocate/mlocate.db, ale pokud chcete propojit příkaz locate s jinou databází uloženou na jiném místě, použijte volbu -d.

Například:

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

Všimněte si, že cestu k databázi lze také převzít z stdin a pokud je uvedena prázdná cesta, vybere se výchozí databáze.

5. Zkontrolujte existenci souboru

Nyní předpokládejme, že soubor sysctl.conf.orig, který jsme vytvořili v příkladu 3 výše, byl odstraněn, a pokud se pokusíte najít sysctl.conf, bude stále zobrazovat soubor sysctl.conf.orig.

# cd /etc
# rm sysctl.conf.orig

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

Jak vidíte z výše uvedeného výstupu, příkaz locate zobrazuje sysctl.conf.orig i po odstranění souboru. Tento výsledek je zavádějící.

Samozřejmě můžete spustit updatedb a zkusit najít znovu, což ukáže správné výsledky.

Nebo můžete jednoduše použít ‚locate -e‘, které zobrazí pouze soubory, které existují v systému, když provádíte příkaz locate. tj. I když soubor existuje v mlocate.db, před zobrazením se stále ověří, zda je soubor fyzicky přítomen v systému.

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

6. Ignorovat malá a velká písmena v Locate Output

Příkaz locate je standardně nakonfigurován tak, aby akceptoval název souboru s rozlišením malých a velkých písmen. Aby se ve výsledcích nerozlišovala malá a velká písmena, můžeme použít volbu -i :

V následujícím příkladu jsme vytvořili dva soubory s malými i velkými písmeny.

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

# updatedb

Pokud použijete příkaz locate pouze s malými písmeny, najde pouze soubor s malými písmeny.

# locate new.txt
/tmp/new.txt

Použijte locate -i, které bude ignorovat velká a malá písmena, a vyhledejte soubor s malými i velkými písmeny.

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

7. Omezte Locate Output

V následujícím příkladu příkaz locate zobrazil několik položek.

$ 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
..

Pokud chcete zobrazit pouze určitý počet záznamů, použijte volbu locate -l a zadejte, kolik záznamů chcete vidět ve výstupu příkazu locate.

Například následující zobrazí pouze 5 záznamů (I když příkaz locate najde několik záznamů..)

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

Najděte příklady příkazů

Jak vidíte, příklady příkazů locate jsou poměrně snadno použitelné. Chcete-li však získat spolehlivý výstup a provádět některé složité vyhledávací operace, měli byste také vědět, jak efektivně používat příkaz find.

  • Mami, našel jsem to! — 15 praktických příkladů hledání příkazů pro Linux
  • Tati, našel jsem to!, 15 úžasných příkladů příkazů hledání pro Linux (část 2)

Linux
  1. Linux Cat Command:Použití a příklady

  2. Linuxové příkazy – přehled a příklady

  3. cp Command v Linuxu:7 praktických příkladů

  1. Linux Shutdown Command:5 praktických příkladů

  2. 5 Praktické příklady příkazu dd v Linuxu

  3. 10 Praktické příklady příkazů Linux nm

  1. Linux Locate Command pro začátečníky (8 příkladů)

  2. 16 Praktické příklady příkazu Linux LS pro začátečníky

  3. vyhledejte příklady příkazů v systému Linux