Het Linux find
commando is een krachtig hulpmiddel waarmee systeembeheerders bestanden en mappen kunnen vinden en beheren op basis van een groot aantal zoekcriteria. Het kan mappen en bestanden vinden op naam, type of extensie, grootte, rechten, enz
Naast het lokaliseren van bestanden en mappen, kunt u door het commando find
met andere commando’s te combineren actie ondernemen op de resultaten. Door de optie -exec
toe te voegen, kunnen sysadmins externe commando’s uitvoeren en acties uitvoeren zoals kopiëren, verplaatsen, verwijderen of machtigingen wijzigen van bestanden die aan de opgegeven criteria voldoen, zoals grootte, naam, enz
In dit artikel zullen we beginnen met het uitleggen van de basis Linux find commando’s met voorbeelden. Dit zal u laten zien hoe u bestanden en mappen kunt vinden. Daarna laten we zien hoe u de -exec
optie kunt gebruiken om op de bestanden of mappen te reageren op basis van hun grootte, rechten, enz
De algemene syntaxis voor de opdracht find is
find {pad} {naam -of-bestand of map-om-te-zoeken} {actie te ondernemen}
Waar,
pad
de map specificeert.naam van bestand of te zoeken directory
: naam van het bestand of de directory waarnaar gezocht moet wordente ondernemen actie
: zoals kopiëren, verwijderen, verplaatsen, enz.
In deze zelfstudiegids zullen we uitleggen hoe u bestanden en mappen kunt vinden die overeenkomen met gespecificeerde patronen. We zullen ook zien hoe u acties kunt uitvoeren op de bestanden of mappen die het find commando lokaliseert. De handleiding is gebaseerd op Ubuntu, maar is toepasbaar op de meeste Linux distributies en versies
Bestanden en mappen zoeken
Specifieke bestanden zoeken op naam of extensie
Om een specifiek bestand te zoeken, voert u de volgende opdracht uit vanaf de root (/). De opdracht bevat de exacte naam voor het bestand dat u zoekt
find .
–
naam bestand22.txt
Uitvoer
./test/bestand22.txt
./sales/bestand22.txt
Merk op dat de resultaten het pad bevatten. Dit is belangrijk als u niet weet in welke map het bestand zich bevindt, of als het bestand zich op meer dan één plaats bevindt
U kunt ook naar het bestand in een andere map zoeken terwijl het nog steeds op de huidige locatie staat. In dit geval moet u het pad opgeven voor de map waar u wilt zoeken
find ./test -naam bestand22.txt
Specifieke bestanden zoeken in een andere map
In ons geval zoeken we naar alle bestanden die beginnen met de letters file in de map test
find ./test -naam bestand*
Uitvoer
./test/file22.txt
./test/file30.doc
./test/file1.txt
./test/file5,doc
Zoeken naar bestanden op extensie
Om in Linux een bestand met een bepaalde extensie te vinden, voegt u deze toe aan het commando
find .
–
naam *.txt
Uitvoer
./test/subtest/subfil.txt
./test/file22.txt
./test/file1.txt
./home1/files32.txt
./home2/file22.txt
./qa/tags.txt
Bestanden en mappen op naam zoeken
Gebruik de onderstaande opdracht om bestanden en mappen te zoeken die beginnen met de letters qa
. In onze computer hebben we de bestanden qatree.txt
en qa.txt
en een map met de naam qa
Als we het commando uitvoeren
find ./ -name "qa*"
uitvoeren
Het geeft de volgende uitvoer
./test/qatree.pdf
./test/qa.txt
./home/qa
De opdracht retourneert zowel de bestanden als de mappen die aan de zoekcriteria voldoen. Als u alleen bestanden of mappen wilt vinden, moet u dit in de opdracht opgeven
Alleen bestanden of mappen zoeken
Gebruik voor alleen bestanden de schakeloptie type f
Alleen bestanden
find ./ -type f -name "qa*"
Uitvoer
./test/qatree.pdf
./test/qa.txt
Alleen mappen
Voeg de optie d
toe om alleen mappen te zoeken
find ./ -type d -naam "qa*"
Uitvoer
./home/qa
Hoofdlettergevoelige opdracht find
Alle zoekopdrachten met de schakeloptie -name
zijn hoofdlettergevoelig en geven geen resultaten met hoofdletters. Gebruik de optie -iname
om alle hoofdletters te krijgen
find ./ -iname "qa*"
Uitvoer
./test/qatree.pdf
./test/qa.txt
./test/QAtest.txt
./home/qa
Een bestand in meerdere mappen zoeken
Om bestanden in verschillende mappen te vinden, voegt u hun paden in het commando toe. In ons geval zoeken we in de mappen Test
en Numeric
find ./test ./numeric -name file22.txt -type f
Uitvoer
./test/bestand22.txt
/root/numeriek/bestand22
.txt
Meerdere bestanden met verschillende extensies uit alle mappen vinden
U kunt de opdracht find gebruiken om meerdere bestanden met verschillende extensies te vinden, zoals *.doc
, *.txt
*.pdf
, enz. Dit kan afzonderlijk worden gedaan, één extensie per keer, of met slechts één opdracht die alle gewenste extensies bevat
find .
–type f ( -naam "*.txt" -o -naam "*.pdf" -o -naam "*.doc" )
uitvoer
./test/subtest/subfil.txt
./test/qatree.pdf
./test/file22.txt
./test/qa.txt
./test/file30.doc
./bookss/acro.pdf
./data1/FILE22.txt
./docs/files32.txt
Zoek bestanden die bepaalde tekst bevatten
Soms wilt u een bestand openen dat bepaalde tekst bevat, maar kunt u zich de bestandsnaam of locatie ervan niet herinneren. Met deze opdracht kunt u alle bestanden vinden die uw doeltekst bevatten
Om alle bestanden te zoeken die het woord hyperconvergence” bevatten, gebruikt u
find / -type f -exec grep -l -i "hyperconvergence" {}
Uitvoer
/root/numeriek/hci
/root/HCIP
De -i
optie zorgt ervoor dat het commando hoofdletters negeert en de tekst vindt, ongeacht of het een hoofdletter is of niet, bijv. hyperconvergence, Hyperconvergence , enz
Om de bestanden in een specifieke map te zoeken, voegt u ze gewoon toe aan de opdracht
find ./numeric -type f -exec grep -l -i "hyperconvergence" {}
Uitvoer
./numeric/hci
Bekijk meer grep-opdrachtvoorbeelden
Bestanden en mappen zoeken op basis van grootte
U kunt alle bestanden of mappen vinden die kleiner, gelijk of groter zijn dan een bepaalde grootte, binnen een bepaald bereik of leeg zijn. Gebruik de juiste grootte-indeling afhankelijk van het type bestanden of mappen waarnaar u zoekt
Opties voor de grootte zijn onder andere
c
– bytes
k
– kilobytes
M
– megabytes
G
– Gigabytes
Zoek bestanden van een bepaalde grootte – gelijk aan 30MB
Om alle 30MB bestanden te zoeken
zoeken / -grootte 30M
Bestanden groter dan een opgegeven grootte zoeken
find -grootte 2M
Uitvoer
.
/Downloads/ubuntu18043.iso
./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Zoek bestanden kleiner dan 10MB in de huidige map
find .
–
type f -grootte -10M
Zoek bestanden met een grootte tussen 100-200MB
Bij het zoeken naar bestanden binnen een specifiek bereik, zoals tussen 100 en 200 MB
find / -grootte 100M -grootte -200M
Zoeken naar mappen groter dan 20kb
find / -type d -grootte 20k
Lege bestanden en mappen zoeken.
Bestanden
find ./ -type f -grootte 0
of
find ./ -type f -leeg
Directories
find ./ -type d -leeg
Bestanden zoeken op leeftijd of wijzigingstijd
Zoek bestanden ouder dan n dagen
find /path/ -type f -name '*.txt' -mtime 8
De -mtime 8
zoekt naar txt-bestanden
die ouder zijn dan 8 dagen
Op wijzigingsdatum
Hiermee worden bestanden gezocht die de afgelopen 17 uur zijn gewijzigd
find .
–
mtime -17 -type f
Zoekt naar mappen die de afgelopen 10 dagen zijn gewijzigd
find .
–
mtime -10 -type d
Zoek bestanden op basis van toegang of wijziging
Zoek bestanden op basis van de datum of tijd waarop ze geopend zijn. Zo kunt u bestanden zien die binnen een bepaalde periode wel of niet zijn geopend
Om bestanden te zien die de afgelopen 10 dagen niet zijn geopend in de homedirectory
find /home -atime 10
Bestanden die precies 10 dagen geleden zijn geopend
find /home -atime 10
Bestanden die in de afgelopen 10 dagen zijn geopend
find /home -atime -10
Zoek bestanden die de laatste n dagen gewijzigd zijn
U kunt ook de bestanden in de map /home
zoeken die de afgelopen 10 dagen zijn gewijzigd met de opdracht
find /home -mtime -10
Zoek bestanden die binnen een bepaalde periode gewijzigd zijn.
Bijvoorbeeld, alle bestanden die tussen 6 en 15 dagen geleden gewijzigd zijn in de home directory
find /home -type f -mtime 6 -mtime -15
Bestanden en mappen die de afgelopen 10 minuten zijn geopend
Gebruik de optie -amin om de bestanden te vinden die de afgelopen 10 minuten zijn geopend
find .
–
amin -10 -type f
Uitvoer
./.bash_history
./.profileroot@ubuntu1804:~#
Mappen die de afgelopen 10 minutenzijn geopend
find .
–
amin -10 -type d
Zoek bestanden met specifieke permissies
Syntax
$ find -perm modus
Waarbij modus de toestemming is die ofwel numeriek is zoals 644, 655, 700, 777
, enz., of letters zoals u=x, a=r x,
enz
U kunt de modus op de volgende drie verschillende manieren opgeven
- Zonder voorvoegsel als u bestanden wilt vinden met de exact opgegeven permissies.
- Met “
-
” voor bestanden met ten minste de opgegeven rechten. Dit retourneert bestanden met zowel de opgegeven als extra hogere rechten. - Als u “
/
” gebruikt, moet u de eigenaar of groep met de rechten op het bestand opgeven.
Zoek bestanden met permissie 777
find -perm 777
Uitvoer
./bestand1
Zoek bestanden met minimaal 766
find -perm -766
Uitvoer
./file2
./file1
De opdracht zoekt alle bestanden waarin de
- De bestandseigenaar heeft lees-/schrijf-/uitvoerrechten.
- Groep heeft lees/schrijfrechten
- Anderen hebben lees/schrijfrechten
Het geeft dus twee bestanden die aan dit criterium voldoen – bestand1 en bestand2. De bestanden hoeven niet de exacte 766
rechten te hebben en kunnen aanvullende rechten hebben, maar moeten ten minste de opgegeven rechten hebben
Bestanden vinden die schrijfbaar zijn door de eigenaar
We zullen nu de “/
” gebruiken om bestanden te zoeken die schrijfbaar zijn door hun eigenaar, of groep, of anderen
find -perm /222
.
./file2
./file3
./file1
Het bovenstaande zoekt naar bestanden die beschrijfbaar zijn door hun eigenaar of groep
Dit levert bestanden op die schrijfbaar zijn door één van beide, maar niet noodzakelijk door allebei. Om bestanden te zien die beide schrijfrechten hebben, gebruikt u het voorvoegsel –
find -perm -220
Uitvoer
./file2
./file1
Zoek bestanden die eigendom zijn van een gebruiker
Zoek alle bestanden die eigendom zijn van Jack
zoek /home -gebruiker jack
Uitvoer
/home/jack
/home/jack/examples
.desktop
/home/jack/
.gnupg
/home/jack/
.gnupg/private-keys-v1.d
/home/jack/ans
.cgi
Zoek specifieke bestanden die eigendom zijn van een gebruiker
Zoek alle tekstbestanden die eigendom zijn van Jack
find /home -user jack -iname "*.txt"
Uitvoer
/home/jack/docs/file32.txt
Zoek en vermeld bestanden en mappen met hun rechten
find -name "*.conf"
|
ls -l
Uitvoer
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 0 jan 4 12:02 file22.doc
drwxr-xr-x 2 root root 4096 jan 4 12:14 bestand23
-rw-r–r–
1 root root 0 jan 4 12:23 bestand23.txt
Zoek en handel naar de resultaten
In dit gedeelte bekijken we hoe u kunt reageren op de bestanden die overeenkomen met het patroon dat is opgegeven in de opdracht find
Bestanden zoeken en machtigingen wijzigen
Zoek en wijzig de machtigingen van bepaalde bestandstypen. In ons geval zullen we werken met PHP-bestanden met verschillende permissies, zoals hieronder weergegeven
jack@ubuntu1804:~/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 0 jan 3 14:06 query.php
-rw-rw-r–
1 jack 0 jan 3 14:11 qust.php
-rwxr-xr-x
1 jack 0 jan 3 14:06 text.php
-rw-rw–
1 jack 0 jan 3 14:11 vary.php
We zullen nu alle PHP-bestanden (hierboven) zoeken en hun rechten vervangen door 755
find ver -name "*.php" -type f -exec chmod 755 {}
Het commando zoekt naar PHP-bestanden in de map ver
en stelt vervolgens hun rechten in op 755
(rwxr-xr-x
)
Resultaten
jack@ubuntu1804:~/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 0 jan 3 14:06 query.php
-rwxr-xr-x
1 jack 0 jan 3 14:11 qust.php
-rwxr-xr-x
1 jack 0 jan 3 14:06 text.php
-rwxr-xr-x
1 jack 0 jan 3 14:11 vary.php
Bestands- en mapmachtigingen zoeken en wijzigen
Zoek bestanden met 644 permissies en verander ze in 655 permissies
find .
–
type f -perm 644 -exec chmod 655 {}
U kunt ook zoeken naar mappen met 644 rechten en deze vervangen door 755
find .
–
type d -perm 644
Uitvoer
./docs
De map docs heeft 644 rechten
drwxrwxr-x 2 jack jack 4096 jan 3 12:45 docs
Om het in te stellen op 755
, voeren we het volgende uit
find .
–
type d -perm 644 -exec chmod 755 {}
Nu kunnen we opnieuw controleren om te zien wat precies 755
is
find .
–
type d -perm 755
Uitvoer
./docs
Uit het bovenstaande kunnen we zien dat de mappen root en docs 755 rechten hebben
De opdracht Ls -la
geeft de volgende details
drwxr-xr-x 2 jack jack 4096 jan 3 12:45 docs
Bestanden of mappen zoeken en kopiëren
Een specifiek bestand zoeken en naar een map kopiëren
De onderstaande opdracht vindt het bestand file22.txt
en kopieert het naar de map ~/tmp/images
find -iname file22.txt -exec cp {} ~/tmp/images
Eén type bestand zoeken en naar een map kopiëren
Om bestanden zoals afbeeldingen met de extensie jpg
in de huidige map te vinden en ze naar een andere locatie zoals een map afbeeldingen te kopiëren, gebruikt u
find -iname '*.jpg' -exec cp {} ~/tmp/images
Dit zal alle jpg-bestanden vinden en kopiëren naar de map ~/tmp/images
Eén bestand vinden en kopiëren naar meerdere mappen
Eén bestand vinden en kopiëren naar meerdere mappen
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {}
Dit zal het bestand hci vinden en het naar de drie mappen /tmp/dir1/ /tmp/dir2/
en $HOME/3/
kopiëren
Bestanden zoeken en verplaatsen naar een andere map
Om een bekend bestand van een map naar een andere map te verplaatsen. Om het bestand universal.php
te verplaatsen
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/
Zoek en verplaats bestanden met een bepaalde extensie naar een andere map
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/
Zoek bepaalde bestanden en verplaats ze naar een specifieke andere map
find -type f -name uni*.* -exec mv {} ~/unifiles/
De opdracht zoekt alle bestanden met namen die beginnen met uni
en een willekeurige extensie hebben. Vervolgens worden ze verplaatst naar de map /unifiles/
Bestanden zoeken en verplaatsen op basis van leeftijd
Zoek en verplaats bestanden die ouder zijn dan de opgegeven dagen naar een andere locatie, zoals het archief
find /path/ -type f -name '*.pdf' -mtime 20 -exec mv {} /backup1/
Dit zoekt naar pdf-bestanden die ouder zijn dan 20 dagen en verplaatst ze naar de backup1 directory
Bestanden en mappen zoeken en verwijderen
De syntaxis voor het zoeken en verwijderen van bestanden of mappen in de huidige map is
find .
–type f -naam "te verwijderen bestand" -exec rm -f {} ;
om alleen bestanden te verwijderen of
find .
–type d -name "dir-to-delete" -exec rm -rf {}
; om alleen mappen te verwijderen
Alleen specifieke bestanden zoeken en verwijderen
Om bestanden te vinden en te verwijderen die beginnen met til, gebruikt u
find .
–
type f -name "til*" -exec rm {}
Om mappen beginnend met til te vinden en te verwijderen
find .
–
type d -name "til*" -exec rm {}
Zowel bestanden als mappen verwijderen
find .
–
name "til*" -exec rm -rf {}
Dit verwijdert zowel bestanden als mappen die beginnen met de letters til
Verwijderen op extensie
Hieronder ziet u hoe u alle txt-bestanden
in de huidige map kunt vinden en verwijderen. Vervang de txt
door een andere extensie zoals bak
, pdf
of een andere die u wilt verwijderen
find .
–
type f -name "*.txt" -exec rm -f {}
Als u wilt dat het systeem u vraagt om bevestiging voordat u elk bestand verwijdert, voegt u de optie -i toe zoals hieronder
find .
-type
f -name "*.txt" -exec rm -i {}
Uitvoer
rm: regelmatig leeg bestand './File22.txt' verwijderen? y
rm
: regelmatig leeg bestand './file22.txt' verwijderen? y
rm
: regelmatig leeg bestand './file23.txt' verwijderen?
Standaard zal de -rm
de mappen niet verwijderen en moet u de -r
optie gebruiken om een recursieve verwijdering te verzekeren. Dit zorgt ervoor dat lege mappen en mappen die bestanden bevatten verwijderd worden. De optie -f
forceert de verwijdering en wordt gebruikt voor zowel bestanden als mappen
Bestanden ouder dan n dagen zoeken en verwijderen
Back-upbestanden ouder dan 20 dagen in de huidige map zoeken en verwijderen
find .
–
type f -name '*.bak' -mtime 20 -exec rm {}
Dit verwijdert alle .bak-bestanden die ouder zijn dan 20 dagen
Alleen mappen zoeken en verwijderen
Om een directory met de naam dir22
te verwijderen
find .
–
type d -name dir22 -exec rm -rf {}
Zorg ervoor dat u de hoofdletters van de mapnaam gebruikt of gebruik de optie -iname
find .
–
type d -iname dir22 -exec rm -rf {}
Verwijdert zowel Dir22
als dir22
Gebruik de optie -i om het verwijderen te bevestigen
find .
–
type d -iname Dir22 -exec rm -rf -i {}
Uitvoer
rm: directory ‘./Dir22’ verwijderen? n
rm: verwijder directory ‘./dir22’? y
In ons geval typten we n
voor de directory Dir22
die niet verwijderd zal worden en y
voor de dir22
die nu verwijderd zal worden
Lege bestanden zoeken en verwijderen
U kunt een van de volgende opdrachten gebruiken om lege bestanden te vinden en automatisch te verwijderen
find ./ -type f -size 0 -exec rm -f {}
of
find ./ -type f -size 0 | xargs rm -f
of
find ./ -type f -size 0 -delete
Lege mappen vinden en verwijderen
Om lege mappen te verwijderen gebruiken we de optie d
find ./ -type d -empty -exec rmdir {}
Een ander alternatief is om delete te gebruiken in plaats van remove
find ./ -type d -empty -delete
Houd er rekening mee dat het verwijderen van systeem- of kritieke bestanden van uw computer het besturingssysteem of toepassingen kan beschadigen of kan leiden tot verlies van uw belangrijke gegevens
Om te voorkomen dat bestanden per ongeluk verwijderd worden, kunt u het beste een gebruikersaccount gebruiken dat geen root is. Zorg er ook voor dat u de juiste bestanden verwijdert die niet nuttig zijn en dat u een back-up hebt van al uw gegevensbestanden, voor het geval dat
Wat is het volgende?
Probeer de bovenstaande Linux find-commando’s eens uit in uw lab- of NIET-PRODUKTIE-omgeving. Kijk of u sommige kunt gebruiken om het opschonen van het bestandssysteem te automatiseren met Crontab. En om Linux onder de knie te krijgen, kunt u deze online cursus volgen.