GNU/Linux >> Znalost Linux >  >> Linux

Mami, našel jsem to! — 15 praktických příkladů hledání příkazů pro Linux


Foto s laskavým svolením Qole Pejorian

Kromě základní operace hledání souborů v adresářové struktuře můžete také provádět několik praktických operací pomocí příkazu find, které vám usnadní cestu příkazového řádku.

V tomto článku se podíváme na 15 praktických příkladů příkazu find v Linuxu, které budou velmi užitečné pro nováčky i odborníky.


Nejprve vytvořte ve svém domovském adresáři následující vzorové prázdné soubory, abyste mohli vyzkoušet některé z níže uvedených příkladů příkazu find.

# vim create_sample_files.sh
touch MybashProgram.sh
touch mycprogram.c
touch MyCProgram.c
touch Program.c

mkdir backup
cd backup

touch MybashProgram.sh
touch mycprogram.c
touch MyCProgram.c
touch Program.c

# chmod +x create_sample_files.sh

# ./create_sample_files.sh

# ls -R
.:
backup                  MybashProgram.sh  MyCProgram.c
create_sample_files.sh  mycprogram.c      Program.c

./backup:
MybashProgram.sh  mycprogram.c  MyCProgram.c  Program.c

1. Najít soubory pomocí názvu

Toto je základní použití příkazu find. Tento příklad najde všechny soubory s názvem — MyCProgram.c v aktuálním adresáři a všech jeho podadresářích.

# find -name "MyCProgram.c"
./backup/MyCProgram.c
./MyCProgram.c

2. Najít soubory pomocí názvu a ignorování velikosti písmen

Toto je základní použití příkazu find. Tento příklad najde všechny soubory s názvem — MyCProgram.c (bez ohledu na velikost písmen) v aktuálním adresáři a všech jeho podadresářích.

# find -iname "MyCProgram.c"
./mycprogram.c
./backup/mycprogram.c
./backup/MyCProgram.c
./MyCProgram.c

3. Omezit vyhledávání na konkrétní úroveň adresáře pomocí mindepth a maxdepth

Najděte soubor passwd ve všech podadresářích počínaje kořenovým adresářem.

# find / -name passwd
./usr/share/doc/nss_ldap-253/pam.d/passwd
./usr/bin/passwd
./etc/pam.d/passwd
./etc/passwd


Najděte soubor passwd pod rootem a o úroveň níže. (tj. kořen – úroveň 1 a jeden podadresář – úroveň 2)

# find -maxdepth 2 -name passwd
./etc/passwd


Najděte soubor passwd pod rootem a o dvě úrovně níže. (tj. kořen – úroveň 1 a dva podadresáře – úroveň 2 a 3 )

# find / -maxdepth 3 -name passwd
./usr/bin/passwd
./etc/pam.d/passwd
./etc/passwd


Najděte soubor s hesly mezi podadresářem úrovně 2 a 4.

# find -mindepth 3 -maxdepth 5 -name passwd
./usr/bin/passwd
./etc/pam.d/passwd

4. Provádění příkazů na souborech nalezených příkazem Najít.

V níže uvedeném příkladu příkaz find vypočítá součet md5 všech souborů s názvem MyCProgram.c (bez ohledu na velikost písmen). {} je nahrazeno aktuálním názvem souboru.

# find -iname "MyCProgram.c" -exec md5sum {} \;
d41d8cd98f00b204e9800998ecf8427e  ./mycprogram.c
d41d8cd98f00b204e9800998ecf8427e  ./backup/mycprogram.c
d41d8cd98f00b204e9800998ecf8427e  ./backup/MyCProgram.c
d41d8cd98f00b204e9800998ecf8427e  ./MyCProgram.c

5. Invertování shody.

Zobrazuje soubory nebo adresáře, jejichž jméno není MyCProgram.c. Protože maxdepth je 1, bude to vypadat pouze v aktuálním adresáři.

# find -maxdepth 1 -not -iname "MyCProgram.c"
.
./MybashProgram.sh
./create_sample_files.sh
./backup
./Program.c

6. Hledání souborů podle čísla inodu.

Každý soubor má jedinečné číslo inodu, pomocí kterého můžeme tento soubor identifikovat. Vytvořte dva soubory s podobným názvem. tj. jeden soubor s mezerou na konci.

