Tento článek představí dva užitečné nástroje pro vyhledávání souborů v systému souborů Linux. První je find
příkaz, který lze nalézt v jakékoli distribuci Linuxu, a druhý je locate
, který vyžaduje instalaci.
Příkaz Najít
Příkaz find je ve výchozím nastavení součástí Linuxu. Nabízí několik parametrů pro upřesnění vyhledávání.
Najít podle jména
Nejjednodušší vyhledávací příkaz je hledat podle jména, kde se nacházíte:
$ find -name "FILE_NAME"
Můžete zadat adresář, ve kterém chcete soubor hledat:
$ find /home -name my_file.txt
$ find / -name my_other_file.txt
Vezměte v úvahu, že tento příkaz rozlišuje malá a velká písmena. Pokud chcete ignorovat případ, použijte:
$ find -iname "FILE_NAME"
Inverzní vyhledávání
V případě, že chcete hledat soubory, které neodpovídají zadanému vzoru, můžete negovat parametry vyhledávání pomocí -not
parametr nebo \!
. Například:
$ find -not -name "FILE_NAME_TO_AVOID"
or
$ find \! -name "FILE_NAME_TO_AVOID"
Najít podle typu souboru
file
příkaz také umožňuje vyhledávat typy souborů. Některé běžné deskriptory typů souborů jsou:
f
:běžný soubord
:adresářl
:odkaz na symbolc
:znaková zařízeníb
:blokovat zařízení
Požadovaný typ souboru následuje za -type
atribut.
Chcete-li například najít všechny soubory JSON pod etc
adresář:
$ find /etc -type f -name "*.json"
Najít podle velikosti souboru
K dispozici je také parametr používaný k filtrování výsledku vyhledávání v závislosti na velikosti souborů:-size
.
Pro jednotky velikosti můžete použít následující přípony:
c
:bajtůk
:kilobajtyM
:megabajtyG
:gigabajtyb
:512bajtové bloky
A pro určení, zda mluvíte o přesné velikosti, menší než nebo větší než, použijte následující předpony:
- Přesné vyhledávání :žádná předpona
- Méně než :
-
předpona - Větší než :
+
předpona
Chcete-li například najít všechny 3GB soubory v domovském adresáři:
$ find /home -size 3G
Pro všechny soubory menší než 3 gigabajty:
$ find /home -size -3G
Soubory větší než 3 gigabajty:
$ find /home -size +3G
Hledat podle času
Můžete také vyhledávat soubory podle jejich posledního přístupu, změn nebo časů změn.
- Doba přístupu :
-atime
při posledním čtení souboru. - Čas úpravy :
-mtime
při poslední úpravě obsahu souboru. - Změnit čas :
-ctime
naposledy, kdy byla změněna metadata inodu souboru.
Je také možné porovnat s referenčním souborem a vrátit ty, které jsou novější:
$ find / -newer file_name
Pro časy jsou zadané parametry ve dnech . Lze použít stejné předpony jako při hledání podle velikosti:
$ find /home -mtime 3
$ find /home -atime -2
$ find /home -ctime +5
Chcete-li najít soubory pomocí času v minutách, můžete použít:
$ find /home -mmin 3
Vyhledat podle vlastníka a oprávnění
Existují také parametry pro vyhledání souborů podle jejich vlastníků (-user
a -group
) a jejich oprávnění (-perm
):
$ find /home -user my_user
$ find /home -group my_group
$ find /home -perm 777
Definování hloubky vyhledávání
Při vyhledávání v adresáři find
příkaz vrátí všechny soubory v tomto adresáři, i když jsou v jiných podadresářích. Pro ovládání této hloubky můžete definovat maximální hloubku, minimální hloubku nebo obojí.
Chcete-li například hledat pouze v horním adresáři a jedné úrovni podadresářů, můžete nastavit -maxdepth
parametr na 2:
$ find -maxdepth 2 -name my_file
Chcete-li definovat minimální hloubku, kde find
měli byste hledat, použijte -mindepth
parametr:
$ find -mindepth 5 -name my_file
Tyto parametry lze kombinovat:
$ find -mindepth 4 -maxdepth 7 -name my_file
Provádění příkazů u výsledků
Jak je vidět v příkazech hloubky, všechny find
parametry lze kombinovat a získat tak velmi specifické výsledky. Když získáte požadované výsledky, je možné nad nimi spouštět příkazy pomocí -exec
parametr.
Při kombinování parametrů vyhledávání můžete také použít -and
a -or
možnosti přizpůsobení kritérií vyhledávání. Pokud není použit žádný z nich, -and
možnost je výchozí.
Chcete-li například změnit oprávnění ke všem souborům pod /my_dir
adresář, který má aktuálně 777 oprávnění k 664, použijte následující:
$ cd /my_dir
$ find . -type f -perm 777 -exec chmod 664 {} \;
Nástroj najít
locate
příkaz je alternativou pro find
. Rozdíl je v tom, že používá databázi souborů v souborovém systému, takže může pracovat rychleji. Chcete-li nainstalovat locate
nástroj, který můžete použít:
- Pro distribuce Ubuntu/Debian:
$ sudo apt install mlocate`
- Pro distribuce CentOS/RHEL:
$ sudo yum install mlocate`
Locate používá k aktualizaci databáze úlohu cron, ale lze ji aktualizovat ručně pomocí:
$ sudo updatedb
Pro hledání „základního jména“, tedy že dotaz je obsažen pouze v názvu souboru a nikoli v cestě k souboru, použijte -b
příznak:
$ locate -b name
Chcete-li najít soubory, které stále existují (po poslední updatedb
call) použijte -e
příznak:
$ locate -e name
Pro statistiky z vygenerované databáze použijte:
$ locate -S
Závěr
Hledání souborů v příkazovém řádku systému Linux může být obtížné. Nástroje uvedené v tomto článku poskytují snadný způsob práce se soubory a jejich vyhledávání. Pochopením různých parametrů může být vyhledávání tak specifické, jak chcete.
Pomocí karty Zpětná vazba můžete přidat komentáře nebo položit otázky. Můžete s námi také zahájit konverzaci.