16. december

Locate

Dagens kommando er locate.

Locate bruges til at finde ud af, hvor givne filer på systemet ligger. Det kan f.eks. være at jeg har glemt hvor konfigurationen til sshd ligger.

Kommandoen "locate sshd" giver følgende resultat på mit debiansystem:

/etc/init.d/sshd
/etc/rc0.d/K20sshd
/etc/rc2.d/S20sshd
/etc/rc6.d/K20sshd
/usr/local/etc/sshd_config
/usr/local/man/man8/sshd.8
/usr/local/sbin/sshd
/var/run/sshd.pid

Locate returnerer alle de filstier, som søgestrengen, her "sshd", indgår i.

Pas på!!! Locate kan give meget output, hvis man får søgt på noget der forekommer mange gange.

Prøv f.eks. "locate lib"...

Jokere

Det er muligt at give jokere til "locate". F.eks. "locate '*/sshd'":

/etc/init.d/sshd
/usr/local/sbin/sshd

Så snart der er jokere involveret, returnerer locate kun de filnavne, der matcher udtrykket. F.eks. tillader ovenstående ikke at der står noget efter "sshd". Hvis jeg i stedet bruger "locate '*/sshd*'" får jeg:

/etc/init.d/sshd
/usr/local/etc/sshd_config
/usr/local/man/man8/sshd.8
/usr/local/sbin/sshd
/var/run/sshd.pid

Det er værd at bemærke at "/" ikke betragtes som specialtegn af locate, selvom det fungerer som skilletegn mellem et katalog- og et filnavn, Locate arbejder med strenge. F.eks. giver

locate '*etc*sshd*'

alle linier hvor etc indgår før sshd:

/etc/init.d/sshd
/etc/rc0.d/K20sshd
/etc/rc2.d/S20sshd
/etc/rc6.d/K20sshd
/usr/local/etc/sshd_config

Andre jokertegn:

  • "?" (præcis et tegn).
  • "[]" (et tegn fra et interval, f.eks. "[a-z]").

Eksempler:

$ locate '?etc*sshd*'
/etc/init.d/sshd
/etc/rc0.d/K20sshd
/etc/rc2.d/S20sshd
/etc/rc6.d/K20sshd
$ locate '*ssh[a-f]'
/etc/init.d/sshd
/etc/rc0.d/K20sshd
/etc/rc2.d/S20sshd
/etc/rc6.d/K20sshd
/usr/local/sbin/sshd
$

Tip

Hvis man får store mængder uddata fra en locate-kommando kan man kanalisere det videre til f.eks. less eller more.

locate lib | less

Man kan søge i less' uddata ved at taste "/" efterfulgt af et ord eller en del af et ord.

Databasen

Locate er hurtig fordi den ikke søger igennem hele disken efter filerne. Den kigger blot i en database. Det vil sige, at det ikke er sikkert at de filer der bliver fundet med locate, stadig findes på systemet. Ligeledes er det ikke sikkert, at filer man lige har installeret, bliver fundet. Locate arbejder udfra hvordan systemet så ud, sidst databasen blev opdateret.

Normalt opdateres databasen i et program i /etc/cron.daily, som køres automatisk en gang i døgnet. På Red Hat hedder programmet locate.cron, på Debian hedder det find. Inde fra programmet kaldes kommandoen updatedb (se man updatedb).

Hvis man lige har lavet om på sit system, ved f.eks. at installere eller afinstallere programmer, og man gerne vil have opdateret database med det samme, kan programmet køres manuelt, hvis man har systemadministratorrettigheder: "su root -c /etc/cron.daily/slocate.cron" (på Red Hat). Det tager et stykke tid at opdatere databasen, men derefter vil locate igen virke efter hensigten.

Tilvalg

Der findes få tilvalg til locate:

  • "-d <sti>" betyder at locate skal bruge den eller de databaser der er angivet i stien. Det kan også gøre med systemvariablen "LOCATE_PATH".
  • "-e" betyder at locate kun skal udskrive eksisterende filer. Det gør at det kan tage ret lag tid, da locate så er nødt til at undersøge om filerne stadig findes på systemet.
  • "--help" Vis hjælp til kommandoen
  • "--version" Viser locates versionsnummer

Yderligere information

Se "man locate", "man updatedb", (og på Debian "man locatedb").

Slocate

I nogle Linux distributioner (Red Hat 7.x) er locate erstattet af slocate. På Debian findes den i pakken slocate.

Slocate er en mere sikker udgave af locate, der også gemmer filrettigheder i databasen, så brugere ikke får filer at se, de ikke har ret til at se.

Tilvalg til slocate

Slocate har en del flere options end locate da den også kan bruges til at lave databasen med - updatedb er på Red Hat en symbolsk henvisning til slocate. Vi vil her kun gennemgå de options der er relevante til at søge med.

  • "-i" Skeln ikke mellem store og små bogstaver.
  • "-q" Stille modus. Vis ikke fejlmeddelelser (f.eks. de kataloger man ikke har adgang til).
  • "-n <tal>" Begræns antallet at viste linier til <tal>.
  • "-r <regulært_udtryk>" Søg databasen via det givne regulære udtryk.
  • "-h" Vis hjælp
  • "-V" Vis version

Se man "slocate".