# touch "test-file-name"

# touch "test-file-name "
[Note: There is a space at the end]

# ls -1 test*
test-file-name
test-file-name


Z výstupu ls nemůžete určit, který soubor má mezeru na konci. Pomocí volby -i můžete zobrazit číslo inodu souboru, které se bude u těchto dvou souborů lišit.

# ls -i1 test*
16187429 test-file-name
16187430 test-file-name


V příkazu find můžete zadat číslo inodu, jak je uvedeno níže. V tomto příkladu příkaz find přejmenuje soubor pomocí čísla inodu.

# find -inum 16187430 -exec mv {} new-test-file-name \;

# ls -i1 *test*
16187430 new-test-file-name
16187429 test-file-name


Tuto techniku ​​můžete použít, když chcete provést nějakou operaci se soubory, které jsou pojmenovány špatně, jak je znázorněno v příkladu níže. Například soubor s názvem — soubor?.txt má v sobě speciální znak. Pokud se pokusíte spustit „rm file?.txt“, všechny následující tři soubory budou odstraněny. Postupujte podle níže uvedených kroků a odstraňte pouze soubor „file?.txt“.

# ls
file1.txt  file2.txt  file?.txt


Najděte čísla inodů každého souboru.

# ls -i1
804178 file1.txt
804179 file2.txt
804180 file?.txt


Pomocí čísla inodu odstraňte soubor, který měl speciální znak, jak je znázorněno níže.

# find -inum 804180 -exec rm {} \;

# ls
file1.txt  file2.txt
[Note: The file with name "file?.txt" is now removed]

7. Najděte soubor na základě oprávnění k souboru

Jsou možné následující operace.

  • Najděte soubory, které přesně odpovídají oprávněním
  • Zkontrolujte, zda se daná oprávnění shodují, bez ohledu na další bity oprávnění
  • Vyhledávejte pomocí osmičkové / symbolické reprezentace


Pro tento příklad předpokládejme, že adresář obsahuje následující soubory. Vezměte prosím na vědomí, že oprávnění k souborům u těchto souborů se liší.

# ls -l
total 0
-rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all
-rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read
---------- 1 root root 0 2009-02-19 20:31 no_for_all
-rw------- 1 root root 0 2009-02-19 20:29 ordinary_file
-rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read
----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read


Najděte soubory, které mají oprávnění ke čtení seskupit. Pomocí následujícího příkazu vyhledejte všechny soubory, které jsou čitelné světem ve vašem domovském adresáři, bez ohledu na jiná oprávnění pro daný soubor.

# find . -perm -g=r -type f -exec ls -l {} \;
-rw-r--r-- 1 root root 0 2009-02-19 20:30 ./everybody_read
-rwxrwxrwx 1 root root 0 2009-02-19 20:31 ./all_for_all
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read
-rw-r----- 1 root root 0 2009-02-19 20:27 ./others_can_also_read


Najděte soubory, které mají oprávnění pouze ke čtení pro skupinu.

# find . -perm g=r -type f -exec ls -l {} \;
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read


Najít soubory, které mají oprávnění pouze ke čtení seskupit [ hledat podle osmičkové soustavy ]

# find . -perm 040 -type f -exec ls -l {} \;
----r----- 1 root root 0 2009-02-19 20:27 ./others_can_only_read

8. Najděte všechny prázdné soubory (soubor s nulovým bajtem) ve svém domovském adresáři a jeho podadresáři

Většina souborů následujícího výstupu příkazu budou soubory zámků a zástupné symboly vytvořené jinými aplikacemi.

# find ~ -empty


Uveďte všechny prázdné soubory pouze ve vašem domovském adresáři.

# find . -maxdepth 1 -empty


Vypsat pouze neskryté prázdné soubory pouze v aktuálním adresáři.

# find . -maxdepth 1 -empty -not -name ".*"

9. Nalezení top 5 velkých souborů

Následující příkaz zobrazí prvních 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

10. Nalezení 5 nejlepších malých souborů

Technika je stejná jako hledání větších souborů, ale jediný rozdíl v řazení je vzestupné.

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


Ve výše uvedeném příkazu s největší pravděpodobností uvidíte pouze soubory ZERO byte ( prázdné soubory ). Můžete tedy použít následující příkaz k zobrazení seznamu menších souborů jiných než soubory ZERO bajtů.

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

