GNU/Linux >> Znalost Linux >  >> Linux

Linux find command tutorial (s příklady)

Pokud jde o lokalizaci souborů nebo adresářů ve vašem systému, příkaz find v Linuxu nemá obdoby. Snadno se používá, ale má mnoho různých možností, které vám umožní doladit vyhledávání souborů.

Čtěte dále, abyste viděli příklady toho, jak můžete tento příkaz použít k nalezení čehokoli ve vašem systému. Každý soubor je vzdálený jen několik úhozů, jakmile víte, jak používat příkaz find v Linuxu.

Najděte adresář

Příkazu find můžete říct, aby hledal konkrétně adresáře s volbou -type d. To způsobí, že příkaz find bude hledat pouze odpovídající názvy adresářů a nikoli názvy souborů.

$ find /path/to/search -type d -name "name-of-dir"

Najít skryté soubory

Vzhledem k tomu, že skryté soubory a adresáře v Linuxu začínají tečkou, můžeme tento vyhledávací vzor zadat v našem vyhledávacím řetězci, abychom mohli rekurzivně vypsat skryté soubory a adresáře.

$ find /path/to/search -name ".*"

Najít soubory určité velikosti nebo větší než X

Volba -size při hledání nám umožňuje vyhledávat soubory určité velikosti. Lze jej použít k vyhledání souborů přesné velikosti, souborů, které jsou větší nebo menší než určitá velikost, nebo souborů, které se vejdou do určeného rozsahu velikostí. Zde je několik příkladů:

Hledat soubory větší než 10 MB:

$ find /path/to/search -size +10M

Hledat soubory menší než 10 MB:

$ find /path/to/search -size -10M

Vyhledejte soubory, které mají přesně 10 MB:

$ find /path/to/search -size 10M

Vyhledejte soubory o velikosti mezi 100 MB a 1 GB:

$ find /path/to/search -size +100M -size -1G

Najít ze seznamu souborů

Pokud máte seznam souborů (například v souboru .txt), které potřebujete vyhledat, můžete svůj seznam souborů vyhledat kombinací příkazů find a grep. Aby tento příkaz fungoval, ujistěte se, že každý vzor, ​​který chcete vyhledat, je oddělen novým řádkem.

$ find /path/to/search | grep -f filelist.txt

Volba -f na grep znamená „soubor“ a umožňuje nám specifikovat soubor řetězců, se kterými se má porovnat. Výsledkem je, že příkaz find vrátí všechny názvy souborů nebo adresářů, které odpovídají těm v seznamu.

Najít v seznamu

Pomocí stejného seznamu souborů, který jsme zmínili v předchozím příkladu, můžete také použít příkaz find k vyhledání souborů, kteréne přizpůsobit vzory uvnitř textového souboru. Opět použijeme kombinaci příkazu find a grep; potřebujeme pouze další možnost specifikovanou pomocí grep:

$ find /path/to/search | grep -vf filelist.txt

Volba -v na grep znamená „inverzní shoda“ a vrátí seznam souborů, které neodpovídají žádnému ze vzorů uvedených v našem seznamu souborů.

Nastavte maxdepth

Příkaz find bude ve výchozím nastavení hledat rekurzivně. To znamená, že prohledá zadaný adresář pro vzor, ​​který jste zadali, a také všechny podadresáře v adresáři, o kterém jste mu řekli, že má hledat.

Pokud například řeknete find, aby prohledal kořenový adresář Linuxu (/), prohledá celý pevný disk bez ohledu na to, kolik podadresářů podadresářů existuje. Toto chování můžete obejít pomocí volby -maxdepth.

Zadejte číslo za -maxdepth, abyste dali pokyn najít, kolik podadresářů má rekurzivně prohledat.

Hledejte soubory pouze v aktuálním adresáři a nehledejte rekurzivně:

$ find . -maxdepth 0 -name "myfile.txt"

Hledat soubory pouze v aktuálním adresáři a o jeden podadresář hlouběji:

$ find . -maxdepth 1 -name "myfile.txt"

Najít prázdné soubory (nulové délky)

