Mester Linux-søk: 6 Kommandoer for å Finne Alt!

Linux tilbyr en rekke metoder for fil- og programsøk, hver med sin egen styrke. Vi skal utforske hvordan du bruker kommandoene `find`, `locate`, `which`, `whereis`, `whatis` og `apropos`. Disse verktøyene er spesialiserte for ulike oppgaver, og forståelse av deres unike egenskaper gjør at du kan velge den mest passende for oppgaven.

Linux har et bredt spekter av kommandoer for søking og lokalisering. Hvorfor så mange? De er utviklet for å håndtere forskjellige scenarier og gir best ytelse under spesifikke forhold. Du kan se på dem som et sett med spesialiserte verktøy for ulike søkebehov. La oss undersøke hvert verktøy for å avdekke deres unike styrker.

`find`-kommandoen

`find`-kommandoen kan virke kompleks ved første bruk. Men når du har forstått syntaksen, vil du anerkjenne dens fleksibilitet og kraft.

Den enkleste måten å bruke `find` er å skrive kommandoen og trykke Enter.

find

I denne formen fungerer `find` litt som `ls`, men den viser alle filer i den aktuelle katalogen og alle underkataloger.

Noen versjoner av `find` krever at du spesifiserer «.» for gjeldende katalog. Hvis dette gjelder din Linux-versjon, bruk denne kommandoen:

find .

For å starte søket fra rotkatalogen, bruk følgende kommando:

find /

For å begynne søket fra din hjemmekatalog, bruk denne kommandoen:

find ~

Bruk av `find` med filmønstre

For å dra nytte av mer enn bare en rekursiv versjon av `ls`, må vi gi `find` et søkekriterium. Dette kan være et filnavn eller et filmønster. Mønstre bruker jokere: `*` betyr en hvilken som helst streng med tegn, og `?` betyr et enkelt tegn.

Mønstre må være i anførselstegn for å fungere riktig. Det er lett å glemme, men manglende anførselstegn kan føre til at jokertegnmønsteret ikke utføres som forventet.

Denne kommandoen søker i gjeldende mappe etter filer som samsvarer med mønsteret `*.*s`. Dette betyr alle filer med en filtype som slutter på `s`. Vi bruker `-name`-alternativet for å indikere at vi gir et filnavn eller et filnavnmønster.

find . -name "*.*s"

`find` returnerer filene som samsvarer med mønsteret.

Legg merke til at to av filtypene er to tegn lange, og en er tre tegn lang. Dette er fordi vi brukte mønsteret `*.*s`. Hvis vi bare ønsket filtyper med to tegn, ville vi brukt `*.?s`.

Hvis vi visste at vi var på jakt etter JavaScript-filer med `.js`-utvidelsen, kunne vi være mer spesifikke i filmønsteret. Du kan bruke enkle anførselstegn hvis du foretrekker det.

find . -name '*.js'

Nå finner vi bare JavaScript-filene.

Ignorer sak med `find`

Hvis du vet nøyaktig filnavnet du vil søke etter, kan du bruke det i stedet for et mønster. Du trenger ikke sette filnavnet i anførselstegn, med mindre det inneholder jokere, men det er en god praksis å gjøre det uansett. Dette hjelper deg å huske å bruke dem når det er nødvendig.

find . -name 'Yelp.js'

Denne gangen fikk vi ingen resultater. Dette er merkelig, siden vi vet at filen eksisterer. La oss prøve igjen og be `find` om å ignorere forskjeller mellom store og små bokstaver. Dette gjør vi med `-iname`-alternativet.

find. -iname 'Yelp.js'

Det var problemet; filnavnet begynner med en liten «y», mens vi søkte med en stor «Y».

Rekursiv søking med `find`

En styrke med `find` er måten den søker rekursivt gjennom underkataloger. La oss søke etter filer som starter med «kart».

find . -name "map*.*"

De samsvarende filene blir listet opp. Legg merke til at de alle ligger i en underkatalog.

Søke etter kataloger med `find`

Alternativet `-path` brukes til å søke etter kataloger. La oss se etter en katalog som vi ikke husker navnet på, men vi vet at den slutter med bokstavene «om».

