GNU/Linux >> Znalost Linux >  >> Linux

25 jednoduchých příkladů příkazu find v Linuxu

Linuxový příkaz find

Linux příkaz najít je velmi užitečný a šikovný příkaz pro vyhledávání souborů z příkazového řádku. Lze jej použít k vyhledání souborů na základě různých kritérií vyhledávání, jako jsou oprávnění, vlastnictví uživatele, datum/čas změny, velikost atd. V tomto příspěvku se naučíme používat příkaz find spolu s různými možnostmi, které podporuje.

Příkaz find je standardně dostupný na většině linuxových distribucí, takže nemusíte instalovat žádný balíček. Příkaz find je nezbytností, kterou se musíte naučit, pokud chcete být superproduktivní s příkazovým řádkem na linuxu.

Základní syntaxe příkazu find vypadá takto

$ find location comparison-criteria search-term

1. Seznam všech souborů v aktuálním a podadresáři

Tento příkaz vypíše všechny soubory v aktuálním adresáři a také podadresáře v aktuálním adresáři.

$ find
.
./abc.txt
./subdir
./subdir/how.php
./cool.php

Příkaz je stejný jako následující

$ find .
$ find . -print

2. Vyhledejte konkrétní adresář nebo cestu

Následující příkaz vyhledá soubory v adresáři test v aktuálním adresáři. Ve výchozím nastavení vypíše všechny soubory.

$ find ./test
./test
./test/abc.txt
./test/subdir
./test/subdir/how.php
./test/cool.php

Následující příkaz vyhledává soubory podle jejich názvu.

$ find ./test -name "abc.txt"
./test/abc.txt

Můžeme také použít zástupné znaky

$ find ./test -name "*.php"
./test/subdir/how.php
./test/cool.php

Všimněte si, že všechny podadresáře jsou prohledávány rekurzivně. Jedná se tedy o velmi účinný způsob, jak najít všechny soubory dané přípony.

Pokus prohledat adresář "/", který je kořenem, by prohledal celý souborový systém včetně připojených zařízení a síťových úložných zařízení. Buď opatrný. Samozřejmě můžete kdykoli příkaz zastavit stisknutím Ctrl + c.

When specifying the directory ("./test" in this example), its fine to omit the trailing slash. However, if the directory is actually a symlink to some other location then you MUST specify the trailing slash for it to work properly (find ./test/ ...)

Ignorujte případ

Při hledání názvů souborů je často užitečné ignorovat velikost písmen. Chcete-li ignorovat malá a velká písmena, použijte místo možnosti "name" možnost "jméno".

$ find ./test -iname "*.Php"
./test/subdir/how.php
./test/cool.php
Its always better to wrap the search term (name parameter) in double or single quotes. Not doing so will seem to work sometimes and give strange results at other times.

3. Omezte hloubku procházení adresáře

Příkaz find ve výchozím nastavení prochází celým adresářovým stromem rekurzivně, což je náročné na čas a zdroje. Lze však zadat hloubku procházení adresáře. Například nechceme jít v podadresářích o více než 2 nebo 3 úrovně níže. To se provádí pomocí možnosti maxdepth.

$ find ./test -maxdepth 2 -name "*.php"
./test/subdir/how.php
./test/cool.php
$ find ./test -maxdepth 1 -name *.php
./test/cool.php

Druhý příklad používá maxdepth 1, což znamená, že nepůjde níže než 1 úroveň hluboko, a to buď pouze v aktuálním adresáři.

To je velmi užitečné, když chceme provádět omezené vyhledávání pouze v aktuálním adresáři nebo maximálně 1 úrovni hlubokých podadresářů a ne v celém stromu adresářů, což by zabralo více času.

Stejně jako maxdepth existuje možnost nazvaná mindepth, která dělá to, co název napovídá, to znamená, že před vyhledáním souborů půjde alespoň N úrovně hluboko.

4. Invertovat shodu

Je také možné vyhledávat soubory, které neodpovídají danému názvu nebo vzoru. To je užitečné, když víme, které soubory z vyhledávání vyloučit.

$ find ./test -not -name "*.php"
./test
./test/abc.txt
./test/subdir

Ve výše uvedeném příkladu jsme tedy našli všechny soubory, které nemají příponu php, buď soubory jiné než php. Příkaz find také podporuje vykřičník místo not.

find ./test ! -name "*.php"

5. Kombinujte více kritérií vyhledávání

Při zadávání názvu a invertování je možné použít více kritérií. Například

$ find ./test -name 'abc*' ! -name '*.php'
./test/abc.txt
./test/abc