Chcete-li hledat prázdné soubory pomocí funkce find, můžete použít parametr -empty. Vyhledat všechny prázdné soubory:

$ find /path/to/search -type f -empty

Hledat všechny prázdné adresáře:

$ find /path/to/search -type d -empty

Je také velmi užitečné spojit tento příkaz s volbou -delete, pokud chcete automaticky odstranit prázdné soubory nebo adresáře, které vrací find.

Smažte všechny prázdné soubory v adresáři (a podadresářích):

$ find /path/to/search -type f -empty -delete

Najděte největší adresář nebo soubor

Pokud byste chtěli rychle zjistit, které soubory nebo adresáře ve vašem systému zabírají nejvíce místa, můžete použít funkci find k rekurzivnímu vyhledávání a výstupu setříděného seznamu souborů a/nebo adresářů podle jejich velikosti.

Jak zobrazit největší soubor v adresáři:

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -1

Všimněte si, že příkaz find byl zařazen do dvou dalších užitečných linuxových nástrojů:sort a tail. Příkaz Sort seřadí seznam souborů podle jejich velikosti a příkaz tail vypíše pouze poslední soubor v seznamu, který je také největší.

Příkaz tail můžete upravit, pokud chcete například vytisknout 5 největších souborů:

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | tail -5

Případně můžete použít příkaz head k určení nejmenších souborů:

$ find /path/to/search -type f -printf "%s\t%p\n" | sort -n | head -5

Pokud chcete hledat adresáře místo souborů, stačí zadat „d“ do volby typu. Jak zobrazit největší adresář:

$ find /path/to/search -type d -printf "%s\t%p\n" | sort -n | tail -1

Najděte soubory setuid set

Setuid je zkratka pro „nastavení ID uživatele při spuštění“, což je oprávnění k souboru, které běžnému uživateli umožňuje spouštět program s eskalovanými právy (jako je root).

To může být z pochopitelných důvodů bezpečnostní problém, ale tyto soubory lze snadno izolovat pomocí příkazu find a několika možností.

Příkaz find má dvě možnosti, které nám pomohou hledat soubory s určitými oprávněními:-user a -perm. Chcete-li najít soubory, které může běžný uživatel spouštět s právy root, můžete použít tento příkaz:

$ find /path/to/search -user root -perm /4000

Na výše uvedeném snímku obrazovky jsme zahrnuli volbu -exec, abychom ukázali trochu více výstupu o souborech, které najdou návraty. Celý příkaz vypadá takto:

$ find /path/to/search -user root -perm /4000 -exec ls -l {} \;

V tomto příkazu můžete také nahradit „root“ pro jakéhokoli jiného uživatele, kterého chcete vyhledat jako vlastníka. Nebo můžete vyhledat všechny soubory s oprávněními SUID a vůbec nezadat uživatele:

$ find /path/to/search -perm /4000

Najděte soubory sady sgid

Hledání souborů s nastaveným SGID je téměř stejné jako hledání souborů s SUID, až na to, že oprávnění pro 4000 je třeba změnit na 2000:

$ find /path/to/search -perm /2000

Můžete také vyhledávat soubory, které mají nastavené SUID i SGID, zadáním 6000 v možnosti perms:

$ find /path/to/search -perm /6000

Seznam souborů bez oprávnění odepřeno

Při hledání souborů pomocí příkazu find musíte mít oprávnění ke čtení v adresářích a podadresářích, které prohledáváte. Pokud tak neučiníte, funkce find vypíše chybovou zprávu, ale budete nadále prohledávat všechny adresáře, ke kterým máte oprávnění.

Ačkoli se to může stát v mnoha různých adresářích, určitě se to stane při prohledávání vašeho kořenového adresáře.

To znamená, že když se snažíte prohledat soubor na celém svém pevném disku, příkaz find vytvoří spoustu chybových zpráv.

Abyste se vyhnuli těmto chybám, můžete přesměrovat výstup stderr příkazu find na stdout a přesměrovat to na grep.

$ find / -name "myfile.txt" 2>%1 | grep -v "Permission denied"

Tento příkaz používá volbu -v (inverzní) grep k zobrazení veškerého výstupu kromě řádků, které říkají „Oprávnění odepřeno.“