find . -path '*about'

Katalogen er funnet. Den heter «om» og ligger i en annen katalog i gjeldende mappe.

Det finnes også et `-ipath`-alternativ (ignorer case path) som lar deg søke etter stier og ignorere forskjeller mellom store og små bokstaver, på samme måte som `-iname`-alternativet som vi nevnte tidligere.

Bruk av filattributter med `find`

`find` kan også søke etter filer som har attributter som samsvarer med søket. For eksempel kan du søke etter tomme filer ved å bruke `-empty`-alternativet, uavhengig av hva filen heter.

find . -empty

Alle filer med en lengde på null byte vil bli oppført i søkeresultatene.

Alternativet `-executable` finner alle filer som er kjørbare, som for eksempel programmer eller skript.

find . -executable

Resultatene viser en fil ved navn «fix_aptget.sh».

De inkluderer også tre kataloger, inkludert «.», den gjeldende katalogen. Kataloger er inkludert i resultatene fordi «execute»-biten er satt i deres filtillatelser. Uten denne ville du ikke kunne «gå inn i» disse katalogene.

Alternativet `-type`

Med alternativet `-type` kan du søke etter en bestemt type objekt. Vi vil bruke typeindikatoren «f» som en parameter til `-type`-alternativet for å søke etter bare filer.

find . executable -type f

Nå er ikke underkataloger oppført. Den kjørbare skriptfilen er det eneste elementet i resultatene.

Vi kan også be `find` om kun å inkludere kataloger i resultatene. For å liste opp alle kataloger kan vi bruke `-type`-alternativet med typeindikatoren «d».

find . type -d

Bare kataloger og underkataloger er oppført i resultatene.

Bruk av andre kommandoer med `find`

Du kan også utføre handlinger på de filene som `find` finner. Du kan for eksempel sende filene til en annen kommando.

Hvis vi trenger å sørge for at det ikke er noen kjørbare filer i gjeldende mappe og undermapper, kan vi bruke denne kommandoen:

find . -name "fix_aptget.sh" -exec chmod -x '{}' ;

Kommandoen betyr:

Søk i gjeldende mappe etter et objekt som heter «fix_aptget.sh».
Hvis den finnes, utfør kommandoen `chmod`.
Parameterne til chmod er `-x` for å fjerne kjørbare rettigheter, og `{}` som representerer navnet på filen som ble funnet.
Semikolonet markerer slutten på parameterne for chmod. Det må «escapes» med en backslash.

Når denne kommandoen er utført, kan vi søke etter kjørbare filer som før, og denne gangen vil ingen filer bli oppført.

For å utvide søket kan vi bruke et filmønster i stedet for et filnavn som vi brukte i dette eksemplet.

Denne fleksibiliteten gjør at du kan søke etter bestemte filtyper, eller med filnavnmønstre, og utføre handlinger på de samsvarende filene.

`find` har mange andre alternativer, inkludert søk etter filer basert på endringsdato, eierskap av filer, lesbarhet eller et spesifikt sett med filtillatelser.

`find` og `mlocate`-kommandoene

Mange Linux-distribusjoner pleide å inkludere en kopi av `locate`. Dette ble erstattet med `mlocate`-kommandoen, som er en forbedret og oppdatert versjon av `locate`.

Når `mlocate` er installert på et system, vil den overstyre `locate`-kommandoen slik at du faktisk bruker `mlocate` selv når du skriver `locate`.

Vi har sjekket om gjeldende versjoner av Ubuntu, Fedora og Manjaro har versjoner av disse kommandoene forhåndsinstallert. Ubuntu og Fedora inkluderte begge `mlocate`. Det måtte installeres på Manjaro, med denne kommandoen:

sudo pacman -Syu mlocate

På Ubuntu kan du bruke `locate` og `mlocate` om hverandre. På Fedora og Manjaro må du skrive `locate`, men kommandoen blir utført av `mlocate`.

Hvis du bruker `–version`-alternativet med `locate`, vil du se at kommandoen faktisk er `mlocate`.

locate --version

Siden `locate` fungerer på alle testede Linux-distribusjoner, vil vi bruke `locate` i forklaringene nedenfor. Og det er én bokstav mindre å skrive.

