10 tips for bruk GNU Find

GNU finne verktøyet er en av de mest nyttige kommandoer du noensinne vil få vite. Ved første øyekast alternativene og syntaks kan virke uforståelige. Men med litt trening, vil du være i stand til å finne noen fil på systemet ditt med nesten ingen problemer i det hele tatt. For å hjelpe deg med å komme i gang, har vi 10 måter du kan bruke finner å få det du leter etter.

Merk at ikke alle versjoner av funn er skapt like. Finne kommandoen du vil bruke på Linux er litt annerledes enn den finner på rcng, Solaris, eller Mac OS X. Mye av syntaks er delt og kan brukes mellom systemer, men ikke alle.

Basic Bruk

La oss starte med bare grunnleggende. Hvis du er ute etter å finne en fil, og du vet navnet på filen – bare ikke der du forlot det – da syntaksen er enkel. Bare fortell finne for å søke etter et bestemt navn:

finne -name filnavn

Forutsatt at filnavn
eksisterer, finne viser plasseringen av fil eller filer som samsvarer med navn, som så:


 jzb @ Kodos: ~ $ finne -name filename./projects/filenamejzb@kodos: ~ $ 
Finne filer etter størrelse

Noen ganger er det nyttig å bruke andre attributter for å se etter filer. For eksempel, finne filer etter størrelse. Ett godt eksempel, hvis du arbeider med en server og legge merke til at et av områdene er i ferd med å fylle opp. Hvilken fil eller filer, trenger du å forholde seg til? Du kan bruke finne for å lete etter filer etter størrelse og deretter bekymre deg for hvordan å lage plass.

Ikke overraskende, er muligheten til å teste etter størrelse -size, etterfulgt av den størrelsen du ønsker å se etter. Du kan bruke alt fra blokker (b) til gigabyte (G). For å finne filer som er 100k, ville du kjøre:


 finne -size 100k 

Det ville finne filer som er 100k i størrelse. Det er begrenset bruk, though. For å finne filer som er større eller mindre enn en vilkårlig størrelse, bruke + eller - i tillegg til nummeret. Så finn -size + 100k skal returnere noen filer større enn 100k, og finne -Størrelse -100k skal returnere noe mindre

Du kan også finne filer som er tomme bruker-tom test:.


 finn-tom -type -f 

Merk at jeg inkluderte en ekstra test for filtypen. Uten det, finne vil omfatte kataloger som " tom " filer.

Finne filer etter bruker:

En annen hendig bruk av funn er å finne filer ved eierskap, eller til og med mangel på eierskap. La oss starte med det. Hvis du har vært å flytte filer rundt mellom systemer, eller hvis du har renset noen brukere, du kan ha filer som er foreldreløse. For å finne disse, bruk:


 finne -nouser 

For å finne filer som faktisk er eid av en bestemt bruker, bruker -Bruker eller -uid alternativer. Den -uid alternativet vil tillate deg å søke etter numerisk bruker-ID (UID), og -Bruker lar deg søke etter brukernavn eller UID. Så hvis jeg ønsket å finne alle mine filer i en katalog, vil jeg bruke finne -Bruker jzb, eller jeg kunne bruke finne -Bruker tusen eller finne -uid 1000.

Du ønsker kanskje å søke etter filer som eies av brukeren A eller av bruker B. Du kan gjøre dette ved å legge til -o operatør:


 finne -Bruker root -o -Bruker www-data 

Det vil finne alle filer som eies av root eller www-data. Hvis du ønsker å finne alle filer som ikke
eies av en bruker, kan du bruke -ikke operatør:


 finne -ikke -Bruker www-data 

Selvfølgelig operatørene jobbe med andre alternativer også. Du kan velge å søke etter alle filer som eies av en bruker som ikke er større enn en viss størrelse, for eksempel:


 finne -Bruker www-data-ikke-size + 100k 
Finne filer av konsernet

En annen måte du kan søke etter filer er etter gruppe, bruker-gruppen alternativet. Den -gruppe alternativet tar et gruppenavn eller gruppe-ID (GID). Den grunnleggende syntaks er bare finne -gruppe gruppenavn
.

Selvsagt kan du kombinere dette med andre operatører. Dette kan være nyttig hvis du prøver å finne alle filene som eies av en bestemt bruker, som også er eid av en bestemt gruppe.

Finne etter Tillatelser

Du kan av og til være lurt å sjekke filsystem for filer som er i verdensklasse skrivbar eller på annen måte har den " feil " tillatelser. Funnet verktøyet støtter dette med flere ulike alternativer. Det enkleste er -readable, -writable, og -executable operatører. Disse sjekk for å se om filen er lesbar av brukeren kjører finne
. Vær oppmerksom på at disse alternativene er ikke tilgjengelige i eldre versjoner av finner, så hvis din distro er litt eldre du kanskje ikke har disse alternativene.

Et annet alternativ er å søke etter filen tillatelse hjelp -perm, som faktisk ser ut på filens modus. På denne måten kan du se om en fil matcher et bestemt sett av tillatelser. For eksempel, hvis du ønsker å se hvilke filer er kjørbar etter filen eier og gruppe, bruk:


 finne -type f -perm -110 

110 forteller finne " se etter filer med den kjør bit sett for eier og gruppe " og - forteller finne for å ignorere de andre bitene. Det vil si, det er OK hvis filen er også skrivbar eller lesbar, så lenge bitene er satt for at det skal være kjørbar også.

Hvis du vil begrense søket til bare filer som samsvarer med eksakt
modus, må du ikke bruke den - operatøren

