Hvordan bruke alle Linuxs søkekommandoer

Linux tilbyr seks forskjellige måter å søke på, og hver har sine fordeler. Vi vil demonstrere hvordan du bruker find, locate, which, whereis, whatis og apropos. Hver utmerker seg på forskjellige oppgaver; her er hvordan du velger riktig verktøy for jobben.

Du er bortskjemt med valg når det kommer til kommandoer for å søke og finne i Linux. Hvorfor så mange? Vel, de har hver sine spesialiteter og presterer bedre enn de andre under visse omstendigheter. Du kan tenke på dem som en slags sveitsisk-hærkniv for søking. Vi skal se på hvert blad etter tur og finne ut dets spesielle styrker.

Finn-kommandoen

Oppførselen til finn-kommandoen er vanskelig å bestemme ved prøving og feiling. Med en gang du forstå syntaksenbegynner du å sette pris på dens fleksibilitet og kraft.

Den enkleste måten å bruke finn på er å skrive finn og trykke enter.

find

Brukt på denne måten fungerer find som ls, men det viser alle filene i gjeldende katalog og de i underkataloger.

Noen implementeringer av finn krever at du legger . for gjeldende katalog. Hvis dette er tilfellet med din versjon av Linux, bruk følgende kommando:

find .

For å finne søk fra rotmappen, bruker du denne kommandoen:

find /

For å starte søket fra hjemmemappen din, bruk denne kommandoen:

find ~

Bruke finn med filmønstre

For at funn skal være noe mer enn en automatisk tilbakevendende versjon av ls, må vi gi den noe å søke etter. Vi kan gi filnavn eller filmønstre. Mønstre bruker jokertegn der * betyr en hvilken som helst streng med tegn og ? betyr et enkelt tegn.

Mønstre må siteres for å fungere riktig. Det er lett å glemme å gjøre dette, men hvis du ikke siterer vil jokertegnmønsteret ikke kunne utføre kommandoen du ga den på riktig måte.

Med denne kommandoen skal vi søke i gjeldende mappe etter filer som samsvarer med mønsteret «*.*s». Dette betyr et hvilket som helst filnavn som har en filtype som ender på «s». Vi bruker alternativet -name for å fortelle funn at vi enten sender inn et filnavn eller et filnavnmønster.

find . -name "*.*s"

finne.  -Navn

find returnerer disse samsvarende filene.

Merk 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 hadde ønsket filtypene med to tegn, ville vi ha brukt «*.?s».

Hvis vi på forhånd hadde visst at vi var på utkikk etter JavaScript «.js»-filer, kunne vi vært mer spesifikke i filmønsteret vårt. Vær også oppmerksom på at du kan bruke enkle anførselstegn for å pakke inn mønsteret hvis du foretrekker det.

find . -name '*.js'

finne.  -Navn

Denne gangen finner du bare rapporter om JavaScript-filene.

Ignorerer sak med finn

Hvis du vet navnet på filen du vil finne for å finne, kan du sende den til å finne i stedet for et mønster. Du trenger ikke pakke filnavnet inn i anførselstegn hvis det ikke er jokertegn i det, men det er god praksis å gjøre det hele tiden. Å gjøre det betyr at du ikke glemmer å bruke dem når du trenger dem.

find . -name 'Yelp.js'

Det ga ingenting tilbake. Men det er rart, vi vet at filen må være der. La oss prøve igjen og fortelle find om å ignorere store og små bokstaver. Vi gjør det ved å bruke -iname-alternativet (ignorer navn på store og små bokstaver)

find. -iname 'Yelp.js'

Det var problemet, filnavnet starter med en liten «y», og vi søkte med en stor «Y.»

Tilbakevendende underkataloger med finn

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

find . -name "map*.*"

finne.  -Navn

De samsvarende filene er oppført. Merk at de alle er i en underkatalog.

Søker etter kataloger med finn

Alternativet -path får søk til å se etter kataloger. La oss se etter en katalog som vi ikke helt husker navnet på, men vi vet at den ender med bokstavene «om».

find . -path '*about'

Katalogen er funnet, den kalles bare «om», og den er nestet inne i en annen katalog i gjeldende katalog.

  Slik kobler du sammen to sett med AirPods med samme iPhone

Det er et -ipath (ignorer case path)-alternativet som lar deg søke etter stier og ignorere store og små bokstaver, på samme måte som -iname-alternativet diskutert ovenfor.

Bruke filattributter med finn

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

find . -empty

Alle filer med null bytelengde vil bli oppført i søkeresultatene.