Výše uvedený příkaz find hledá soubory, které v názvu začínají na abc a nemají příponu php. Toto je příklad toho, jak výkonné vyhledávací výrazy lze vytvořit pomocí příkazu find.

Operátor NEBO

Při použití více kritérií názvů by je příkaz find spojil s operátorem AND, což znamená, že budou nalezeny pouze ty soubory, které splňují všechna kritéria. Pokud však potřebujeme provést párování založené na OR, pak má příkaz find přepínač "o".

$ find -name '*.php' -o -name '*.txt'
./abc.txt
./subdir/how.php
./abc.php
./cool.php

Výše uvedený příkaz vyhledá soubory končící buď příponou php, nebo příponou txt.

6. Prohledávat pouze soubory nebo pouze adresáře

Někdy chceme najít pouze soubory nebo pouze adresáře s daným názvem. Find to dokáže také snadno.

$ find ./test -name abc*
./test/abc.txt
./test/abc
Only files
$ find ./test -type f -name "abc*"
./test/abc.txt
Only directories
$ find ./test -type d -name "abc*"
./test/abc

Docela užitečné a praktické!

7. Prohledejte více adresářů společně

Řekněme, že chcete hledat ve 2 samostatných adresářích. Příkaz je opět velmi jednoduchý

$ find ./test ./dir2 -type f -name "abc*"
./test/abc.txt
./dir2/abcdefg.txt

Zkontrolujte, že jsou uvedeny soubory ze 2 samostatných adresářů.

8. Najít skryté soubory

Skryté soubory v linuxu začínají tečkou. Takže je snadné to zmínit v kritériích názvu a seznamu všech skrytých souborů.

$ find ~ -type f -name ".*"

9. Najít soubory s určitými oprávněními

Příkaz find lze použít k vyhledání souborů se specifickým oprávněním pomocí možnosti „perm“. Následující příkaz vyhledává soubory s oprávněním 0664

$ find . -type f -perm 0664
./abc.txt
./subdir/how.php
./abc.php
./cool.php

To může být užitečné při hledání souborů s nesprávnými oprávněními, což může vést k bezpečnostním problémům. Inverze lze také použít na kontrolu oprávnění.

$ find . -type f ! -perm 0777
./abc.txt
./subdir/how.php
./abc.php
./cool.php

10. Najděte soubory s nastavenými bity sgid/suid

Možnost "perm" příkazu find přijímá stejný řetězec režimu jako chmod. Následující příkaz najde všechny soubory s oprávněním 644 a nastaveným bitem sgid.

# find / -perm 2644

Podobně použijte 1664 pro lepivý bit. Možnost perm také podporuje použití alternativní syntaxe místo osmičkových čísel.

$ find / -maxdepth 2 -perm /u=s 2>/dev/null
/bin/mount
/bin/su
/bin/ping6
/bin/fusermount
/bin/ping
/bin/umount
/sbin/mount.ecryptfs_private

Všimněte si, že "2>/dev/null" odstraní ty položky, které mají chybu "Permission Denied"

11. Najít soubory pouze pro čtení

Najít všechny soubory pouze pro čtení.

$ find /etc -maxdepth 1 -perm /u=r
/etc
/etc/thunderbird
/etc/brltty
/etc/dkms
/etc/phpmyadmin
... output truncated ...

12. Najděte spustitelné soubory

Následující příkaz vyhledá spustitelné soubory

$ find /bin -maxdepth 2 -perm /a=x
/bin
/bin/preseed_command
/bin/mount
/bin/zfgrep
/bin/tempfile
... output truncated ...

13. Najít soubory vlastněné konkrétním uživatelem

Chcete-li najít celý nebo jeden soubor s názvem tecmint.txt v adresáři /root kořenového adresáře vlastníka.

$ find . -user bob
.
./abc.txt
./abc
./subdir
./subdir/how.php
./abc.php

Můžeme také zadat název souboru nebo jakákoli kritéria související s názvem spolu s uživatelskými kritérii

$ find . -user bob -name '*.php'

Je velmi snadné vidět, jak můžeme sestavit kritéria za kritérii, abychom zúžili hledání odpovídajících souborů.

14. Vyhledejte soubory patřící do skupiny

Najděte všechny soubory, které patří do určité skupiny.

# find /var/www -group developer

Věděli jste, že můžete prohledávat svůj domovský adresář pomocí symbolu ~?

$ find ~ -name "hidden.php"

Snadno!!

Vyhledávání souborů a adresářů podle data a času změny

