Linux Locate Kommando for begyndere (8 eksempler)

Selv om find uden tvivl er et af de mest populære og kraftfulde kommandolinjeværktøjer til søgning efter filer i Linux, er det ikke hurtigt nok til situationer, hvor du har brug for øjeblikkelige resultater. Hvis du ønsker at søge en fil på dit system via kommandolinjen, og hastighed er den højeste prioritet, så er der en anden kommando, som du kan bruge: Locate.

I denne vejledning vil vi diskutere locate-kommandoen ved hjælp af letforståelige eksempler. Bemærk venligst, at alle de instruktioner/eksempler, der er nævnt her, er blevet testet på Ubuntu 16.04 LTS, og den locate-version, vi har brugt, er 0.26.

Sådan bruger du locate-kommandoen i Linux

Locate-kommandoen er meget nem at bruge. Det eneste, du skal gøre, er at give den det filnavn, du vil søge i.

locate 

Hvis jeg f.eks. vil søge efter alle filnavne, der indeholder strengen ‘dir2’, kan jeg gøre det ved hjælp af locate på følgende måde:

Bemærk: Kommandoen ‘locate dir2’ (uden stjerner) vil også gøre det, da locate implicit erstatter det navn, du giver (lad os sige NAME), med *NAME*.

Hvordan locate-kommandoen virker, eller, hvorfor er den så hurtig

Grunden til, at locate er så hurtig, er, at den ikke læser filsystemet for det søgte fil- eller mappenavn. Den henviser faktisk til en database (forberedt af kommandoen updatedb) for at finde det, brugeren leder efter, og på baggrund af denne søgning producerer den sit output.

Selv om dette er en god fremgangsmåde, har den sin del af ulemper. Hovedproblemet er, at efter hver ny fil eller mappe, der oprettes på systemet, skal du opdatere værktøjets database for at få det til at fungere korrekt. Ellers vil kommandoen ikke kunne finde filer/mapper, der er oprettet efter den seneste databaseopdatering.

Fors eksempelvis, hvis jeg forsøger at finde filer med navne, der indeholder strengen “tosearch” i mappen “Downloads” på mit system, giver find-kommandoen ét resultat i output:

Men når jeg forsøger at udføre den samme søgning ved hjælp af locate-kommandoen, giver den intet output.

Det betyder, at den database, som locate søger i, ikke blev opdateret, efter at filen blev oprettet på systemet. Så lad os opdatere databasen, hvilket kan gøres ved hjælp af kommandoen updatedb. Sådan gør du det:

sudo updatedb

Og når jeg nu kører den samme locate-kommando igen, viser den filer i output:

Sådan skal du, efter at en fil eller mappe er blevet fjernet, sørge for, at locate-databasen er blevet opdateret, da kommandoen ellers vil blive ved med at vise filen i sit output, når der søges.

Sådan får du locate til at udskrive antallet eller tallet af matchende poster i output

Som vi har set, producerer locate-kommandoen navnet på de matchede filer sammen med deres komplette eller absolutte stier i output. Men hvis du ønsker det, kan du få værktøjet til at undertrykke alle disse oplysninger og blot udskrive antallet eller tallet af matchende poster i stedet. Dette kan gøres ved hjælp af kommandolinjeindstillingen -c.

Sådan tvinger du locate til kun at udskrive de poster, der svarer til eksisterende filer

Som vi allerede har diskuteret tidligere i denne artikel, vil kommandoen, hvis en fil fjernes fra systemet, blive ved med at vise det pågældende filnavn i output, indtil du opdaterer locate-databasen igen. I dette specifikke tilfælde kan du dog springe over at opdatere databasen og stadig få korrekte resultater i output ved hjælp af kommandolinjeindstillingen -e.

For eksempel har jeg fjernet filen “filetosearch.txt” fra mit system. Dette blev bekræftet af kommandoen find, som ikke længere kunne søge i filen:

Men da jeg udførte den samme operation ved hjælp af locate, viste den stadig filen i output:

Og vi ved hvorfor – fordi locates database ikke blev opdateret, efter at filen var blevet slettet. Brug af indstillingen -e gjorde dog tricket:

Her er, hvad locate man-siden siger om denne indstilling: “Udskriv kun poster, der henviser til filer, der findes på det tidspunkt, hvor locate køres.”

Sådan får du locate til at ignorere skelnen mellem store og små bogstaver

Som standard er den søgeoperation, som locate-kommandoen udfører, skelnet mellem store og små bogstaver. Men du kan tvinge værktøjet til at ignorere skelnen mellem store og små bogstaver ved hjælp af kommandolinjeindstillingen -i.

For eksempel har jeg to filer på mit system, der hedder “newfiletosearch.txt” og “NEWFILETOSEARCH.txt”. Så, som du kan se, er filnavnene de samme, blot er deres kasetter forskellige. Hvis du beder locate om at søge efter, lad os sige, “*tosearch*”, så vil den kun vise navnet med små bogstaver i sit output:

Men ved at bruge kommandolinjeindstillingen -i tvinger kommandoen til at ignorere kasus, og begge filnavne bliver produceret i output:

Sådan adskilles outputposter med ASCII NUL

Som standard adskilles de outputposter, som locate-kommandoen producerer, ved hjælp af newline-tegn (\n). Men hvis du ønsker det, kan du ændre separatoren og have ASCII NUL i stedet for en newline. Dette kan gøres ved hjælp af kommandolinjeindstillingen -0.

For eksempel har jeg udført den samme kommando, som vi brugte i sidste afsnit ovenfor, men tilføjet kommandolinjeindstillingen -0:

Så kan du se, at newline-separatoren ikke længere er der – den er blevet erstattet med NUL.

Sådan kan du se oplysninger om locate-databasen

Hvis du vil vide, hvilken database locate bruger, samt andre statistikker om databasen, skal du bruge kommandolinjeindstillingen -S.

Sådan søger du efter et nøjagtigt filnavn ved hjælp af locate

Som standard, når du søger efter et filnavn ved hjælp af locate, erstattes det navn, du angiver – f.eks. NAME – implicit med *NAME*. Hvis jeg f.eks. søger efter filnavnet ‘testfile’, så produceres alle navne, der matcher *testfile*, i output:

Men hvad nu, hvis kravet er at søge efter filer med navne, der nøjagtigt matcher ‘testfile’? Tja, i dette tilfælde skal du bruge regulære udtryk, som kan aktiveres ved hjælp af kommandolinjeindstillingen -r. Så her er hvordan du kan søge efter netop ‘testfile’ ved hjælp af regulære udtryk:

locate -r /testfile$

Hvis du er nybegynder med regulære udtryk, skal du gå her.

Konklusion

Locate tilbyder mange flere muligheder, men dem, vi har diskuteret her, burde være nok til at give dig en grundlæggende idé om kommandolinjeværktøjet, samt til at få dig i gang. Vi vil råde dig til først at prøve alle de muligheder, der er beskrevet her, på din Linux-maskine, og derefter skifte over til andre, som du kan finde i værktøjets man-side.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.