Alternativet -executable vil finne alle filer som kan kjøres, for eksempel et program eller et skript.

find . -executable

Resultatene viser en fil kalt «fix_aptget.sh».

De inneholder også tre kataloger, inkludert «.», den gjeldende katalogen. Katalogene er inkludert i resultatene fordi execute-biten er satt i filtillatelsene deres. Uten dette ville du ikke kunne endre til («kjøre») disse katalogene.

Alternativet -type

Alternativet -type lar deg søke etter typen objekt du leter etter. Vi kommer til å gi typeindikatoren «f» som en parameter til -type-alternativet fordi vi ønsker kun å søke etter filer.

find . executable -type f

Denne gangen er ikke underkatalogene 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 katalogene kan vi bruke alternativet -type med typeindikatoren «d».

find . type -d

Bare kataloger og underkataloger er oppført i resultatene.

Bruke andre kommandoer med find

Du kan utføre noen ekstra handlinger på filene som blir funnet. Du kan få filene sendt til en annen kommando.

Hvis vi trenger å sørge for at det ikke er noen kjørbare filer i gjeldende katalog og underkataloger, kan vi bruke følgende kommando:

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

Kommandoen betyr:

Søk i gjeldende katalog etter et navngitt objekt kalt «fix_aptget.sh».
Hvis den blir funnet, utfør chmod-kommandoen.
Parametrene som sendes til chmod er -x for å fjerne kjørbare tillatelser og «{}» som representerer filnavnet til filen som ble funnet.
Det siste semikolonet markerer slutten på parameterne som skal sendes til chmod. Dette må «unnslippes» ved å innlede det med en «omvendt skråstrek».

Når denne kommandoen er kjørt, kan vi søke etter kjørbare filer som før, og denne gangen vil det ikke være noen filer oppført.

For å kaste nettet bredere, kan vi bruke et filmønster i stedet for filnavnet vi brukte i vårt eksempel.

Denne fleksibiliteten lar deg søke etter spesifiserte filtyper, eller med filnavnmønstre, og få utført noen handlinger på de samsvarende filene.

Finne har mange andre alternativerinkludert søk etter filer etter endringsdato, filer som eies av en bruker eller gruppe, filer som er lesbare eller filer som har et spesifikt sett med filtillatelser.

Finn og mlocate-kommandoene

Mange Linux-distribusjoner pleide å ha en kopi av locate inkludert. Dette ble erstattet av mlocate-kommandoen, som var en forbedret og oppdatert versjon av locate.

Når mlocate er installert på et system, endrer den locate-kommandoen slik at du faktisk bruker mlocate selv om du skriver locate.

Gjeldende versjoner av Ubuntu, Fedora og Manjaro ble sjekket for å se om de hadde versjoner av disse kommandoene forhåndsinstallert på dem. 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 utføres for deg av mlocate.

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

locate --version

Fordi locate fungerer på alle Linux-distribusjonene som ble testet, bruker vi locate i forklaringene nedenfor. Og det er én bokstav mindre å skrive.

Finn databasen

Den største fordelen som lokalisering har er hastighet.

Når du bruker finn-kommandoen, springer den av og utfører et søk på tvers av filsystemet. Lokaliseringskommandoen fungerer veldig annerledes. Den gjør et databaseoppslag for å finne ut om det du leter etter er på datamaskinen din. Det gjør søket mye raskere.

Selvfølgelig reiser det et åpenbart spørsmål om databasen. Hva sikrer at databasen er oppdatert? Når mlocate er installert, plasserer den (vanligvis) en oppføring i cron.daily. Denne kjører hver dag (veldig tidlig om morgenen) og oppdaterer databasen.

For å sjekke om denne oppføringen eksisterer, bruk denne kommandoen:

