Linux find kommandoen er et kraftfuldt værktøj, der gør det muligt for systemadministratorer at finde og administrere filer og mapper baseret på en lang række søgekriterier. Det kan finde mapper og filer efter deres navn, deres type eller udvidelse, størrelse, tilladelser osv.
Udover at lokalisere filer og mapper, giver kombinationen find-kommandoen med andre dig mulighed for at handle på resultaterne. Tilføjelse af -exec-indstillingen gør det muligt for sysadmins at køre eksterne kommandoer og udføre handlinger som kopiering, flytning, sletning eller ændring af tilladelser af filerne, der matcher de angivne kriterier såsom størrelse, navn osv.
I denne artikel vil vi starte med at forklare de grundlæggende Linux-findingskommandoer med eksempler. Dette vil vise dig, hvordan du finder filer og mapper. Vi vil derefter vise dig, hvordan du bruger -exec-indstillingen til at handle på filerne eller mapperne baseret på deres størrelse, tilladelser osv.
Den generelle syntaks for find-kommandoen er
find {path} {name -of-file or dir-to-search} {action-to-take}
Hvor,
- sti angiver mappen.
- navn på fil eller dir-to-search : Navnet på filen eller mappen, der skal søges efter
- handling, der skal tages: såsom kopiere, slette, flytte osv.
I denne vejledning vil vi forklare, hvordan du finder filer og mapper, der matcher specificerede mønstre. Vi vil også se, hvordan man udfører handlinger på de filer eller mapper, som find-kommandoen lokaliserer. Vejledningen er baseret på Ubuntu, men gælder for de fleste Linux-distributioner og -versioner.
Indholdsfortegnelse
Find filer og mapper
Find bestemte filer efter navn eller filtypenavn
For at lede efter en bestemt fil skal du køre følgende kommando fra roden (/). Kommandoen indeholder det nøjagtige navn på den fil, du søger efter.
find . -name file22.txt
Produktion
./test/file22.txt ./sales/file22.txt
Bemærk venligst, at resultaterne inkluderer stien. Dette er vigtigt, hvis du ikke kender den mappe, hvor filen er placeret, eller når den er mere end ét sted.
Du kan også søge efter filen i en anden mappe, mens du stadig er på den aktuelle placering. I dette tilfælde skal du angive stien til den mappe, hvor du vil søge.
find ./test -name file22.txt
Leder efter specifikke filer i en anden mappe
I vores tilfælde vil vi lede efter alle dem, der starter med bogstavfilen i testmappen.
find ./test -name file*
Produktion
./test/file22.txt ./test/file30.doc ./test/file1.txt ./test/file5,doc
Søg efter filer efter filtypenavn
For at finde en fil i Linux med en bestemt udvidelse skal du tilføje den til kommandoen.
find . -name *.txt
Produktion
./test/subtest/subfil.txt ./test/file22.txt ./test/file1.txt ./home1/files32.txt ./home2/file22.txt ./qa/tags.txt
Find filer og mapper efter navn
Brug kommandoen nedenfor til at søge efter filer og mapper, der starter med bogstaverne qa. På vores computer har vi filerne qatree.txt og qa.txt samt en mappe med navnet qa.
Hvis vi kører kommandoen;
find ./ -name "qa*"
Det returnerer følgende output
./test/qatree.pdf ./test/qa.txt ./home/qa
Kommandoen returnerer både filer og mapper, der matcher søgekriterierne. For kun at finde filer eller mapper, skal du angive dette i kommandoen.
Find kun filer eller mapper
Brug kun type f-kontakten til filer.
Kun filer
find ./ -type f -name "qa*"
Produktion
./test/qatree.pdf ./test/qa.txt
Kun mapper
Tilføj indstillingen type d for kun at finde mapper.
find ./ -type d -name "qa*"
Produktion
./home/qa
Find-kommando, der ikke skiller mellem store og små bogstaver
Alle søgninger med -name switch skelner mellem store og små bogstaver og vil ikke give resultater med store bogstaver. Brug indstillingen -iname for at få alle sager.
find ./ -iname "qa*"
Produktion
./test/qatree.pdf ./test/qa.txt ./test/QAtest.txt ./home/qa
Søg efter en fil fra flere mapper
For at finde filerne i forskellige mapper skal du tilføje deres stier i kommandoen. I vores tilfælde tjekker vi test- og numeriske mapper ind.
find ./test ./numeric -name file22.txt -type f
Produktion
./test/file22.txt /root/numeric/file22.txt
Find flere filer med forskellige udvidelser fra alle mapper
Du kan bruge kommandoen find til at finde flere filer, der deler de forskellige udvidelser såsom *.doc, *.txt *.pdf osv. Dette kan gøres separat, én udvidelse ad gangen eller kun ved at bruge én kommando, der inkluderer alle de ønskede udvidelser.
finde . -type f ( -navn “*.txt” -o -navn “*.pdf” -o -navn “*.doc”)
produktion
./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
Find filer, der indeholder bestemt tekst
Nogle gange vil du have adgang til en fil, der indeholder bestemt tekst, men du kan ikke huske dens filnavn eller placering. Denne kommando giver dig mulighed for at finde alle de filer, der indeholder din måltekst.
For at lede efter alle filerne, der indeholder ordet hyperkonvergens”, brug;
find / -type f -exec grep -l -i "hyperconvergence" {} ;
Produktion
/root/numeric/hci /root/HCIP
Indstillingen –i gør det muligt for kommandoen at ignorere tilfælde og vil finde teksten, uanset om den er skrevet med stort eller ej, dvs. hyperkonvergens, hyperkonvergens osv.
For at søge efter filerne i en bestemt mappe skal du blot tilføje dem til kommandoen
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;
Produktion
./numeric/hci
Udforsk flere eksempler på grep-kommandoer.
Find filer og mapper baseret på størrelse
Du kan finde alle filer eller mapper, der er mindre, lig med eller større end en bestemt størrelse, inden for et bestemt område eller tomme. Brug det passende størrelsesformat afhængigt af typen af filer eller mapper, du søger efter.
Størrelsesmuligheder inkluderer;
c – bytes
k – kilobytes
M – Megabytes
G – Gigabyte
Find filer af en vis størrelse – svarende til 30 MB
Find alle 30MB filer for at søge
find / -size 30M
Find filer, der er større end en specificeret størrelse
find -size +2M
Produktion
. /Downloads/ubuntu18043.iso ./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Find filer på mindre end 10 MB i den aktuelle mappe
find . -type f -size -10M
Find filer med størrelser mellem 100-200 MB
Når du leder efter filer inden for et specifikt område, såsom mellem 100 og 200 MB
find / -size +100M -size -200M
Se efter mapper større end 20 kb
find / -type d -størrelse +20k
Find tomme filer og mapper.
Filer
find ./ -type f -størrelse 0
eller
find ./ -type f –empty
Vejviser
find ./ -type d –empty
Find filer efter alder eller ændringstid
Find filer, der er ældre end n dage
find /path/ -type f -name '*.txt' -mtime +8
-mtime +8 vil lede efter txt-filer, der er ældre end 8 dage.
Efter ændringsdato
Dette vil se efter filer, der er ændret inden for de sidste 17 timer
find . -mtime -17 -type f
Søger efter mapper, der er ændret inden for de sidste 10 dage
find . -mtime -10 -type d
Find filer baseret på adgang eller ændring
Find filer baseret på dato eller klokkeslæt. Dette giver dig mulighed for at se filer, der har eller ikke er blevet tilgået inden for en bestemt periode.
For at se filer, der ikke er blevet tilgået inden for de sidste 10 dage i hjemmemappen.
find /home -atime +10
Filer tilgået for præcis 10 dage siden
find /home -atime 10
Tilgået inden for de seneste 10 dage
find /home -atime -10
Find filer, der er ændret inden for de sidste n dage
Du kan også se efter filerne i /home-mappen, der er ændret inden for de sidste 10 dage ved at bruge kommandoen;
find /home -mtime -10
Find filer, der er ændret inden for en bestemt periode.
For eksempel alle filer, der er ændret for mellem 6 og 15 dage siden i hjemmemappen.
find /home -type f -mtime +6 -mtime -15
Filer og mapper, der er tilgået inden for de sidste 10 minutter
For at finde de filer, der er tilgået inden for de sidste 10 minutter, skal du bruge -amin-indstillingen.
find . -amin -10 -type f
Produktion
./.bash_history ./[email protected]:~#
Mapper, der er tilgået inden for de sidste 10 minutter
find . -amin -10 -type d
Find filer, der matcher specifikke tilladelser
Syntaks
$ find -perm mode
Hvor tilstand er tilladelsen, som enten er numerisk såsom 644, 655, 700, 777 osv., eller bogstaver som u=x, a=r+x osv.
Du kan angive tilstanden på følgende tre forskellige måder.
Find filer med tilladelse 777
find -perm 777
Produktion
./file1
Find filer med mindst 766
find -perm -766
Produktion
./file2 ./file1
Kommandoen leder efter alle filer, hvori
- Filejeren har læse-/skrive-/udførelsestilladelser.
- Gruppen har læse-/skrivetilladelser
- Andre har læse-/skrivetilladelse
Som sådan returnerer den to filer, der opfylder dette kriterium – fil1 og fil2. Filerne behøver ikke at have de nøjagtige 766-tilladelser og kan have yderligere tilladelser så længe, men skal mindst have de specificerede.
Find filer, der kan skrives af ejeren
Vi vil nu bruge “/” til at søge efter filer, der kan skrives af enten deres ejer, gruppe eller andre.
find -perm /222 . ./file2 ./file3 ./file1
Ovenstående leder efter filer, der kan skrives af enten deres ejer eller gruppe.
Dette returnerer filer, der kan skrives af begge, men ikke nødvendigvis begge. For at se filer, hvor begge har skrivbare tilladelser, skal du bruge præfikset –.
find -perm -220
Produktion
./file2 ./file1
Find filer, der ejes af en bruger
Find alle filer, der ejes af Jack
find /home -user jack
Produktion
/home/jack /home/jack/examples.desktop /home/jack/.gnupg /home/jack/.gnupg/private-keys-v1.d /home/jack/ans.cgi
Find specifikke filer, der ejes af en bruger
Find alle tekstfiler, der ejes af Jack
find /home -user jack -iname "*.txt"
Produktion
/home/jack/docs/file32.txt
Find og liste filer og mapper sammen med deres tilladelser
find -name "*.conf" | ls -l
Produktion
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
Find og reager på resultaterne
I dette afsnit vil vi se på, hvordan du kan handle på de filer, der matcher det mønster, der er angivet i find-kommandoen.
Find filer og skift tilladelser
Find og rediger tilladelser for bestemte filtyper. I vores tilfælde vil vi arbejde med PHP-filer med forskellige tilladelser 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 nu lede efter alle PHP-filerne (ovenfor) og erstatte deres tilladelser med 755
find ver -name "*.php" -type f -exec chmod 755 {} ;
Kommandoen leder efter PHP-filer i ver-mappen og sætter derefter deres tilladelse 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
Find og skift fil- og mappetilladelser
Find filer med 644 tilladelser, og skift dem til at have 655 tilladelser
find . -type f -perm 644 -exec chmod 655 {} ;
Du kan også kigge efter mapper med 644 tilladelser og erstatte dette med 755.
find . -type d -perm 644
Produktion
./docs
Dokumentmappen har 644 tilladelser
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
For at sætte den til 755 kører vi
find . -type d -perm 644 -exec chmod 755 {} ;
Nu kan vi tjekke igen for at se, hvad der præcist er 755
find . -type d -perm 755
Produktion
.
./docs
Fra oven kan vi se root- og docs-mapperne har de 755 tilladelser.
Ls –la kommando giver følgende detaljer
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Find og kopier filer eller mapper
Find og kopier en bestemt fil til en mappe
Kommandoen nedenfor finder filen file22.txt og kopierer den til mappen ~/tmp/images.
find -iname file22.txt -exec cp {} ~/tmp/images ;
Find og kopier én type filer til en mappe
For at finde filer såsom billeder med filtypenavnet jpg i den aktuelle mappe og kopiere dem til en anden placering som en billedmappe, skal du bruge
find -iname '*.jpg' -exec cp {} ~/tmp/images ;
Dette vil finde og kopiere alle jpg-filerne til mappen ~/tmp/images.
Find og kopier en fil til mange mapper
Find og kopier en enkelt til flere mapper.
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Dette vil finde filen hci filen og kopiere den til de tre mapper /tmp/dir1/ /tmp/dir2/ og $HOME/3/
Find og flyt filer til en anden mappe
At flytte en kendt fil fra en mappe til en anden. For at flytte filen universal.php;
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Søg og flyt filer med en bestemt udvidelse til en anden mappe
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Find bestemte filer og flyt til en bestemt anden mappe
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
Kommandoen leder efter alle filer med navne, der starter med uni og har en hvilken som helst filtypenavn. Det flytter dem derefter til mappen /unifiles/
Find og flyt filer baseret på alder
Find og flyt filer, der er ældre end de angivne dage til en anden placering, såsom arkivet.
find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;
Dette vil lede efter pdf-filer, der er ældre end 20 dage og flytte dem til backup1-mappen.
Find og slet filer og mapper
Syntaksen for at finde og fjerne filer eller mapper i den aktuelle mappe er
finde . -type f -navn “fil der skal slettes” -exec rm -f {} ; kun at slette filer eller
finde . -type d -navn “dir-to-delete” -exec rm -rf {} ; kun at slette mapper
Find og slet kun bestemte filer
For at finde og slette filer, der starter med til, skal du bruge;
find . -type f -name "til*" -exec rm {} ;
For at finde og slette mapper, der starter med til
find . -type d -name "til*" -exec rm {} ;
Fjern både filer og mapper
find . -name "til*" -exec rm -rf {} ;
Dette vil fjerne både filer og mapper, der starter med bogstaverne til.
Slet i forlængelse
Nedenfor kan du se, hvordan du kan finde og slette alle txt-filer i den aktuelle mappe. Erstat txt’en med en anden udvidelse såsom bak, pdf eller enhver anden, som du vil fjerne.
find . -type f -name "*.txt" -exec rm -f {} ;
Hvis du ønsker, at systemet skal bede dig om at bekræfte, før du sletter hver fil, skal du tilføje -i-indstillingen som nedenfor.
find . -type f -name "*.txt" -exec rm -i {} ;
Produktion
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 mapperne, og du skal bruge -r-indstillingen for at sikre en rekursiv fjernelse. Dette sikrer sletning af tomme mapper og dem, der indeholder filer. Indstillingen -f tvinger fjernelse og bruges til både filer og mapper.
Find og slet filer, der er ældre end n dage
Find og slet backupfiler, der er ældre end 20 dage fra den aktuelle mappe.
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Dette vil slette alle .bak-filer, der er ældre end 20 dage.
Find og slet kun mapper
For at slette en mappe kaldet dir22
find . -type d -name dir22 -exec rm -rf {} ;
Sørg for, at du matcher mappenavnets store og små bogstaver, eller brug muligheden -iname.
find . -type d -iname Dir22 -exec rm -rf {} ;
Fjerner både Dir22 og dir22
For at bekræfte før sletning, brug -i-indstillingen.
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Produktion
rm: fjerne mappen ‘./Dir22’? n
rm: fjerne mappen ‘./dir22’? y
I vores tilfælde skrev vi n for mappe Dir22, som ikke vil blive slettet og y for dir22, som nu vil blive fjernet.
Find og fjern tomme filer
Du kan bruge en af følgende kommandoer til at finde tomme filer og slette dem automatisk.
find ./ -type f -size 0 -exec rm -f {} ;
eller
find ./ -type f -størrelse 0 | xargs rm -f
eller
find ./ -type f -størrelse 0 -slet
Find og fjern tomme mapper
For at fjerne tomme mapper vil vi bruge d-indstillingen.
find ./ -type d -empty -exec rmdir {} ;
Et andet alternativ er at bruge slet i stedet for fjern.
find ./ -type d -empty -delete
Bemærk venligst, at sletning af systemfiler eller kritiske filer fra din computer kan beskadige operativsystemet eller programmerne eller føre til tab af dine vigtige data.
For at undgå utilsigtede sletninger er det bedste praksis at bruge en ikke-rodbrugerkonto. Sørg også for, at du sletter de rigtige filer, der ikke er nyttige, og at du har en sikkerhedskopi af alle dine datafiler for en sikkerheds skyld.
Hvad er det næste?
Gå videre og prøv ovenstående Linux-find-kommandoer i dit laboratorium eller IKKE-PRODUKTION-miljø. Se om du kan bruge nogle til at automatisere filsystemoprydningen med Crontab. Og for at mestre Linux, tjek dette online kursus.