find
command je jedním z nejmocnějších nástrojů v arzenálu správců systému Linux. Vyhledává soubory a adresáře v hierarchii adresářů na základě uživatelem zadaného výrazu a může provádět uživatelem specifikované akce s každým odpovídajícím souborem.
Můžete použít find
k vyhledání souborů a adresářů na základě jejich oprávnění, typu, data, vlastnictví, velikosti a dalších. Lze jej také kombinovat s dalšími nástroji, jako je grep
nebo sed
.
find
Syntaxe příkazu #
Obecná syntaxe pro find
příkaz je následující:
find [options] [path...] [expression]
options
atribut řídí zacházení se symbolickými odkazy, možnosti ladění a metodu optimalizace.path...
atribut definuje počáteční adresář nebo adresáře, kde bude find hledat soubory.expression
atribut se skládá z možností, vyhledávacích vzorů a akcí oddělených operátory.
Chcete-li vyhledat soubory v adresáři, uživatel vyvolá find
příkaz musí mít oprávnění ke čtení v tomto adresáři.
Podívejme se na následující příklad:
find -L /var/www -name "*.js"
- Volba
-L
(options) říkáfind
příkaz k následování symbolických odkazů. /var/www
(cesta…) určuje adresář, který bude prohledán.- (výraz)
-name "*.js
říkáfind
pro vyhledávání souborů končících na.js
(JavaScriptové soubory).
Najít soubory podle názvu #
Hledání souborů podle názvu je pravděpodobně nejběžnější použití find
příkaz. Chcete-li najít soubor podle názvu, použijte -name
možnost následovaná názvem souboru, který hledáte.
Chcete-li například vyhledat soubor s názvem document.pdf
v /home/linuxize
adresář, použijete následující příkaz:
find /home/linuxize -type f -iname document.pdf
Chcete-li spustit vyhledávání bez rozlišení velkých a malých písmen, změňte -name
možnost s -iname
:
find /home/linuxize -type f -iname document.pdf
Výše uvedený příkaz bude odpovídat „Document.pdf“, „DOCUMENT.pdf“ ..atd.
Najít soubory podle přípony #
Vyhledávání souborů podle přípony je stejné jako vyhledávání souborů podle názvu. Chcete-li například najít všechny soubory končící na .log.gz
uvnitř /var/log/nginx
adresář, zadejte:
find /var/log/nginx -type f -name '*.log.gz'
Je důležité zmínit, že musíte buď citovat vzor, nebo ukončit hvězdičku *
symbol se zpětným lomítkem \
aby to nebylo interpretováno shellem, když použijete zástupný znak.
Chcete-li najít všechny soubory, které neodpovídají regulárnímu výrazu *.log.gz
můžete použít -not
volba. Chcete-li například najít všechny soubory, které nekončí na *.log.gz
byste použili:
find /var/log/nginx -type f -not -name '*.log.gz'
Najít soubory podle typu #
Někdy možná budete muset hledat konkrétní typy souborů, jako jsou běžné soubory, adresáře nebo symbolické odkazy. V Linuxu je vše soubor.
Chcete-li vyhledávat soubory podle jejich typu, použijte -type
volba a jeden z následujících deskriptorů k určení typu souboru:
f
:běžný soubord
:adresářl
:symbolický odkazc
:znaková zařízeníb
:blokovat zařízeníp
:pojmenovaná roura (FIFO)s
:zásuvka
Například pro nalezení všech adresářů v aktuálním pracovním adresáři byste použili:
find . -type d
Běžným příkladem je rekurzivní změna oprávnění souboru webu na 644
a oprávnění k adresáři 755
pomocí chmod
příkaz:
find /var/www/my_website -type d -exec chmod 0755 {} \;
find /var/www/my_website -type f -exec chmod 0644 {} \;
Najít soubory podle velikosti #
Chcete-li najít soubory podle velikosti souboru, předejte -size
parametr spolu s kritérii velikosti. K určení velikosti souboru můžete použít následující přípony:
b
:512bajtové bloky (výchozí)c
:bajtůw
:dvoubajtová slovak
:kilobajtyM
:MegabajtyG
:Gigabajty
Následující příkaz najde všechny soubory přesně 1024
bajtů uvnitř /tmp
adresář:
find /tmp -type f -size 1024c
find
příkaz také umožňuje vyhledávat soubory, které jsou větší nebo menší než zadaná velikost.
V následujícím příkladu hledáme všechny soubory menší než 1MB
uvnitř aktuálního pracovního adresáře. Všimněte si mínus -
symbol před hodnotou velikosti:
find . -type f -size -1M
Pokud chcete hledat soubory o velikosti větší než 1MB
, pak musíte použít plus +
symbol:
find . -type f -size +1M
Můžete dokonce vyhledávat soubory v rozsahu velikostí. Následující příkaz najde všechny soubory mezi 1
a 2MB
:
find . -type f -size +1M -size 21M
Najít soubory podle data úpravy #
find
příkaz může také vyhledávat soubory na základě jejich poslední úpravy, přístupu nebo času změny.
Stejně jako při vyhledávání podle velikosti použijte pro „větší než“ nebo „menší než“ symboly plus a mínus.
Řekněme, že jste před několika dny upravili jeden z konfiguračních souborů dovecot, ale zapomněli jste který. Všechny soubory můžete snadno filtrovat pod /etc/dovecot/conf.d
adresář, který končí .conf
a byl změněn za posledních pět dní:
find /etc/dovecot/conf.d -name "*.conf" -mtime 5
Zde je další příklad filtrování souborů na základě data modifikace pomocí -daystart
volba. Níže uvedený příkaz zobrazí seznam všech souborů v /home
adresář, který byl upraven 30
nebo před více dny:
find /home -mtime +30 -daystart
Najít soubory podle oprávnění #
-perm
umožňuje vyhledávat soubory na základě oprávnění k souboru.
Chcete-li například najít všechny soubory s oprávněními přesně 775
uvnitř /var/www/html
adresář, byste použili:
find /var/www/html -perm 644
Číselný režim můžete předponovat mínus -
nebo lomítko /
.
Když lomítko /
se používá jako předpona, pak alespoň jedna kategorie (uživatel, skupina nebo další) musí mít nastavené alespoň příslušné bity, aby se soubor shodoval.
Zvažte následující příklad příkazu:
find . -perm /444
Výše uvedený příkaz porovná všechny soubory s oprávněními ke čtení nastavenými pro uživatele, skupinu nebo ostatní.
Pokud je mínus -
je použit jako prefix, pak aby se soubor shodoval, musí být nastaveny alespoň zadané bity. Následující příkaz vyhledá soubory, které mají oprávnění ke čtení a zápisu pro vlastníka a skupinu a jsou čitelné pro ostatní uživatele:
find . -perm -664
Najít soubory podle vlastníka #
Chcete-li najít soubory vlastněné konkrétním uživatelem nebo skupinou, použijte -user
a -group
možnosti.
Chcete-li například vyhledat všechny soubory a adresáře vlastněné uživatelem linuxize
, spustíte:
find / -user linuxize
Zde je příklad ze skutečného světa. Řekněme, že chcete najít všechny soubory vlastněné uživatelem www-data
a změnit vlastnictví odpovídajících souborů z www-data
na nginx
:
find / -user www-data -type f -exec chown nginx {} \;
Najít a smazat soubory #
Chcete-li odstranit všechny odpovídající soubory, připojte -delete
možnost na konec výrazu shody.
Ujistěte se, že tuto možnost používáte pouze v případě, že jste si jisti, že výsledek odpovídá souborům, které chcete odstranit. Vždy je dobré vytisknout odpovídající soubory před použitím -delete
možnost.
Chcete-li například odstranit všechny soubory končící na .temp
z /var/log/
, použili byste:
find /var/log/ -name `*.temp` -delete
Použijte -delete
možnost s extrémní opatrností. find
příkaz je vyhodnocen jako výraz a pokud přidáte -delete
Pokud zvolíte možnost první, příkaz odstraní vše pod vámi zadanými počátečními body.
Pokud jde o adresáře, find
může smazat pouze prázdné adresáře, stejně jako rmdir
.
Závěr č.
Ukázali jsme vám, jak používat find
příkaz s různými možnostmi a kritérii.
Tento článek by vám měl poskytnout základní informace o tom, jak najít soubory ve vašich systémech Linux. Můžete také navštívit find
manuálovou stránku a přečtěte si o všech dalších výkonných možnostech find
příkaz.
Pokud máte nějaké dotazy nebo připomínky, zanechte prosím níže komentář.