Utforsk kraften i Linux find-kommandoen
Linux sin find
-kommando er et utrolig fleksibelt verktøy, uunnværlig for systemadministratorer som ønsker å lokalisere og håndtere filer og mapper basert på en rekke søkekriterier. Den gir deg muligheten til å identifisere elementer etter navn, type, filendelse, størrelse, tilgangsrettigheter og mye mer.
Utover den enkle lokaliseringen, kan find
-kommandoen kombineres med andre kommandoer for å utføre handlinger på de funnede elementene. Ved å benytte -exec
-alternativet, kan systemadministratorer kjøre eksterne kommandoer for å kopiere, flytte, slette eller endre tilgangsrettigheter for filene som matcher de oppgitte kriteriene, som for eksempel størrelse eller navn.
I denne veiledningen vil vi først se på grunnleggende bruk av Linux find
-kommandoen med praktiske eksempler, som viser deg hvordan du effektivt finner filer og mapper. Deretter vil vi utforske hvordan du kan bruke -exec
-alternativet for å utføre operasjoner på de identifiserte filene og mappene basert på egenskaper som størrelse og tilgangsrettigheter.
Den grunnleggende strukturen for find
-kommandoen er slik:
find {sti} {navn-på-fil-eller-mappe-å-søke} {handling-som-skal-utføres}
Hvor:
sti
: Angir katalogen der søket skal starte.navn-på-fil-eller-mappe-å-søke
: Spesifiserer filen eller mappen du leter etter.handling-som-skal-utføres
: Definerer handlingen som skal utføres på de funne elementene (f.eks. kopiere, slette, flytte).
I denne opplæringen vil vi fokusere på hvordan du lokaliserer filer og mapper som samsvarer med spesifikke mønstre, og hvordan du utfører handlinger på dem etter at de er funnet. Veiledningen er basert på Ubuntu, men prinsippene gjelder for de fleste Linux-distribusjoner og versjoner.
Finne Filer og Mapper
Søk etter bestemte filer basert på navn eller filtype
For å finne en bestemt fil, utfør kommandoen fra rotkatalogen (/
). Kommandoen skal inneholde det nøyaktige filnavnet du er ute etter.
find . -name file22.txt
Eksempelresultat:
./test/file22.txt ./sales/file22.txt
Merk at resultatene viser hele stien til filen. Dette er nyttig når du ikke vet filens eksakte plassering, eller når den er lagret på flere steder.
Du kan også søke etter en fil i en bestemt katalog mens du befinner deg et annet sted. I dette tilfellet må du spesifisere stien til katalogen der du ønsker å søke.
find ./test -name file22.txt
Søke etter spesifikke filer i en annen katalog
La oss si at vi vil finne alle filene i test
-katalogen som begynner med bokstaven «fil».
find ./test -name file*
Eksempelresultat:
./test/file22.txt ./test/file30.doc ./test/file1.txt ./test/file5,doc
Søke etter filer basert på filendelse
For å finne alle filer med en bestemt filendelse, legg til denne filendelsen i kommandoen.
find . -name *.txt
Eksempelresultat:
./test/subtest/subfil.txt ./test/file22.txt ./test/file1.txt ./home1/files32.txt ./home2/file22.txt ./qa/tags.txt
Finne både filer og mapper etter navn
Bruk kommandoen nedenfor for å finne både filer og mapper som begynner med bokstavene «qa». I vårt tilfelle har vi filene qatree.txt
og qa.txt
, i tillegg til en mappe med navnet qa
.
Hvis vi kjører kommandoen:
find ./ -name "qa*"
Dette returnerer følgende resultat:
./test/qatree.pdf ./test/qa.txt ./home/qa
Kommandoen returnerer både filer og mapper som matcher søkekriteriene. For å kun finne filer eller mapper, må du spesifisere dette i kommandoen.
Bare finn filer eller mapper
For å finne bare filer, bruk -type f
-bryteren.
Bare filer:
find ./ -type f -name "qa*"
Eksempelresultat:
./test/qatree.pdf ./test/qa.txt
Bare mapper:
Legg til -type d
-alternativet for å bare finne mapper.
find ./ -type d -name "qa*"
Eksempelresultat:
./home/qa
find
-kommando som ignorerer store og små bokstaver
Alle søk med -name
-bryteren skiller mellom store og små bokstaver. For å gjøre et søk som ikke skiller mellom store og små bokstaver, bruk -iname
-alternativet.
find ./ -iname "qa*"
Eksempelresultat:
./test/qatree.pdf ./test/qa.txt ./test/QAtest.txt ./home/qa
Søke etter en fil i flere mapper
For å søke etter filer i flere mapper, legg til stiene til disse mappene i kommandoen. I vårt tilfelle vil vi søke i test
– og numeric
-mappene.
find ./test ./numeric -name file22.txt -type f
Eksempelresultat:
./test/file22.txt /root/numeric/file22.txt
Finne flere filer med ulike filendelser fra alle mapper
Du kan bruke find
-kommandoen for å finne flere filer som deler ulike filtyper som *.doc
, *.txt
, *.pdf
, etc. Dette kan gjøres separat, én filendelse om gangen, eller med én kommando som inkluderer alle ønskede filendelser.
find . -type f \( -name "*.txt" -o -name "*.pdf" -o -name "*.doc" \)
Eksempelresultat:
./test/subtest/subfil.txt ./test/qatree.pdf ./test/file22.txt ./test/qa.txt ./test/file30.doc ./books/acro.pdf ./data1/FILE22.txt ./docs/files32.txt
Finne filer som inneholder bestemt tekst
Noen ganger ønsker du å finne en fil som inneholder en bestemt tekststreng, men du husker ikke filnavnet eller plasseringen. Denne kommandoen lar deg finne alle filer som inneholder den spesifikke teksten.
For å søke etter alle filer som inneholder ordet «hyperkonvergens», bruk:
find / -type f -exec grep -l -i "hyperkonvergens" {} ;
Eksempelresultat:
/root/numeric/hci /root/HCIP
-i
-alternativet gjør at kommandoen ignorerer forskjellen mellom store og små bokstaver, og vil finne teksten uavhengig av hvordan den er skrevet (f.eks. hyperkonvergens, Hyperkonvergens).
For å søke etter filer i en bestemt mappe, legg til denne mappen i kommandoen:
find ./numeric -type f -exec grep -l -i "hyperkonvergens" {} ;
Eksempelresultat:
./numeric/hci
Utforsk flere eksempler på grep
-kommandoer.
Finne Filer og Mapper Basert På Størrelse
Du kan finne alle filer eller mapper som er mindre, like eller større enn en bestemt størrelse, innenfor et visst område eller tomme. Bruk de passende størrelsesformatene avhengig av filene eller mappene du leter etter.
Størrelsesalternativer inkluderer:
c | byte |
k | kilobyte |
M | Megabyte |
G | Gigabyte |
Finne filer av en spesifikk størrelse – eksakt 30 MB
For å søke etter alle filer som er nøyaktig 30 MB, bruk:
find / -size 30M
Finne filer som er større enn en spesifikk størrelse
find -size +2M
Eksempelresultat:
./Downloads/ubuntu18043.iso ./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Finne filer som er mindre enn 10 MB i gjeldende mappe
find . -type f -size -10M
Finne filer med størrelse mellom 100-200 MB
Når du søker etter filer innenfor et spesifikt område, for eksempel mellom 100 og 200 MB:
find / -size +100M -size -200M
Søke etter mapper som er større enn 20 KB
find / -type d -size +20k
Finne tomme filer og mapper
Filer:
find ./ -type f -size 0
eller
find ./ -type f –empty
Mapper:
find ./ -type d –empty
Finne filer etter alder eller endringstid
Finne filer som er eldre enn n dager:
find /path/ -type f -name '*.txt' -mtime +8
-mtime +8
vil søke etter txt-filer som er eldre enn 8 dager.
Etter endringstidspunkt
Dette vil søke etter filer som har blitt endret de siste 17 timene:
find . -mtime -17 -type f
Søke etter mapper som har blitt endret de siste 10 dagene:
find . -mtime -10 -type d
Finne filer basert på tilgang eller endring
Finn filer basert på dato og klokkeslett for tilgang. Dette lar deg se filer som har eller ikke har blitt åpnet i en spesifisert periode.
For å se filer som ikke har blitt åpnet de siste 10 dagene i hjemmemappen:
find /home -atime +10
Filer som ble åpnet for nøyaktig 10 dager siden:
find /home -atime 10
Tilgang i løpet av de siste 10 dagene:
find /home -atime -10
Finne filer som har blitt endret de siste n dagene
Du kan også søke etter filene i /home
-mappen som har blitt endret de siste 10 dagene ved å bruke kommandoen:
find /home -mtime -10
Finne filer som har blitt endret i løpet av en bestemt periode
For eksempel, alle filer som har blitt endret mellom 6 og 15 dager siden i hjemmemappen:
find /home -type f -mtime +6 -mtime -15
Filer og mapper som har blitt åpnet de siste 10 minuttene
For å finne filer som har blitt åpnet de siste 10 minuttene, bruk -amin
-alternativet.
find . -amin -10 -type f
Eksempelresultat:
./.bash_history ./[email protected]:~#
Mapper som har blitt åpnet de siste 10 minuttene:
find . -amin -10 -type d
Finne Filer Som Samsvarer Med Spesifikke Tillatelser
Syntaks:
$ find -perm modus
Hvor modus
er tillatelsen som enten er numerisk (som 644, 655, 700, 777 osv.) eller bokstavbasert (som u=x, a=r+x osv.).
Du kan spesifisere modus
på tre forskjellige måter:
- Uten prefiks, for å finne filer med eksakt de spesifiserte tillatelsene.
- Med
-
foran, for filer som har minst de angitte tillatelsene. Dette returnerer filer med de spesifiserte, i tillegg til høyere tillatelser. - Med
/
foran, krever spesifikasjon av eier eller gruppe med tillatelse til filen.
Finne filer med tillatelse 777
find -perm 777
Eksempelresultat:
./file1
Finne filer med minst 766
find -perm -766
Eksempelresultat:
./file2 ./file1
Kommandoen søker etter alle filer der:
- Filens eier har lese-/skrive-/utføringsrettigheter.
- Gruppen har lese-/skriverettigheter.
- Andre har lese-/skriverettigheter.
Derfor returnerer den to filer som oppfyller dette kriteriet – file1
og file2
. Filene trenger ikke å ha nøyaktig 766-tillatelser, men kan ha flere så lenge de har minst de spesifiserte.
Finne filer som kan skrives av eieren
Vi vil nå bruke /
for å søke etter filer som kan skrives av enten eieren, gruppen eller andre.
find -perm /222
Eksempelresultat
. ./file2 ./file3 ./file1
Ovennevnte kommando søker etter filer som kan skrives av enten eieren eller gruppen.
Dette returnerer filer som kan skrives av begge, men ikke nødvendigvis begge. For å se filer der begge har skrivbare tillatelser, bruk -
-prefikset.
find -perm -220
Eksempelresultat:
./file2 ./file1
Finne filer som eies av en bruker
Finne alle filer som eies av Jack:
find /home -user jack
Eksempelresultat:
/home/jack /home/jack/examples.desktop /home/jack/.gnupg /home/jack/.gnupg/private-keys-v1.d /home/jack/ans.cgi
Finne spesifikke filer som eies av en bruker
Finne alle tekstfiler som eies av Jack:
find /home -user jack -iname "*.txt"
Eksempelresultat:
/home/jack/docs/file32.txt
Finne og liste filer og mapper sammen med deres tillatelser
find -name "*.conf" | ls -l
Eksempelresultat:
total 120 drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2 drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads -rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23 -rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt
Finne Og Utføre Handlinger På Resultatene
I denne delen skal vi se hvordan du kan utføre handlinger på filene som samsvarer med mønsteret spesifisert i find
-kommandoen.
Finne filer og endre tillatelser
Finne og endre tillatelser for bestemte filtyper. I vårt tilfelle vil vi arbeide med PHP-filer med ulike tillatelser, som vist nedenfor:
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php
Vi vil nå søke etter alle PHP-filene (over) og endre tillatelsene til 755:
find ver -name "*.php" -type f -exec chmod 755 {} ;
Kommandoen søker etter PHP-filer i ver
-mappen og setter deretter deres tillatelser til 755 (rwxr-xr-x).
Resultater:
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php
Finne og endre fil- og mappetillatelser
Finne filer med 644 tillatelser og endre dem til 655 tillatelser:
find . -type f -perm 644 -exec chmod 655 {} ;
Du kan også søke etter mapper med 644 tillatelser og endre dem til 755:
find . -type d -perm 644
Eksempelresultat:
./docs
docs
-mappen har 644 tillatelser:
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
For å sette den til 755, kjører vi:
find . -type d -perm 644 -exec chmod 755 {} ;
Nå kan vi sjekke igjen for å se nøyaktig hva 755 er:
find . -type d -perm 755
Eksempelresultat:
. ./docs
Ovenfra kan vi se at rot- og docs
-mappene har 755 tillatelser.
ls -la
-kommandoen gir følgende detaljer:
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Finne og kopiere filer eller mapper
Finne og kopiere en bestemt fil til en mappe:
Kommandoen nedenfor vil finne filen file22.txt
og kopiere den til ~/tmp/images
-mappen:
find -iname file22.txt -exec cp {} ~/tmp/images ;
Finne og kopiere én type filer til en mappe:
For å finne bildefiler med jpg
-endelse i gjeldende mappe og kopiere dem til en annen plassering, for eksempel en bildemappe, bruk:
find -iname '*.jpg' -exec cp {} ~/tmp/images ;
Dette vil finne og kopiere alle jpg-filene til ~/tmp/images
-mappen.
Finne og kopiere én fil til flere mapper
Finne og kopiere en enkelt fil til flere mapper:
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Dette vil finne hci
-filen og kopiere den til de tre mappene /tmp/dir1/
, /tmp/dir2/
og $HOME/3/
.
Finne og flytte filer til en annen mappe
For å flytte en kjent fil fra en mappe til en annen. For å flytte filen universal.php
:
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Søke og flytte filer med en bestemt endelse til en annen mappe:
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Finne spesifikke filer og flytte dem til en annen mappe
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
Kommandoen søker etter alle filer med navn som begynner med uni
og som har en filtype. Den flytter dem deretter til /unifiles/
-mappen.
Finne og flytte filer basert på alder
Finne og flytte filer som er eldre enn et visst antall dager til et annet sted, for eksempel arkivet:
find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;
Dette vil søke etter pdf-filer som er eldre enn 20 dager og flytte dem til backup1
-mappen.
Finne og slette filer og mapper
Syntaksen for å finne og fjerne filer eller mapper i gjeldende mappe er:
find . -type f -name "fil-som-skal-slettes" -exec rm -f {} ;
, for å slette filer, eller
find . -type d -name "mappe-som-skal-slettes" -exec rm -rf {} ;
, for å slette mapper.
Finne og slette kun bestemte filer
For å finne og slette filer som begynner med til
, bruk:
find . -type f -name "til*" -exec rm {} ;
For å finne og slette mapper som begynner med til
:
find . -type d -name "til*" -exec rm {} ;
Fjerne både filer og mapper
find . -name "til*" -exec rm -rf {} ;
Dette vil fjerne både filer og mapper som begynner med bokstavene til
.
Slette filer basert på filendelse
Nedenfor er hvordan du kan finne og slette alle txt-filer i gjeldende mappe. Erstatt txt-filen med en annen filendelse, for eksempel bak
, pdf
eller en annen du ønsker å fjerne.
find . -type f -name "*.txt" -exec rm -f {} ;
Hvis du vil at systemet skal be deg om å bekrefte før du sletter hver fil, legg til -i
-alternativet som nedenfor:
find . -type f -name "*.txt" -exec rm -i {} ;
Eksempelresultat:
rm: remove regular empty file './File22.txt'? y rm: remove regular empty file './file22.txt'? y rm: remove regular empty file './file23.txt'?
Som standard vil -rm
ikke fjerne mapper, og du må bruke -r
-alternativet for å sikre en rekursiv fjerning. Dette sørger for sletting av tomme mapper og de som inneholder filer. Alternativet -f
tvinger fjerningen og brukes for både filer og mapper.
Finne og slette filer som er eldre enn n dager
Finne og slette sikkerhetskopifiler som er eldre enn 20 dager fra gjeldende mappe:
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Dette vil slette alle .bak
-filer som er eldre enn 20 dager.
Finne og slette kun mapper
For å slette en mappe som heter dir22
:
find . -type d -name dir22 -exec rm -rf {} ;
Sørg for at du samsvarer med mappenavnet eller bruk alternativet -iname
:
find . -type d -iname Dir22 -exec rm -rf {} ;
Dette fjerner både Dir22
og dir22
.
For å bekrefte før sletting, bruk -i
-alternativet:
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Eksempelresultat:
rm: fjerne katalogen «./Dir22»? n rm: fjerne katalogen «./dir22»? y
I vårt tilfelle skrev vi n
for mappen Dir22
som ikke vil bli slettet, og y
for mappen dir22
som nå vil bli fjernet.
Finne og fjerne tomme filer
Du kan bruke hvilken som helst av følgende kommandoer for å finne tomme filer og slette dem automatisk:
find ./ -type f -size 0 -exec rm -f {} ;
eller
find ./ -type f -size 0 | xargs rm -f
eller
find ./ -type f -size 0 -delete
Finne og fjerne tomme mapper
For å fjerne tomme mapper, bruker vi d
-alternativet:
find ./ -type d -empty -exec rmdir {} ;
Et annet alternativ er å bruke delete
istedenfor rmdir
:
find ./ -type d -empty -delete
Vær oppmerksom på at sletting av systemfiler eller kritiske filer fra datamaskinen din kan skade operativsystemet eller applikasjoner, eller føre til tap av viktig data.
For å unngå utilsiktede slettinger er det best å bruke en ikke-root-brukerkonto. Pass også på at du sletter de riktige filene som ikke er nyttige, og at du har en sikkerhetskopi av alle datafiler i tilfelle.
Hva blir det neste?
Prøv de nevnte Linux find
-kommandoene i laboratoriet eller et ikke-produksjonsmiljø. Se om du kan bruke noen av dem til å automatisere filsystemopprydding med Crontab. Og for å mestre Linux, sjekk ut dette nettkurset.