Najít upravené soubory za posledních X dní

Použijte volbu -mtime v příkazu find k vyhledání souborů nebo adresářů, které byly změněny během posledních X dnů. Lze jej také použít k vyhledávání souborů starších než X dnů nebo souborů, které byly upraveny přesně před X dny.

Zde je několik příkladů, jak použít volbu -mtime v příkazu find:

Vyhledejte všechny soubory, které byly změněny za posledních 30 dní:

$ find /path/to/search -type f -mtime -30

Vyhledejte všechny soubory, které byly upraveny před více než 30 dny:

$ find /path/to/search -type f -mtime +30

Vyhledejte všechny soubory, které byly upraveny přesně před 30 dny:

$ find /path/to/search -type f -mtime 30

Pokud chcete, aby příkaz find vydal další informace o nalezených souborech, jako je datum změny, můžete použít volbu -exec a zahrnout příkaz ls:

$ find /path/to/search -type f -mtime -30 -exec ls -l {} \;

Řadit podle času

Chcete-li seřadit výsledky hledání podle upraveného času souborů, můžete použít volbu -printf k vypsání časů tříditelným způsobem a přenést tento výstup do obslužného programu pro třídění.

$ find /path/to/search -printf "%T+\t%p\n" | sort

Tento příkaz seřadí soubory starší na novější. Chcete-li, aby se jako první zobrazily novější soubory, stačí předat volbu -r (obrátit) pro řazení.

$ find /path/to/search -printf "%T+\t%p\n" | sort -r

Rozdíl mezi lokalizací a hledáním

Příkaz locate v Linuxu je dalším dobrým způsobem, jak hledat soubory ve vašem systému. Není nabitý spoustou možností vyhledávání, jako je příkaz find, takže je o něco méně flexibilní, ale stále se hodí.

$ locate myfile.txt

Příkaz locate funguje tak, že prohledává databázi, která obsahuje všechna jména souborů v systému. Příkaz updatedb aktualizuje tuto databázi.

Protože příkaz locate nemusí provádět živé vyhledávání všech souborů v systému, je mnohem efektivnější než příkaz find. Ale kromě nedostatku možností je tu další nevýhoda:databáze souborů se aktualizuje pouze jednou denně.

Tuto databázi souborů můžete aktualizovat ručně spuštěním příkazu updatedb:

$ updatedb

Příkaz locate je zvláště užitečný, když potřebujete prohledat soubor na celém pevném disku, protože příkaz find bude přirozeně trvat mnohem déle, protože musí procházet každý jednotlivý adresář v reálném čase.

Pokud prohledáváte konkrétní adresář, o kterém je známo, že neobsahuje velké množství podadresářů, je lepší zůstat u příkazu find.

Zatížení CPU příkazu find

Při prohledávání velkého množství adresářů může být příkaz find náročný na prostředky. Mělo by to ze své podstaty umožňovat, aby měly prioritu důležitější systémové procesy, ale pokud potřebujete zajistit, aby příkaz find zabíral méně zdrojů na produkčním serveru, můžete použít příkaz ionice nebo nice.

Sledujte využití procesoru příkazem find:

$ top

Snižte prioritu vstupu/výstupu příkazu find:

$ ionice -c3 -n7 find /path/to/search -name "myfile.txt"

Snižte prioritu CPU příkazu find:

$ nice -n 19 find /path/to/search -name "myfile.txt"

Nebo zkombinujte oba nástroje, abyste skutečně zajistili nízkou I/O a nízkou prioritu CPU:

$ nice -n 19 ionice -c2 -n7 find /path/to/search -name "myfile.txt"

Doufám, že vám bude návod užitečný. Vraťte se.


Linux
  1. Použití linuxového příkazu find – Použití s ​​příklady

  2. Linuxový příkaz rsync s praktickými příklady

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

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

  2. JQ Command v Linuxu s příklady

  3. Jak najít soubory pomocí příkazu fd v Linuxu

  1. Výukový program příkazu Linux Ping s příklady

  2. wc Linux Command s příklady

  3. Linux řazení příkazů s příklady