Hva om du ønsker å finne filer som samsvarer med kjør bit for eieren eller gruppe.? I stedet for - bruk /:


 finne -type f -perm /110 

Alle filer som matcher gruppe eller eiertillatelser vil matche søke

Søke. av tillatelse kan være svært nyttig, men litt komplisert. Det tar litt tid å få den syntaks ned, særlig for brukere som ikke allerede er godt bevandret med eierskapsmodi. Dette er en der lesing mannen siden ikke bare anbefalt, men viktig.

Ved hjelp av regulære uttrykk

Noen ganger må du bruke vanlige uttrykk for å matche filnavn. Naturligvis finner støtter denne – muligens mer enn du forventer. Ikke bare finner har regulære uttrykk støtte, den håndterer flere ulike typer regex syntaks. Du kan angi hvilken type hjelp -regextype og en av de støttede typer som POSIX-awk, POSIX-egrep, og så videre. Se man-siden for de støttede typer.

Et raskt eksempel. La oss si at jeg ønsket å finne alle filer som har enten en php eller en JS forlengelse. Jeg kunne kjøre følgende:


 finne -regextype POSIX-egrep -regex '* (php | js) $.' 

Det ser litt komplisert, ikke sant? Brutt ned det står å bruke egrep syntaks (-regextype POSIX-egrep) og deretter gir vanlig uttrykk for å søke etter. Uttrykket begynner og slutter med et enkelt sitat slik at skallet ikke vil prøve å evaluere det vanlige uttrykket selv. Så uttrykket *. Er et wildcard som matcher alle tegn eller tegn. Den (php | js) del sier du skal se etter php eller JS. Røret (|) står for " eller " i det uttrykket. Endelig dollartegnet ($) som lukker uttrykket sier å lete etter disse utvidelsene på slutten av et filnavn. Så hvis du har en fil som heter js.txt, vil det ikke matche.

Som med tillatelser, regulære uttrykk kan være komplisert. Vi kan bare dekke dette emnet i et fremtidig opplæringen. Men for nå, se mannen siden for funn og tilhørende dokumentasjon.

Arbeide med Times

Hva om du ønsker å finne filer etter alder? Dette er noe som kan være nyttig hvis du prøver å finne en fil som du vet du opprettet innenfor en viss tidsramme, eller hvis du ønsker å se etter eldre filer som skal slettes. Massevis av gode grunner, faktisk.

Funnet verktøyet handler om å finne etter tid. Du kan søke etter aksesstid (-atime) eller siste gang en fil ble endret (-mtime) eller ved den siste gangen ble det endret (-ctime).

For eksempel, la oss se etter eventuelle filer som har ikke blitt endret i løpet av de siste to dagene:


 finne -mtime 2 

Alternativene ta et tall som er tolket som " n ganger 24 timer siden " og faktisk omfatter et område. Hvis du sier en, finn vil tolke det som ". Minst 24 timer siden, men ikke mer enn 48 timer siden "

Du kan kombinere alternativene, hvis du ønsker å se etter filer i en spesifikt område. Så finn -mtime to -mtime -5 ville være ". To eller flere dager siden, men ikke mer enn fem dager siden "

Arbeide med Minutes

Noen ganger må du se for filer som er endret i den siste dag eller så, og de forrige alternativene er litt for bred for det. Den gode nyheten er at finner også har -amin, -cmin, og -mmin, som er lik de andre alternativene, men de jobber med minutter i stedet for dager. Så hvis du ønsker å se etter noe som ble endret eller tilgang på den siste dag, kan du bruke disse alternativene.

begrense søk

Noen ganger finner gir flere resultater enn du trenger, eller ønsker. Du kan begrense find resultater ved å bruke -maxdepth alternativet. For eksempel, hvis du ønsket å finne alle Javascript-fil på din wordpress katalog, vil du bruke denne:


 finne wordpress -name '* js' 

Men hva hvis du bare vil for å se om det er noen Javascript-filer i toppkatalog? Du kan begrense det med -maxdepth:


 finne wordpress -maxdepth en -name '* js' 

Det vil bare søke i wordpress-katalogen, men ikke noen av de underkataloger. Endre -maxdepth til 2 vil søke underkataloger i wordpress-katalogen, men det ville ekskludere sine underkataloger.

Kombinere finne med andre kommandoer

Nå som du har funnet filene du leter for, hva skal du gjøre med dem? Du kan bruke finne i forbindelse med xargs eller exec muligheten til å manipulere filer etter at du har funnet det du leter etter.

Si at du ønsker å endre eierskap av en haug med filer fra rot til www -data. Finne alle filene er bare første skritt; du må også endre eierskapet. Gjøre det manuelt fra en liste over filer som returneres av funn høres ut tedium, og det er. Så kan det være lurt å bruke exec muligheten til å endre eierskapet:


 finne -Bruker root-exec chown www-data {} \\; 

At kommandoen forteller finne for å passere alle filene den finner til chown verktøyet og endre eierskapet til www-data. Piece of cake.

Sammendrag

Å vite funn verktøyet er et must for enhver Linux bruker som ønsker å mestre sine systemer. Du kan bli med uten å bruke søk for vanlig stasjonær bruk, men for systemadministrasjon du trenger å vite veien rundt finne. Hvis du kommer til å jobbe med exec og xargs å gjøre endringer i eller fjerne filer, du kjører en test eller to først for å sikre at kommandoen fungerer som forventet.

Har noen finne tips du vil dele med resten av Linux.com samfunnet? Kan du dele dem i kommentarfeltet. Anmeldelser