11. Najít soubory podle typu souboru pomocí volby -type

Najděte pouze soubory soketu.

# find . -type s


Najít všechny adresáře

# find . -type d


Najít pouze normální soubory

# find . -type f


Najděte všechny skryté soubory

# find . -type f -name ".*"


Najděte všechny skryté adresáře

# find -type d -name ".*"

12. Najděte soubory porovnáním s dobou úpravy jiného souboru.

Zobrazit soubory, které jsou upraveny po zadaném souboru. Následující příkaz find zobrazí všechny soubory, které jsou vytvořeny/upraveny po obyčejný_soubor.

# ls -lrt
total 0
-rw-r----- 1 root root 0 2009-02-19 20:27 others_can_also_read
----r----- 1 root root 0 2009-02-19 20:27 others_can_only_read
-rw------- 1 root root 0 2009-02-19 20:29 ordinary_file
-rw-r--r-- 1 root root 0 2009-02-19 20:30 everybody_read
-rwxrwxrwx 1 root root 0 2009-02-19 20:31 all_for_all
---------- 1 root root 0 2009-02-19 20:31 no_for_all

# find -newer ordinary_file
.
./everybody_read
./all_for_all
./no_for_all

13. Najít soubory podle velikosti

Pomocí volby -size můžete najít soubory podle velikosti.

Najít soubory větší než daná velikost

# find ~ -size +100M


Najít soubory menší než daná velikost

# find ~ -size -100M


Najít soubory, které přesně odpovídají dané velikosti

# find ~ -size 100M


Poznámka:– znamená menší než daná velikost, + znamená více než danou velikost a žádný symbol neznamená přesně danou velikost.

14. Vytvořte alias pro operace častého hledání

Pokud vám nějaká věc přijde docela užitečná, můžete ji vytvořit jako alias. A spusťte jej, kdykoli budete chtít.


Často odstraňujte soubory s názvem a.out.

# alias rmao="find . -iname a.out -exec rm {} \;"
# rmao


Odstraňte základní soubory generované programem c.

# alias rmc="find . -iname core -exec rm {} \;"
# rmc

15. Odstraňte velké archivní soubory pomocí příkazu find

Následující příkaz odstraní soubory *.zip, které jsou větší než 100 milionů.

# find / -type f -name *.zip -size +100M -exec rm -i {} \;"

Odstraňte všechny soubory *.tar, které jsou větší než 100M, pomocí aliasu rm100m (Odebrat 100M). Použijte podobné koncepty a vytvořte alias jako rm1g, rm2g, rm5g pro odstranění velikosti souboru větší než 1G, 2G a 5G.

# alias rm100m="find / -type f -name *.tar -size +100M -exec rm -i {} \;"
# alias rm1g="find / -type f -name *.tar -size +1G -exec rm -i {} \;"
# alias rm2g="find / -type f -name *.tar -size +2G -exec rm -i {} \;"
# alias rm5g="find / -type f -name *.tar -size +5G -exec rm -i {} \;"

# rm100m
# rm1g
# rm2g
# rm5g

Najděte příklady příkazů Druhá část

Pokud se vám tento článek o mamince o příkazu find líbil, nezapomeňte se podívat na článek o příkazu find – tatínku, našel jsem to!, 15 úžasných příkladů příkazů hledání v Linuxu (část 2)

Úžasné články o Linuxu

Následuje několik úžasných 15 příkladů články, které by vám mohly pomoci.

  • 15 příkladů zvládnutí historie příkazového řádku Linuxu
  • Příkaz Unix LS:15 praktických příkladů
  • Ovládněte Grep! – 15 praktických příkladů příkazů Grep
  • Linux Crontab:15 úžasných příkladů úloh Cron

Linux
  1. cp Command v Linuxu:7 praktických příkladů

  2. Linux Shutdown Command:5 praktických příkladů

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

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

  2. 5 Praktické příklady příkazu dd v Linuxu

  3. 10 Praktické příklady příkazů Linux nm

  1. 16 Praktické příklady příkazu Linux LS pro začátečníky

  2. Linux Find Command s praktickými příklady

  3. 5 Praktické příklady příkazu „cd“ v Linuxu