Dalším skvělým vyhledávacím kritériem, které příkaz find podporuje, je úprava a přístupové datum/časy. To je velmi užitečné, když chceme zjistit, které soubory byly upraveny v určitém časovém nebo časovém rozmezí. Vezměme si několik příkladů

15. Najít soubory upravené před N dny

Chcete-li najít všechny soubory, které byly změněny před 50 dny.

# find / -mtime 50

16. Najít soubory, ke kterým se přistupovalo za posledních N dní

Najít všechny soubory, ke kterým se přistupovalo za posledních 50 dní.

# find / -atime 50

17. Najít soubory upravené v rozmezí dnů

Najděte všechny soubory, které byly změněny před 50 až 100 dny.

# find / -mtime +50 –mtime -100

18. Najít soubory změněné za posledních N minut.

Najít soubory upravené během poslední 1 hodiny.

$ find /home/bob -cmin -60

19. Soubory upravené za poslední hodinu

Chcete-li najít všechny soubory, které byly změněny za poslední 1 hodinu.

# find / -mmin -60

20. Najít přístupné soubory za poslední 1 hodinu

Chcete-li najít všechny soubory, ke kterým se přistupovalo za poslední 1 hodinu.

# find / -amin -60

21. Najít soubory dané velikosti

Prohledávejte soubory a adresáře podle velikosti. Chcete-li najít všechny 50 MB soubory, použijte.

# find / -size 50M

22. Najděte soubory v rozsahu velikostí

Chcete-li najít všechny soubory, které jsou větší než 50 MB a menší než 100 MB.

$ find / -size +50M -size -100M

23. Najděte největší a nejmenší soubory

Příkaz find při použití v kombinaci s příkazy ls a sort lze použít k výpisu největších souborů.
Následující příkaz zobrazí 5 největších souborů v aktuálním adresáři a jeho podadresáři. Spuštění může chvíli trvat v závislosti na celkovém počtu souborů, které musí příkaz zpracovat.

$ find . -type f -exec ls -s {} \; | sort -n -r | head -5

Podobně při seřazení ve vzestupném pořadí by se nejprve zobrazily nejmenší soubory

$ find . -type f -exec ls -s {} \; | sort -n | head -5

24. Najděte prázdné soubory a adresáře

Následující příkaz používá volbu "empty" příkazu find, která najde všechny soubory, které jsou prázdné.

# find /tmp -type f -empty

Pro uložení všech prázdných adresářů použijte typ "d".

$ find ~/ -type d -empty

Opravdu velmi jednoduché a snadné

Některé pokročilé operace

Příkaz find nejen najde soubory na základě určitých kritérií, ale může s těmito soubory také jednat pomocí libovolného linuxového příkazu. Můžeme například chtít odstranit některé soubory.

Zde je několik rychlých příkladů

25. Vypište nalezené soubory

Řekněme, že jsme našli soubory pomocí příkazu find a nyní je chceme vypsat tak, jak by to udělal příkaz ls. To je velmi snadné.

$ find . -exec ls -ld {} \;
drwxrwxr-x 4 enlightened enlightened 4096 Aug 11 19:01 .
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./abc.txt
drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:48 ./abc
drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:26 ./subdir
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:26 ./subdir/how.php
-rw-rw-r-- 1 enlightened enlightened 29 Aug 11 19:13 ./abc.php
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./cool.php

26. Smažte všechny odpovídající soubory nebo adresáře

Následující příkaz odstraní všechny textové soubory v adresáři tmp.

$ find /tmp -type f -name "*.txt" -exec rm -f {} \;

Stejné operace lze provádět s adresáři, stačí zadat typ d místo typu f.

Vezměme si další příklad, kdy chceme smazat soubory větší než 100 MB

$ find /home/bob/dir -type f -name *.log -size +10M -exec rm -f {} \;

Shrnutí

Takže to byl rychlý návod na příkaz linux find . Příkaz find je jedním z nejdůležitějších příkazů na linuxovém terminálu, který umožňuje velmi snadné vyhledávání souborů. Je to povinnost všech systémových administrátorů. Tak se to naučte. Máte nějaké otázky ? Zanechte komentář níže.


Linux
  1. 7 Příklady příkazů Linux df

  2. 8 Příklady příkazů Linux TR

  3. Příklady příkazů rm v Linuxu

  1. najdete příklady příkazů v Linuxu

  2. Příklady příkazů ps v Linuxu

  3. w Příklady příkazů v Linuxu

  1. 25 Užitečné hledání Příkaz Praktické příklady v Linuxu

  2. sa Příklady příkazů v Linuxu

  3. Příklady příkazů ac v Linuxu