ls /etc/cron.daily/*loc*

Hvis du ikke finner en oppføring der, kan du sette opp en automatisert oppgave for å gjøre dette for deg på det tidspunktet du velger.

  Rediger fokus og intensitet til uskarphet-effekten i Google Kamera-appen

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

sudo updatedb

Ved hjelp av locate

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

locate getlatlong

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

Fortell finn hvor mange resultater du ønsker

Noen ganger vet du kanskje at det er mange filer av typen du søker etter. Du trenger bare å se de første av dem. Kanskje du bare vil bli påminnet hvilken katalog de er i, og du trenger ikke å se alle filnavnene.

Ved å bruke -n (tall)-alternativet kan du begrense antallet resultater som finner vil returnere til deg. 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 den henter fra databasen.

Telling av samsvarende filer

Hvis du bare vil vite antall samsvarende filer og du ikke trenger å vite hva de heter eller hvor de er på harddisken din, bruk alternativet -c (telling).

locate -c .html

Så nå vet vi at det er 431 filer med utvidelsen «.html» på denne datamaskinen. Kanskje vi ønsker å ta en titt på dem, men vi tenkte vi skulle ta en titt og se hvor mange det var først. Bevæpnet med den kunnskapen vet vi at vi trenger å røre produksjonen gjennom mindre.

locate .html | less

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

Ignorerer sak med lokalisering

-i (ignorer store og små bokstaver) får locate til å gjøre nettopp det, den ignorerer store og små bokstaver forskjeller mellom søkeordet og filnavnene i databasen. Hvis vi prøver å telle HTML-filene på nytt, men feilaktig oppgir søkeordet med store bokstaver, får vi null resultater.

locate -c .HTML

Ved å inkludere -i-alternativet kan vi få locate til å ignorere forskjellen i tilfelle, og returnere vårt forventede svar 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 litt statistikk om størrelsen og innholdet i databasen.

locate -s

Hvilken kommando

Hvilken kommando søker gjennom katalogene på banen din, og prøver å finne kommandoen du søker etter. Den lar deg bestemme hvilken versjon av et program eller kommando som skal kjøres når du skriver navnet på kommandolinjen.

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

which geoloc

som rapporterer at programmet er plassert i /usr/local/bin.

Vi kan sjekke om det finnes andre kopier av programmet andre steder i banen ved å bruke -a (alle)-alternativet.

which -a geoloc

Dette viser oss at vi har geoloc-programmet to steder.

Selvfølgelig vil kopien i /usr/local/bin bli funnet først av Bash-skallet hver gang, så det er meningsløst å ha programmet på to steder.

Fjerning av versjonen i /usr/bin/geoloc vil spare deg for litt harddiskkapasitet. Enda viktigere, det vil også unngå problemer opprettet av noen som manuelt oppdaterer programmet, og gjør det på feil sted. Lurer så på hvorfor de ikke ser de nye oppdateringene når de kjører programmet.

Whereis-kommandoen

Whereis-kommandoen ligner på which-kommandoen, men den er mer informativ.

I tillegg til plasseringen av kommandoen eller programfilen, rapporterer whereis også hvor mannen (manual) sider og kildekode filene er lokalisert. I de fleste tilfeller vil ikke kildekodefilene være på datamaskinen din, men hvis de er det, vil den rapportere om dem.

Den binære kjørbare filen, man-sidene og kildekoden blir ofte referert til som «pakken» for den kommandoen. Hvis du vil vite hvor de ulike komponentene i pakken for diff-kommandoen er plassert, bruk følgende kommando:

whereis diff

whereis svarer ved å liste opp plasseringen av diff-man-sidene og diff-binærfilen.

For å begrense resultatene til kun å vise plasseringen av binæren (faktisk få whereis til å fungere som som) bruk alternativet -b (binær).

whereis -b diff

whereis rapporterer kun om plasseringen av den kjørbare filen.

For å begrense søket til kun å rapportere på man-sidene, bruk alternativet -m (manuell). For å begrense søket til kun å rapportere om kildekodefilene, bruk alternativet -s (kilde).

  Hvordan lage et nettsted fra telefonen

For å se plasseringene som søker gjennom, bruk alternativet -l (plasseringer).

whereis -l

Stedene er oppført for deg.

Nå som vi vet hvilke steder det vil søke i, kan vi, hvis vi velger det, begrense søket til et bestemt sted eller gruppe med steder.

Alternativet -B (binær liste) begrenser søket etter kjørbare filer til listen over stier som er oppgitt på kommandolinjen. Du må oppgi minst ett sted for hvor du kan søke gjennom. Alternativet -f (fil) brukes til å signalisere slutten av plasseringen sist starten av filnavnet.

whereis -B /bin/ -f chmod

hvor ser det ut på det eneste stedet vi ba om å søke gjennom. Det er tilfeldigvis der filen ligger.

Du kan også bruke alternativet -M (manuell liste) for å begrense søk etter man-sider til banene du oppgir på kommandolinjen. Alternativet -S (kildeliste) lar deg begrense søket etter kildekodefiler på samme måte.

Whatis-kommandoen

Whatis-kommandoen brukes til å raskt søke gjennom man (manual) sidene. Det gir én-linjes sammendragsbeskrivelser av ordet du har bedt om å søke etter.

La oss starte med et enkelt eksempel. Selv om det ser ut som utgangspunktet for dyp filosofisk debatt, spør vi bare hva som skal fortelle oss hva begrepet «mann» betyr.

whatis man

whatis finner to samsvarende beskrivelser. Den skriver ut en kort beskrivelse for hver kamp. Den viser også den nummererte delen av håndboken som inneholder hver fullstendig beskrivelse.

For å åpne håndboken i delen som beskriver man-kommandoen, bruk følgende kommando:

man 1 man

Manualen åpnes ved seksjon mann(1), på siden for mann.

For å åpne håndboken i seksjon 7, på siden som diskuterer makroene du kan bruke til å generere man-sider, bruk denne kommandoen:

man 7 man

Mannsiden for mannmakroene vises for deg.

Søke i spesifikke deler av håndboken

Alternativet -s (seksjon) brukes til å begrense søket til deler av håndboken du er interessert i. For å få søket begrenset til avsnitt 7 i håndboken, bruk følgende kommando. Legg merke til anførselstegn rundt seksjonsnummeret:

whatis -s "7" man

hva er -s

Resultatene refererer kun til avsnitt 7 i håndboken.

Bruke whatis med jokertegn

Du kan bruke jokertegn med whatis. Du må bruke alternativet -w (jokertegn) for å gjøre det.

whatis -w char*

De samsvarende resultatene er oppført i terminalvinduet.

Den apropos kommando

Apropos-kommandoen ligner på whatis, men den har noen flere bjeller og fløyter. Den søker gjennom man sidetitlene og en linje beskrivelser på jakt etter søkeordet. Den viser de samsvarende man-sidebeskrivelsene i terminalvinduet.

Ordet apropos betyr «relatert til» eller «angående», og kommandoen apropos tok navnet fra dette. For å søke etter noe relatert til kommandoen grupper, kan vi bruke denne kommandoen:

apropos groups

apropos viser resultatene til terminalvinduet.

Bruker mer enn ett søkeord

Du kan bruke mer enn ett søkeord på kommandolinjen. apropos vil søke etter man-sider som inneholder en av søkeordene.

apropos chown chmod

Resultatene er listet opp som før. I dette tilfellet er det én enkelt oppføring for hvert av søkeordene.

Bruk av eksakte treff

apropos vil returnere man-sider som inneholder søkeordet selv om termen er midt i et annet ord. For å få apropos til å bare returnere eksakte treff for søkeordet, bruk alternativet -e (eksakt).

For å illustrere dette bruker vi apropos med grep som søkeord.

apropos grep

Det er mange resultater som returneres for dette, inkludert mange der grep er inkorporert i et annet ord, for eksempel bzfgrep.

La oss prøve det igjen og bruke -e (eksakt) alternativet.

apropos -e grep

Vi har ett enkelt resultat denne gangen, for det vi faktisk lette etter.

Matcher alle søkeord

Som vi så tidligere, hvis du oppgir mer enn ett søkeord, vil apropos søke etter man-sider som inneholder begge søketermene. Vi kan endre den oppførselen ved å bruke -a (og)-alternativet. Dette gjør at apropos kun velger treff som har alle søketidene i seg.

La oss prøve kommandoen uten -a-alternativet slik at vi kan se hvilke resultater apropos gir.

apropos crontab cron

Resultatene inkluderer man-sider som samsvarer med det ene eller det andre av søkeordene.

Nå bruker vi alternativet -a.

apropos -a crontab cron

Denne gangen er resultatene begrenset til de som inneholder begge søkeordene.

Enda flere alternativer

Alle disse kommandoene har flere alternativer – noen av dem mange flere alternativer – og du oppfordres til å lese man-sidene for kommandoene vi har diskutert i denne artikkelen.

Her er et raskt sammendrag for hver kommando:

finn: Gir en funksjonsrik og detaljert søkefunksjon for å se etter filer og kataloger.
locate: Gir et raskt databasedrevet søk etter programmer og kommandoer.
which: Søker i $PATH på jakt etter kjørbare filer
whereis: Søker i $PATH på jakt etter kjørbare filer, man-sider og kildekodefiler.
whatis: Søker i mannens énlinjes beskrivelser etter treff til søkeordet.
apropos: Søker på man-siden med mer nøyaktighet enn hva som er, etter treff til søkeordet eller -termene.

Leter du etter mer Linux-terminalinformasjon? Her er 37 kommandoer du bør kjenne til.