A find a Linux legfontosabb keresőparancsa: egy mappát és az összes almappáját (rekurzívan) végigjárja, és kilistázza azokat a fájlokat, amelyek megfelelnek a megadott feltételeknek, név, méret, módosítási idő, tulajdonos vagy jogosultság szerint. A talált fájlokkal rögtön műveletet is végezhetsz: törölheted, átjogosíthatod, vagy kereshetsz bennük.
A példákat 2026 novemberében AlmaLinux 10.2 rendszeren, a GNU findutils 4.10-es find parancsával futtattuk egy mintakönyvtáron (/var/www/pelda.hu, egy WordPress-szerű webhely mentésekkel, naplókkal és gyorsítótárral); az Ubuntu 26.04 ugyanezt a verziót használja. A parancsok egy KVM VPS-en és a cPanel tárhely Terminal felületén is működnek, ott a saját home könyvtáradban.
Az alapforma
find HOL FELTÉTELEK MŰVELET
find /var/www -name 'wp-config.php'
find . -type f -name '*.log'
HOL: a mappa, ahol a keresés indul (a.az aktuális könyvtár). Ha elhagyod, afindaz aktuális könyvtárban keres.FELTÉTELEK: például-name,-type,-size. Több feltétel között alapból ÉS kapcsolat van.MŰVELET: ha nem adsz meg, afindkiírja a talált útvonalakat (-print).
Keresés név szerint
find . -name 'index.php' # pontos név
find . -name '*.php' # minden .php fájl
find . -iname 'readme.txt' # kis- és nagybetűtől függetlenül
A -iname a teszten a README.TXT és a readme.txt fájlt is megtalálta, a -name csak a pontos egyezést.
A helyettesítő karaktereket (*, ?) mindig tedd idézőjelbe. Idézőjel nélkül a shell még a find indulása előtt behelyettesíti őket az aktuális könyvtár fájlneveivel. Ha ott egy .php fájl van, a find csak azt a nevet keresi; ha több, hibával leáll:
$ find . -name *.php
find: paths must precede expression: `index.php'
find: possible unquoted pattern after predicate `-name'?
A -name csak a fájl nevét vizsgálja, a mappák útvonalát nem. Útvonalrészre a -path keres: find . -path '*/uploads/*.php' a feltöltési mappákba került PHP-fájlokat adja, ami egy feltört WordPress-oldalon gyakori jel.
Több névre a -o (VAGY) kapcsolóval kereshetsz, zárójelek között:
find . \( -name '*.jpg' -o -name '*.JPG' -o -name '*.png' \)
Típus szerint: -type
find . -type f -name '*.html' # csak fájlok
find . -type d -name cache # csak mappák
find . -type l # szimbolikus linkek
find . -xtype l # törött szimbolikus linkek
A linkekről és a törött linkek kezeléséről a fájlok törléséről, átnevezéséről és a linkekről szóló cikk szól.
Üres fájlok és mappák:
find . -empty
find . -type d -empty
Méret szerint: -size
find . -type f -size +100M # 100 MB-nál nagyobb
find . -type f -size -10k # 10 kB-nál kisebb
find . -type f -size +1G # 1 GB-nál nagyobb
Mértékegységek: c (bájt), k (KiB), M (MiB), G (GiB). A + nagyobbat, a - kisebbet jelent, előjel nélkül pontos egyezést.
Csapda a kis értékeknél: a find a méretet felfelé kerekíti a megadott egységre. A -size -1k ezért csak a 0 bájtos fájlokat adja: a teszten egy 30 bájtos PHP-fájl „1k” méretűnek számított, és kimaradt. Pontos határhoz add meg bájtban: -size -1024c. A gigabájtos határ hasonló kerekítését az error_log fájlok kereséséről szóló cikk mutatja be.
A legnagyobb fájlok megkeresése
A nagy fájlok listája méretekkel, olvasható formában:
find . -type f -size +100M -exec ls -lh {} +
Az öt legnagyobb fájl, méret szerint rendezve:
find . -type f -printf '%s %p\n' | sort -nr | head -5 | numfmt --to=iec
A -printf a méretet (%s, bájtban) és az útvonalat (%p) írja ki, a sort -nr csökkenő sorrendbe rendezi, a numfmt --to=iec pedig olvasható mértékegységre váltja (350M).
Ha nem a fájlok, hanem a mappák mérete érdekel, a du a jobb eszköz: lásd a du parancs példáit.
Idő szerint: -mtime, -mmin, -newer
find . -type f -mtime +30 # 30 napnál régebben módosított
find . -type f -mtime -7 # az elmúlt 7 napban módosított
find . -type f -mmin -60 # az elmúlt 60 percben módosított
A -mtime 24 órás egységekben számol, és lefelé kerekít: a -mtime 1 a 24–48 órával ezelőtt módosított fájlokat jelenti, a -mtime +30 pedig a legalább 31 napja módosítottakat. A -daystart kapcsolóval a napokat éjféltől számolja (find . -daystart -mtime 0 a ma módosítottakat adja).
Egy fájlnál vagy egy dátumnál újabbak:
find . -newer referencia.txt
find . -type f -newermt '2026-11-01'
find . -type f ! -newermt '2026-11-01' # ennél régebbiek
A -mtime mellett van -atime (utolsó olvasás) és -ctime (utolsó állapotváltozás, például jogosultság-módosítás) is. Az -atime nem megbízható: a teszt mindkét rendszerén relatime beállítással volt csatolva a gyökér fájlrendszer, amely az olvasási időt csak ritkán frissíti.
Egy feltört webhelynél hasznos az elmúlt napokban módosított PHP-fájlok listája:
find /var/www -type f -name '*.php' -mtime -3
Tulajdonos és jogosultság szerint
find . -user root # a root tulajdonában lévő fájlok
find . ! -user www-data # nem a www-data tulajdonában
find . -group users
find . -nouser # törölt felhasználó fájljai
Jogosultság szerint:
find . -perm 777 # pontosan 777
find . -type f -perm -o+w # mindenki által írható fájlok
find . -type d -perm -0002 # mindenki által írható mappák
Az előjel nélküli -perm 644 a pontosan 644-es fájlokat adja, a -perm -644 azokat, amelyeken legalább ezek a jogok megvannak.
A leggyakoribb használat a jogosultságok rendbetétele, például egy webhelyen a mappák 755, a fájlok 644 jogot kapnak:
find public_html -type d -exec chmod 755 {} +
find public_html -type f -exec chmod 644 {} +
A jogosultságok jelentését a chmod és chown parancsot bemutató cikk magyarázza el.
Mélység: -maxdepth, -mindepth
find . -maxdepth 1 # csak az aktuális mappa, almappák nélkül
find . -maxdepth 2 -name '*.log'
find . -mindepth 2 -maxdepth 2 -type d
A -maxdepth és a -mindepth a keresés egészére vonatkozik, bárhol áll a sorban; az olvashatóság kedvéért a feltételek elejére szokás írni.
Mappák kizárása: -prune és -not -path
Egy mappa (például a gyorsítótár vagy a mentések) kizárásának két módja van:
# -prune: a find be sem lép a mappába
find . -path ./public_html/wp-content/cache -prune -o -type f -name '*.html' -print
# -not -path: belép, de kiszűri a találatokat
find . -type f -name '*.html' -not -path '*/cache/*'
A -prune gyorsabb, mert a kizárt mappát egyáltalán nem járja be; nagy gyorsítótárnál vagy egy node_modules mappánál ez sokat számít. A -print a végén kötelező: nélküle a find a kizárt mappa nevét is kiírja (a teszten a ./public_html/wp-content/cache sor is megjelent).
A -prune után a -path értéke ugyanúgy kezdődjön, mint a keresési hely (. esetén ./). Több mappát zárójelek között zárhatsz ki:
find . \( -path ./backup -o -path ./public_html/wp-content/cache \) -prune -o -type f -size +10M -print
Név szerint, bárhol a fában: find . -name cache -prune -o -name '*.html' -print.
Műveletek a talált fájlokkal
-exec: parancs futtatása
find . -name '*.php' -exec grep -l 'base64_decode' {} +
find . -name '*.log' -exec ls -lh {} \;
A {} helyére kerülnek a talált fájlok. A két lezárás különbsége:
{} +: a fájlokat csoportosan, egy (vagy kevés) parancshívásnak adja át:grep ... fajl1 fajl2 fajl3. Sok fájlnál ez sokkal gyorsabb.{} \;: minden fájlra külön elindítja a parancsot. Akkor kell, ha a parancs egyszerre csak egy fájlt fogad el, vagy a{}nem a sor végén áll (például-exec cp {} {}.bak \;, amely minden fájlról.bakvégű másolatot készít).
Az -ok ugyanúgy működik, mint az -exec ... \;, de minden fájl előtt rákérdez (< rm ... ./logs/access.log > ?).
Keresés a fájlok tartalmában: find és grep
A find a fájlokat válogatja ki, a grep a tartalmukban keres. A teszten így találtuk meg a mintakönyvtárba tett gyanús PHP-fájlt:
find . -name '*.php' -exec grep -l 'base64_decode' {} +
A -l csak a fájlneveket írja ki. Ha nincs szükség a find többi feltételére, a grep maga is tud rekurzívan, kiterjesztés szerint szűrve keresni: grep -rl --include='*.php' base64_decode .. A find akkor jobb, ha méret, dátum vagy tulajdonos szerint is szűrni kell, például csak az elmúlt három napban módosított PHP-fájlokban keresel. A grep további lehetőségeiről (például a találat előtti és utáni sorokról) külön cikk szól, a kártevők kereséséről pedig a ClamAV-ról és a Maldetről szóló cikk.
xargs és a -print0
A find kimenete az xargs paranccsal is továbbadható, de a szóközt tartalmazó fájlneveknél ez csak a -print0 és -0 párossal működik helyesen:
find . -name '*.log' -print0 | xargs -0 ls -l
A -print0 nélkül az xargs a szóköznél kettévágja a nevet:
$ find . -name '*.log' | xargs ls -l
ls: cannot access './public_html/szep': No such file or directory
ls: cannot access 'fajl.log': No such file or directory
A legtöbb esetben az -exec ... {} + egyszerűbb, és ugyanolyan gyors.
Törlés: -delete
# 1. Először csak listázd ki, mit törölne
find . -type f -name '*.html' -mtime +30 -print
# 2. Ha a lista jó, töröld
find . -type f -name '*.html' -mtime +30 -delete
A feltételek sorrendje számít. A find balról jobbra értékel, és a -delete is egy feltétel, amely mindenre igaz. A teszten a find ~/cc -delete -name 'c3.html' nem a c3.html fájlt törölte, hanem a teljes ~/cc mappát, mert a -delete a név vizsgálata előtt minden elemre lefutott. A -delete mindig a sor végére kerüljön.
A -delete és a -prune nem használható együtt: a -delete bekapcsolja a -depth módot, amelyben a -prune hatástalan, és a find a teszten figyelmeztetéssel leállt, semmit sem törölt. Ilyenkor a -not -path formát használd.
Üres mappák törlése (például egy gyorsítótár takarítása után): find . -type d -empty -delete. A törlés végleges, Linuxon nincs lomtár.
Rendszeres takarítás cronnal
A régi mentések vagy gyorsítótár-fájlok törlése jól ütemezhető. Ez a sor minden éjjel 3:30-kor törli a 14 napnál régebbi mentéseket:
30 3 * * * find /var/backups/pelda -type f -name '*.tar.gz' -mtime +14 -delete
A cron használatát a crontab szintaxisát bemutató cikk írja le.
Keresés az egész rendszerben
sudo find / -xdev -type f -size +100M 2>/dev/null
-xdev: nem lép át más fájlrendszerekre, így kimaradnak a/proc,/sysés a csatolt lemezek. A-xdevnélkül afind /a teszten a/proc/kcorevirtuális fájlt is 100 MB-nál nagyobbnak mutatta, és hibákat írt a futás közben eltűnő/procbejegyzésekre.2>/dev/null: elnyomja a hibaüzeneteket. Sima felhasználóként afind /sokPermission deniedsort ír ki (find: '/boot/grub2': Permission denied), amelyek között nehéz észrevenni a találatot.
Szimbolikus linkeket a find alapból nem követ; a -L kapcsolóval a linkelt mappákban is keres (a teszten a public_html alá linkelt mentési mappa nagy fájljai csak -L mellett jelentek meg).
Gyors névkeresés: locate és plocate
A locate nem járja be a lemezt, hanem egy előre elkészített adatbázisban keres, ezért nagyon gyors. Az AlmaLinux 10 és az Ubuntu 26.04 cloud image-én nem volt telepítve; a mai disztribúciókon a plocate csomag adja:
sudo dnf install plocate # AlmaLinux, Rocky Linux
sudo apt install plocate # Ubuntu, Debian
sudo updatedb # adatbázis frissítése
locate wp-config.php
locate -i readme.txt
Az adatbázist egy időzítő naponta frissíti (AlmaLinuxon a plocate-updatedb.timer), ezért a locate a legutóbbi frissítés óta létrehozott fájlokat nem találja: a teszten egy éppen létrehozott fájlra nem adott találatot. Méret, dátum vagy jogosultság szerint nem tud szűrni; ezekhez a find kell.
Összefoglalás
| Feladat | Parancs |
|---|---|
| Név szerint | find . -name '*.php' |
| Kis- és nagybetűtől függetlenül | find . -iname 'readme*' |
| Csak mappák | find . -type d -name cache |
| 100 MB-nál nagyobb fájlok | find . -type f -size +100M |
| Az öt legnagyobb fájl | find . -type f -printf '%s %p\n' | sort -nr | head -5 |
| 30 napnál régebbi fájlok | find . -type f -mtime +30 |
| Az elmúlt órában módosítottak | find . -mmin -60 |
| Mindenki által írható fájlok | find . -type f -perm -o+w |
| Mappa kizárása | find . -path ./cache -prune -o -name '*.html' -print |
| Szöveg keresése a fájlokban | find . -name '*.php' -exec grep -l 'szöveg' {} + |
| Törlés (a végén!) | find . -name '*.tmp' -mtime +7 -delete |
| Egész rendszer, hibák nélkül | sudo find / -xdev -name 'x' 2>/dev/null |
