Linuxový příkaz find je mocný nástroj, který umožňuje správcům systému vyhledávat a spravovat soubory a adresáře na základě široké škály vyhledávacích kritérií. Může najít adresáře a soubory podle jejich názvu, typu nebo přípony, velikosti, oprávnění atd.
Kromě vyhledání souborů a adresářů vám kombinace příkazu find s ostatními umožňuje provádět akce na základě výsledků. Přidání volby -exec umožňuje sysadminům spouštět externí příkazy a provádět akce, jako je kopírování, přesouvání, mazání nebo změna oprávnění souborů odpovídajících zadaným kritériím, jako je velikost, název atd.
V tomto článku začneme vysvětlením základních linuxových příkazů find s příklady. To vám ukáže, jak najít soubory a adresáře. Poté vám ukážeme, jak pomocí volby -exec jednat se soubory nebo adresáři na základě jejich velikosti, oprávnění atd.
Obecná syntaxe příkazu find je
find {path} {name -of-file or dir-to-search} {action-to-take}
Kde,
- cesta určuje adresář.
- name-of file or dir-to-search : Název souboru nebo adresáře, který se má hledat
- akce k provedení: jako je kopírování, mazání, přesun atd.
V tomto tutoriálu vysvětlíme, jak najít soubory a adresáře odpovídající zadaným vzorům. Také uvidíme, jak provádět akce se soubory nebo adresáři, které příkaz find najde. Příručka je založena na Ubuntu, ale je použitelná pro většinu distribucí a verzí Linuxu.
Table of Contents
Najděte soubory a adresáře
Najděte konkrétní soubory podle názvu nebo přípony
Chcete-li vyhledat konkrétní soubor, spusťte následující příkaz z kořenového adresáře (/). Příkaz obsahuje přesný název souboru, který hledáte.
find . -name file22.txt
Výstup
./test/file22.txt ./sales/file22.txt
Upozorňujeme, že výsledky zahrnují cestu. To je důležité, pokud neznáte adresář, kde je soubor umístěn, nebo když je na více než jednom místě.
Můžete také vyhledat soubor v jiném adresáři, když jste stále v aktuálním umístění. V tomto případě musíte zadat cestu k adresáři, ve kterém chcete hledat.
find ./test -name file22.txt
Hledání konkrétních souborů v jiném adresáři
V našem případě budeme v adresáři test hledat všechny začínající souborem písmen.
find ./test -name file*
Výstup
./test/file22.txt ./test/file30.doc ./test/file1.txt ./test/file5,doc
Vyhledejte soubory podle přípony
Chcete-li v Linuxu najít soubor s určitou příponou, přidejte jej do příkazu.
find . -name *.txt
Výstup
./test/subtest/subfil.txt ./test/file22.txt ./test/file1.txt ./home1/files32.txt ./home2/file22.txt ./qa/tags.txt
Vyhledejte soubory a adresáře podle názvu
Pomocí níže uvedeného příkazu vyhledejte soubory a adresáře začínající písmeny qa. V našem počítači máme soubory qatree.txt a qa.txt a také adresář s názvem qa.
Pokud spustíme příkaz;
find ./ -name "qa*"
Vrací následující výstup
./test/qatree.pdf ./test/qa.txt ./home/qa
Příkaz vrátí soubory i adresáře odpovídající kritériím vyhledávání. Chcete-li najít pouze soubory nebo adresáře, musíte to zadat v příkazu.
Najít pouze soubory nebo adresáře
Pouze pro soubory použijte přepínač typu f.
Pouze soubory
find ./ -type f -name "qa*"
Výstup
./test/qatree.pdf ./test/qa.txt
Pouze adresáře
Přidejte volbu typu d k vyhledání pouze adresářů.
find ./ -type d -name "qa*"
Výstup
./home/qa
Příkaz hledání bez ohledu na velikost písmen
Všechna vyhledávání s přepínačem -name rozlišují velká a malá písmena a neposkytují výsledky s velkými písmeny. Chcete-li získat všechny případy, použijte volbu -iname.
find ./ -iname "qa*"
Výstup
./test/qatree.pdf ./test/qa.txt ./test/QAtest.txt ./home/qa
Vyhledejte soubor z více adresářů
Chcete-li najít soubory v různých adresářích, přidejte jejich cesty do příkazu. V našem případě zkontrolujeme testovací a číselné adresáře.
find ./test ./numeric -name file22.txt -type f
Výstup
./test/file22.txt /root/numeric/file22.txt
Najděte více souborů s různými příponami ze všech adresářů
Příkaz find můžete použít k vyhledání více souborů, které sdílejí různé přípony, jako je *.doc, *.txt *.pdf atd. To lze provést samostatně, jednu příponu po druhé, nebo pomocí jediného příkazu, který zahrnuje všechny požadovaná rozšíření.
najít . -type f ( -name “*.txt” -o -name “*.pdf” -o -name “*.doc” )
výstup
./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
Najděte soubory obsahující určitý text
Někdy chcete získat přístup k souboru obsahujícímu určitý text, ale nemůžete si vzpomenout na jeho název nebo umístění. Tento příkaz vám umožní najít všechny soubory obsahující váš cílový text.
Chcete-li vyhledat všechny soubory obsahující slovo hyperkonvergence“, použijte;
find / -type f -exec grep -l -i "hyperconvergence" {} ;
Výstup
/root/numeric/hci /root/HCIP
Volba –i umožňuje příkazu ignorovat malá a velká písmena a najde text bez ohledu na to, zda je velký nebo ne, tj. hyperkonvergence, Hyperkonvergence atd.
Chcete-li vyhledat soubory v určitém adresáři, jednoduše je přidejte do příkazu
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;
Výstup
./numeric/hci
Prozkoumejte další příklady příkazů grep.
Najděte soubory a adresáře podle velikosti
Můžete najít všechny soubory nebo adresáře, které jsou menší, stejné nebo větší než určitá velikost, v určitém rozsahu nebo prázdné. Použijte vhodný formát velikosti v závislosti na typu souborů nebo adresářů, které hledáte.
Možnosti velikosti zahrnují;
c – bajtů
k – kilobajtů
M – megabajty
G – gigabajty
Najděte soubory určité velikosti – rovnající se 30 MB
Chcete-li hledat, vyhledejte všechny soubory o velikosti 30 MB
find / -size 30M
Najít soubory větší než zadaná velikost
find -size +2M
Výstup
. /Downloads/ubuntu18043.iso ./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Najděte soubory menší než 10 MB v aktuálním adresáři
find . -type f -size -10M
Najděte soubory o velikosti mezi 100–200 MB
Při hledání souborů v určitém rozsahu, například mezi 100 a 200 MB
find / -size +100M -size -200M
Hledejte adresáře větší než 20 kb
najít / -typ d -velikost +20k
Najděte prázdné soubory a adresáře.
Soubory
najít ./ -typ f -velikost 0
nebo
find ./ -type f –empty
Adresáře
find ./ -type d –empty
Najděte soubory podle věku nebo času úprav
Najděte soubory starší než n dní
find /path/ -type f -name '*.txt' -mtime +8
-mtime +8 vyhledá soubory txt, které jsou starší než 8 dní.
Podle data změny
Toto vyhledá soubory upravené za posledních 17 hodin
find . -mtime -17 -type f
Vyhledá adresáře upravené za posledních 10 dní
find . -mtime -10 -type d
Najděte soubory na základě přístupu nebo úprav
Vyhledejte soubory podle data nebo času přístupu. To vám umožní vidět soubory, které byly nebo nebyly zpřístupněny během zadaného období.
Chcete-li zobrazit soubory, které nebyly zpřístupněny během posledních 10 dnů v domovském adresáři.
find /home -atime +10
Soubory přístupné přesně před 10 dny
find /home -atime 10
Přístup za posledních 10 dní
find /home -atime -10
Najít soubory upravené během posledních n dnů
Můžete také vyhledat soubory v adresáři /home změněné během posledních 10 dnů pomocí příkazu;
find /home -mtime -10
Najít soubory upravené v určitém období.
Například všechny soubory upravené mezi 6 a 15 dny v domovském adresáři.
find /home -type f -mtime +6 -mtime -15
Soubory a adresáře přístupné za posledních 10 minut
Chcete-li najít soubory, ke kterým se přistupovalo za posledních 10 minut, použijte volbu -amin.
find . -amin -10 -type f
Výstup
./.bash_history ./[email protected]:~#
Adresáře přístupné během posledních 10 minut
find . -amin -10 -type d
Najděte soubory odpovídající konkrétním oprávněním
Syntax
$ find -perm mode
Kde mode je oprávnění, které je buď číselné, například 644, 655, 700, 777 atd., nebo písmena jako u=x, a=r+x atd.
Režim můžete určit následujícími třemi různými způsoby.
Najít soubory s oprávněním 777
find -perm 777
Výstup
./file1
Najděte soubory s alespoň 766
najít -perm -766
Výstup
./file2 ./file1
Příkaz hledá všechny soubory, ve kterých je
- Vlastník souboru má oprávnění ke čtení/zápisu/spouštění.
- Skupina má oprávnění ke čtení/zápisu
- Ostatní mají oprávnění ke čtení/zápisu
Jako takový vrátí dva soubory, které splňují toto kritérium – soubor1 a soubor2. Soubory nemusí mít přesná oprávnění 766 a mohou mít další tak dlouhá, ale musí mít alespoň specifikovaná.
Najděte soubory, do kterých může vlastník zapisovat
Nyní použijeme „/“ k vyhledání souborů, do kterých může zapisovat jejich vlastník, skupina nebo jiní.
find -perm /222 . ./file2 ./file3 ./file1
Výše uvedené hledá soubory, do kterých může zapisovat jejich vlastník nebo skupina.
Tím se vrátí soubory, do kterých lze zapisovat buď, ale ne nutně oběma. Chcete-li zobrazit soubory, kde oba mají oprávnění k zápisu, použijte předponu –.
find -perm -220
Výstup
./file2 ./file1
Najděte soubory vlastněné uživatelem
Najděte všechny soubory vlastněné Jackem
find /home -user jack
Výstup
/home/jack /home/jack/examples.desktop /home/jack/.gnupg /home/jack/.gnupg/private-keys-v1.d /home/jack/ans.cgi
Najděte konkrétní soubory vlastněné uživatelem
Najděte všechny textové soubory vlastněné Jackem
find /home -user jack -iname "*.txt"
Výstup
/home/jack/docs/file32.txt
Vyhledejte a vypište soubory a adresáře spolu s jejich oprávněními
find -name "*.conf" | ls -l
Výstup
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
Najděte výsledky a jednejte podle nich
V této části se podíváme na to, jak můžete jednat se soubory, které odpovídají vzoru zadanému v příkazu find.
Najděte soubory a změňte oprávnění
Najděte a změňte oprávnění určitých typů souborů. V našem případě budeme pracovat se soubory PHP s různými oprávněními, jak je uvedeno níže.
[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
Nyní vyhledáme všechny soubory PHP (výše) a nahradíme jejich oprávnění 755
find ver -name "*.php" -type f -exec chmod 755 {} ;
Příkaz vyhledá soubory PHP v adresáři ver a poté nastaví jejich oprávnění na 755 (rwxr-xr-x)
Výsledek
[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
Najděte a změňte oprávnění k souborům a adresářům
Najděte soubory s oprávněními 644 a změňte je tak, aby měly oprávnění 655
find . -type f -perm 644 -exec chmod 655 {} ;
Můžete také vyhledat adresáře s oprávněními 644 a nahradit je 755.
find . -type d -perm 644
Výstup
./docs
Složka docs má 644 oprávnění
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
Abychom to nastavili na 755, spustíme
find . -type d -perm 644 -exec chmod 755 {} ;
Nyní můžeme znovu zkontrolovat, co přesně 755
find . -type d -perm 755
Výstup
.
./docs
Shora vidíme, že kořenový adresář a adresář docs mají oprávnění 755.
Příkaz Ls –la poskytuje následující podrobnosti
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Najděte a zkopírujte soubory nebo adresáře
Najděte a zkopírujte konkrétní soubor do adresáře
Níže uvedený příkaz vyhledá soubor file22.txt a zkopíruje jej do adresáře ~/tmp/images.
find -iname file22.txt -exec cp {} ~/tmp/images ;
Najděte a zkopírujte jeden typ souborů do adresáře
Chcete-li najít soubory, jako jsou obrázky s příponou jpg, v aktuálním adresáři a zkopírovat je do jiného umístění, například do složky obrázků, použijte;
find -iname '*.jpg' -exec cp {} ~/tmp/images ;
To najde a zkopíruje všechny soubory jpg do složky ~/tmp/images.
Najděte a zkopírujte jeden soubor do mnoha adresářů
Najděte a zkopírujte jeden do více adresářů.
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Tím se najde soubor hci a zkopíruje se do tří adresářů /tmp/dir1/ /tmp/dir2/ a $HOME/3/
Najděte a přesuňte soubory do jiného adresáře
Přesunutí známého souboru z adresáře do jiného. Chcete-li přesunout soubor universal.php;
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Vyhledávejte a přesouvejte soubory s určitou příponou do jiné složky
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Najděte určité soubory a přesuňte se do konkrétní jiné složky
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
Příkaz hledá všechny soubory, jejichž názvy začínají na uni a mají libovolnou příponu. Poté je přesune do adresáře /unifiles/
Najděte a přesouvejte soubory podle věku
Najděte a přesuňte soubory starší než zadané dny do jiného umístění, například do archivu.
find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;
To vyhledá soubory PDF starší než 20 dní a přesune je do adresáře backup1.
Najít a odstranit soubory a adresáře
Syntaxe pro vyhledání a odstranění souborů nebo adresářů v aktuálním adresáři je
najít . -type f -name “soubor k odstranění” -exec rm -f {} ; pouze smazat soubory nebo
najít . -type d -name “dir-to-delete” -exec rm -rf {} ; pouze pro mazání adresářů
Najděte a odstraňte pouze určité soubory
Chcete-li najít a odstranit soubory začínající na til, použijte;
find . -type f -name "til*" -exec rm {} ;
Chcete-li vyhledat a odstranit adresáře začínající na til
find . -type d -name "til*" -exec rm {} ;
Odstraňte soubory i adresáře
find . -name "til*" -exec rm -rf {} ;
Tím se odstraní soubory i adresáře začínající písmeny til.
Smazat podle přípony
Níže je uvedeno, jak můžete najít a odstranit všechny soubory txt v aktuálním adresáři. Nahraďte txt jinou příponou, jako je bak, pdf nebo kteroukoli jinou, kterou chcete odstranit.
find . -type f -name "*.txt" -exec rm -f {} ;
V případě, že chcete, aby vás systém před smazáním každého souboru vyzval k potvrzení, přidejte volbu -i, jak je uvedeno níže.
find . -type f -name "*.txt" -exec rm -i {} ;
Výstup
rm: remove regular empty file './File22.txt'? y rm: remove regular empty file './file22.txt'? y rm: remove regular empty file './file23.txt'?
Ve výchozím nastavení -rm neodstraní adresáře a pro zajištění rekurzivního odstranění musíte použít volbu –r. Tím je zajištěno mazání prázdných adresářů a adresářů obsahujících soubory. Volba -f vynutí odstranění a používá se pro soubory i adresáře.
Vyhledejte a odstraňte soubory starší než n dní
Najděte a odstraňte záložní soubory starší než 20 dní z aktuálního adresáře.
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Tímto smažete všechny soubory .bak starší než 20 dní.
Najít a odstranit pouze adresáře
Chcete-li odstranit adresář s názvem dir22
find . -type d -name dir22 -exec rm -rf {} ;
Ujistěte se, že odpovídá velikosti názvu adresáře nebo použijte volbu -iname.
find . -type d -iname Dir22 -exec rm -rf {} ;
Odstraní Dir22 i dir22
Pro potvrzení před odstraněním použijte volbu -i.
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Výstup
rm: odebrat adresář ‚./Dir22‘? n
rm: odebrat adresář ‚./dir22‘? y
V našem případě jsme zadali n pro adresář Dir22, který nebude odstraněn, a y pro adresář dir22, který bude nyní odstraněn.
Najděte a odstraňte prázdné soubory
K vyhledání prázdných souborů a jejich automatickému odstranění můžete použít kterýkoli z následujících příkazů.
find ./ -type f -size 0 -exec rm -f {} ;
nebo
najít ./ -typ f -velikost 0 | xargs rm -f
nebo
find ./ -type f -size 0 –delete
Najděte a odstraňte prázdné adresáře
K odstranění prázdných adresářů použijeme volbu d.
find ./ -type d -empty -exec rmdir {} ;
Další alternativou je použití delete namísto remove.
find ./ -type d -empty -delete
Upozorňujeme, že odstranění systémových nebo kritických souborů z počítače může poškodit operační systém nebo aplikace nebo vést ke ztrátě důležitých dat.
Chcete-li se vyhnout náhodným smazáním, je osvědčeným postupem použít účet uživatele bez oprávnění root. Také se ujistěte, že odstraňujete správné soubory, které nejsou užitečné, a že máte zálohu všech datových souborů pro každý případ.
Co bude dál?
Pokračujte a vyzkoušejte výše uvedené příkazy Linux find ve vaší laboratoři nebo prostředí NON PRODUCTION. Podívejte se, zda můžete některé použít k automatizaci čištění systému souborů pomocí Crontab. A abyste zvládli Linux, podívejte se na toto online kurz.