Finn databasen

Den største fordelen med `locate` er hastighet.

Når du bruker `find`-kommandoen, starter den en prosess som utfører et søk i hele filsystemet. Kommandoen `locate` fungerer annerledes. Den gjør et databaseoppslag for å finne ut om det du søker etter finnes på datamaskinen din. Dette gjør søket mye raskere.

Dette bringer oss til det åpenbare spørsmålet: Hvordan sikrer man at databasen er oppdatert? Når `mlocate` er installert, legges det (vanligvis) en oppføring i `cron.daily`. Denne oppdaterer databasen daglig (veldig tidlig om morgenen).

For å sjekke om denne oppføringen eksisterer, bruk følgende kommando:

ls /etc/cron.daily/*loc*

Hvis du ikke finner en oppføring der, kan du konfigurere en automatisert oppgave for å gjøre dette til et tidspunkt du velger.

Hva om datamaskinen din ikke er på når databasen skal oppdateres? Du kan kjøre databaseoppdateringsprosessen manuelt med denne kommandoen:

sudo updatedb

Bruk av `locate`

La oss se etter filer som inneholder strengen «getlatlong». `locate` søker automatisk etter treff som inneholder søkeordet hvor som helst i filnavnet, så det er ikke nødvendig å bruke jokere.

locate getlatlong

Det er vanskelig å vise hastighet i et skjermbilde, men de samsvarende filene vises nesten umiddelbart.

Begrens antall resultater med `locate`

Noen ganger vet du at det finnes mange filer av den typen du søker etter. Du trenger bare å se de første av dem, for eksempel for å minne deg på hvilken katalog de ligger i.

Ved å bruke `-n` (nummer)-alternativet kan du begrense antall resultater som `locate` returnerer. I denne kommandoen har vi satt en grense på 10 resultater.

locate .html -n 10

`locate` svarer ved å liste opp de første 10 samsvarende filnavnene som finnes i databasen.

Telle samsvarende filer med `locate`

Hvis du bare trenger å vite antall samsvarende filer uten å vite navn eller plassering, bruk alternativet `-c` (count).

locate -c .html

Nå vet vi at det er 431 filer med utvidelsen «.html» på denne maskinen. Kanskje vi vil se på dem, men vi ville først sjekke hvor mange det var. Med denne informasjonen vet vi at vi kanskje må sende utdataene gjennom `less`.

locate .html | less

Her er de alle, eller i det minste toppen av den lange listen over dem.

Ignorer sak med `locate`

`-i` (ignorer case) får `locate` til å ignorere forskjellene mellom store og små bokstaver i søkeordet og filnavnene i databasen. Hvis vi prøver å telle HTML-filene igjen, men feilaktig oppgir søkeordet med store bokstaver, vil vi få null resultater.

locate -c .HTML

Ved å inkludere `-i`-alternativet, kan vi få `locate` til å ignorere forskjellene i skriving og returnere det forventede svaret for denne maskinen, som er 431.

locate -c -i .HTML

Finn databasestatus

For å se statusen til databasen, bruk alternativet `-s` (status). Dette får `locate` til å returnere statistikk om størrelsen og innholdet i databasen.

locate -s

`which`-kommandoen

Kommandoen `which` søker i katalogene i din bane og prøver å finne kommandoen du søker etter. Den lar deg finne ut hvilken versjon av et program eller en kommando som kjøres når du skriver inn navnet i kommandolinjen.

Tenk deg at vi hadde et program som heter `geoloc`. Vi vet at den er installert på datamaskinen, men vi vet ikke hvor den er plassert. Det må være et sted i banen, for når vi skriver inn navnet, kjøres det. Vi kan bruke `which` for å finne den med denne kommandoen:

which geoloc

som rapporterer at programmet ligger i `/usr/local/bin`.

Vi kan sjekke om det finnes andre kopier av programmet et annet sted i banen med alternativet `-a` (all).

which -a geoloc

<img loading=»lazy» decoding=»async» src=»https://tipsbilk.net/wp-content/uploads/2022/02/1643907711_507_Hvordan-bruke-alle-Linuxs-sokekommandoer.png» width=»646″ height=»57″