GNU/Linux >> Znalost Linux >  >> Linux

Tati, našel jsem to!, 15 úžasných příkladů příkazů hledání v Linuxu (část 2)

Před nedávnem jsme zkontrolovali 15 praktických příkladů příkazů find (část I). Příkaz Najít dokáže mnohem více než jen vyhledávat soubory podle názvu.
 
V tomto článku (část 2) probereme 15 pokročilých příkladů příkazu hledání včetně — vyhledání souborů na základě času, kdy byly zpřístupněny, upraveny nebo změněny, porovnání souborů, provádění operací s nalezenými soubory atd.,
 
Ramesh Natarajan: To je moje sladká dcera na tom obrázku. Byla velmi šťastná, že zahlédla lachtana v kalifornském Long Beach Aquarium.

Najít soubory na základě přístupu / úprav / času změny

Soubory můžete najít na základě následujících tří atributů času souboru.

  1. Čas přístupu souboru. Čas přístupu se aktualizuje při přístupu k souboru .
  2. Čas úpravy souboru. Čas úpravy se aktualizuje při změně obsahu souboru .
  3. Změnit čas souboru. Čas změny se aktualizuje, když se změní data inodu .

 
V následujících příkladech je rozdíl mezi možností min a možnost času je argument.

  • minimální argument považuje svůj argument za minuty . Například min 60 =60 minut (1 hodina).
  • časový argument považuje svůj argument za 24 hodin . Například čas 2 =2*24 hodin (2 dny).
  • Při výpočtu 24 hodin jsou zlomkové části ignorovány, takže 25 hodin se považuje za 24 hodin a 47 hodin se také považuje za 24 hodin, pouze 48 hodin se považuje za 48 hodin. Chcete-li získat větší přehlednost, podívejte se do části -atime příkazu find manuálová stránka.

Příklad 1:Najděte soubory, jejichž obsah byl aktualizován během poslední 1 hodiny

K vyhledání souborů na základě času úpravy obsahu se používá volba -mmin a -mtime. Následuje definice mmin a mtime z manuálové stránky.

  • -mmin n Data souboru byla naposledy upravena n minut před.
  • -mtime n Data souboru byla naposledy upravena n*24 hodin před.

 
Následující příklad najde soubory v aktuálním adresáři a podadresářích, jejichž obsah byl aktualizován během poslední 1 hodiny (60 minut)

# find . -mmin -60

 
Stejným způsobem následující příklad najde všechny soubory (v kořenovém systému souborů /), které byly aktualizovány za posledních 24 hodin (1 den).

# find / -mtime -1

Příklad 2:Najděte soubory, ke kterým byl přístup před 1 hodinou

K vyhledání souborů na základě času přístupu k souboru se používá volba -amin a -atime. Následuje definice amin a atime z manuálové stránky hledání.

  • -amin n Soubor byl naposledy otevřen n minut před
  • -atime n Soubor byl naposledy otevřen n*24 hodin před

 
Následující příklad najde soubory v aktuálním adresáři a podadresářích, ke kterým byl přístup za poslední 1 hodinu (60 minut)

# find -amin -60

 
Stejným způsobem následující příklad najde všechny soubory (v kořenovém systému souborů /), ke kterým byl přístup za posledních 24 hodin (1 den).

# find / -atime -1

Příklad 3:Najděte soubory, které byly změněny přesně před 1 hodinou

Chcete-li najít soubory na základě času změny inodu souboru, použije se volba -cmin a -ctime. Následuje definice cmin a ctime z manuálové stránky hledání.

  • -cmin n Stav souboru byl naposledy změněn n minut před.
  • -ctime n Stav souboru byl naposledy změněn n*24 hodin před.

 
Následující příklad najde soubory v aktuálním adresáři a podadresářích, které se změnily za poslední 1 hodinu (60 minut)

# find . -cmin -60

 
Stejným způsobem následující příklad najde všechny soubory (v kořenovém systému souborů /), které byly změněny za posledních 24 hodin (1 den).

# find / -ctime -1

Příklad 4:Omezení výstupu hledání pouze na soubory. (Zobrazit pouze soubory jako výsledky příkazu find)

Výše uvedený příkaz find také zobrazí adresáře, protože k adresářům se přistupuje, když se přistupuje k souboru uvnitř. Ale pokud chcete, aby se zobrazovaly pouze soubory, zadejte -type f v příkazu find jako
 
Následující příkaz hledání zobrazí soubory, ke kterým se přistupovalo za posledních 30 minut.

# find /etc/sysconfig -amin -30
.
./console
./network-scripts
./i18n
./rhn
./rhn/clientCaps.d
./networking
./networking/profiles
./networking/profiles/default
./networking/profiles/default/resolv.conf
./networking/profiles/default/hosts
./networking/devices
./apm-scripts
[Note: The above output contains both files and directories]

# find /etc/sysconfig -amin -30 -type f
./i18n
./networking/profiles/default/resolv.conf
./networking/profiles/default/hosts
[Note: The above output contains only files]

Příklad 5:Omezení vyhledávání pouze na neskryté soubory. (Nezobrazovat skryté soubory ve výstupu hledání)

Pokud nechceme, aby byly skryté soubory uvedeny ve výstupu hledání, můžeme použít následující regulární výraz.
Níže uvedené hledání zobrazuje soubory, které byly změněny za posledních 15 minut. A uvádí pouze neskryté soubory. tj. skryté soubory, které začínají příponou . (tečka) se ve výstupu hledání nezobrazují.

# find . -mmin -15 \( ! -regex ".*/\..*" \)

Poměrné vyhledání souborů pomocí příkazu Najít

Lidská mysl si může lépe pamatovat věci pomocí odkazu, například chci najít soubory, které jsem upravil po úpravě souboru „test“. Soubory můžete najít odkazem na úpravu ostatních souborů, jako je následující.

Příklad 6:Najděte soubory, které byly změněny po úpravě konkrétního SOUBORU

Syntax: find -newer FILE

 
Následující příklad zobrazuje všechny soubory, které byly změněny po úpravě souborů /etc/passwd. To je užitečné, pokud chcete sledovat všechny aktivity, které jste provedli po přidání nového uživatele.

# find -newer /etc/passwd

Příklad 7:Vyhledání souborů, ke kterým se přistupuje po úpravě konkrétního SOUBORU

Syntax: find -anewer FILE

 
Následující příklad zobrazuje všechny soubory, ke kterým se přistupuje po úpravě /etc/hosts. Pokud si pamatujete přidání položky do /etc/hosts a rádi byste viděli všechny soubory, ke kterým jste od té doby přistupovali, použijte následující příkaz.

# find -anewer /etc/hosts

Příklad 8:Najděte soubory, jejichž stav se změnil po úpravě konkrétního SOUBORU.

Syntax: find -cnewer FILE

 
Následující příklad zobrazuje všechny soubory, jejichž stav se změnil po úpravě /etc/fstab. Pokud si vzpomínáte na přidání přípojného bodu do /etc/fstab a rádi byste věděli o všech souborech, jejichž stav se od té doby změnil, použijte následující příkaz.

find -cnewer /etc/fstab

Proveďte jakoukoli operaci se soubory nalezenými z příkazu Najít

Podívali jsme se na mnoho různých způsobů hledání souborů pomocí příkazu najít v tomto článku a také v našem předchozím článku. Pokud nejste obeznámeni s hledáním souborů různými způsoby, důrazně vám doporučuji přečíst si část 1.
 
Tato část vysvětluje, jak provádět různé operace se soubory pomocí příkazu find. tj. jak manipulovat se soubory vrácenými výstupem příkazu find.
 
Můžeme zadat jakoukoli operaci se soubory nalezenými z příkazu find.

find <CONDITION to Find files> -exec <OPERATION> \;

 
OPERACE může být cokoliv jako:

  • příkaz rm k odstranění souborů nalezených příkazem find.
  • příkaz mv přejmenovat nalezené soubory.
  • příkaz ls -l získat podrobnosti o výstupních souborech příkazu find.
  • součet md5 na výstupní soubory příkazu find
  • příkaz wc spočítat celkový počet slov ve výstupních souborech příkazu find.
  • Spusťte jakýkoli příkaz prostředí Unix na výstupní soubory příkazu find.
  • nebo spusťte svůj vlastní vlastní skript prostředí / příkaz při hledání výstupních souborů příkazu.

Příklad 9:ls -l ve výstupu příkazu find. Dlouhý seznam souborů, které byly upraveny za poslední 1 hodinu.

# find -mmin -60
./cron
./secure

# find -mmin -60 -exec ls -l {} \;
-rw-------  1 root root 1028 Jun 21 15:01 ./cron
-rw-------  1 root root 831752 Jun 21 15:42 ./secure

Příklad 10:Vyhledávání pouze v aktuálním systému souborů

Správci systému by chtěli hledat v kořenovém systému souborů, ale ne v ostatních připojených oddílech. Když máte připojeno více oddílů a chcete hledat v /. Můžete provést následující.
 
Následující příkaz vyhledá soubory *.log počínaje /. tj. Pokud máte více oddílů připojených pod / (root), následující příkaz prohledá všechny tyto připojené oddíly.

# find / -name "*.log"

 
Toto vyhledá soubor pouze v aktuálním systému souborů. Následuje definice xdev z manuálové stránky hledání:

  • -xdev Nesestupujte adresáře na jiných souborových systémech.

 
Následující příkaz vyhledá soubory *.log počínaje / (root) a pouze v aktuálním systému souborů. tj. Pokud máte více oddílů připojených pod / (root), následující příkaz NEBUDE prohledávat všechny tyto připojené oddíly.

# find / -xdev -name "*.log"

Příklad 11:Použití více než jednoho { } ve stejném příkazu

Manuál říká, že je možná pouze jedna instance {}. Ale můžete použít více než jeden {} ve stejném příkazu, jak je uvedeno níže.

# find -name "*.txt" cp {} {}.bkup \;

 
Použití tohoto {} ve stejném příkazu je možné, ale jeho použití v jiném příkazu to možné není, řekněme, že chcete přejmenovat soubory následovně, což nepřinese očekávaný výsledek.

find -name "*.txt" -exec mv {} `basename {} .htm`.html \;

Příklad 12:Použití { } ve více než jednom případě.

Můžete to simulovat napsáním skriptu shellu, jak je znázorněno níže.

# mv "$1" "`basename "$1" .htm`.html"

 
Tyto dvojité uvozovky slouží k manipulaci s mezerami v názvu souboru. A pak zavolejte tento skript shell z příkazu find jak je uvedeno níže.

find -name "*.html" -exec ./mv.sh '{}' \;

Takže z jakéhokoli důvodu, pokud chcete, aby bylo stejné jméno souboru použito více než jednou, pak je nejjednodušší napsat jednoduchý shell skript a předat názvy souborů jako argumenty.

Příklad 13:Chyby přesměrování do /dev/null

Přesměrování chyb není dobrý postup. Zkušený uživatel chápe, jak je důležité vytisknout chybu na terminál a opravit ji.
 
Zejména v příkazu find není přesměrování chyb dobrým zvykem. Pokud ale nechcete vidět chyby a chtěli byste jej přesměrovat na null, udělejte to, jak je uvedeno níže.

find -name "*.txt" 2>>/dev/null

 
Někdy to může být užitečné. Pokud se například pokoušíte najít všechny soubory *.conf pod / (root) ze svého účtu, může se zobrazit mnoho chybové zprávy „Povolení odepřeno“, jak je uvedeno níže.

$ find / -name "*.conf"
/sbin/generate-modprobe.conf
find: /tmp/orbit-root: Permission denied
find: /tmp/ssh-gccBMp5019: Permission denied
find: /tmp/keyring-5iqiGo: Permission denied
find: /var/log/httpd: Permission denied
find: /var/log/ppp: Permission denied
/boot/grub/grub.conf
find: /var/log/audit: Permission denied
find: /var/log/squid: Permission denied
find: /var/log/samba: Permission denied
find: /var/cache/alchemist/printconf.rpm/wm: Permission denied
[Note: There are two valid *.conf files burned in the "Permission denied" messages]

 
Pokud tedy chcete pouze zobrazit skutečný výstup příkazu find a nikoli chybovou zprávu „Oprávnění odepřeno“, můžete chybovou zprávu přesměrovat do /dev/null, jak je uvedeno níže.

$ find / -name "*.conf" 2>>/dev/null
/sbin/generate-modprobe.conf
/boot/grub/grub.conf
[Note: All the "Permission denied" messages are not displayed]

Příklad 14:Nahraďte mezeru podtržítkem v názvu souboru.

Zvukové soubory stažené z internetu většinou obsahují mezery. Ale mít mezeru v názvu souboru není tak dobré pro systémy typu Linux. K přejmenování souborů můžete použít kombinaci příkazů find a rename, jak je uvedeno níže, nahrazením mezery podtržítkem.
 
Následující nahrazuje mezeru ve všech souborech *.mp3 znakem _

$ find . -type f -iname “*.mp3″ -exec rename “s/ /_/g” {} \;

Příklad 15:Provedení dvou příkazů hledání současně

Jak je ukázáno v příkladech příkazu find na jeho manuálové stránce, následuje syntaxe, kterou lze použít ke spuštění dvou příkazů v jednom průchodu.
 
Následující příklad příkazu find, projde souborovým systémem pouze jednou, vypíše soubory setuid a adresáře do /root/suid.txt a velké soubory do /root/big.txt.

# find /    \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
 \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)

Našich dalších 15 ukázkových článků

  • 15 praktických příkladů příkazů Unix Find – část 1
  • 15 praktických příkladů příkazů Linux Grep
  • Ovládněte historii příkazového řádku systému Unix s 15 příklady
  • Manipulujte se zvukovými soubory pomocí 15 příkladů úžasných příkazů Sox (Sound eXchange)
  • 15 pokročilých příkladů příkazů PostgreSQL
  • 15 vynikajících triků, tipů a triků pro vyhledávání Google
  • 15 pokročilých příkladů PostgreSQL DBA
  • 15 příkladů praktických použití příkazů Mysqladmin
  • 15 skvělých příkladů úloh Linux Cron

 
Pokud se potřebujete vrátit, uložte si tuto stránku do záložek na adrese del.icio.us pro praktickou referenci.


Linux
  1. 5 nástrojů příkazového řádku pro rychlé vyhledání souborů v systému Linux

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

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

  1. Praktické příklady příkazu rsync v Linuxu

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

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

  1. 20 úžasných příkladů příkazů Nmap v Linuxu

  2. Najít příkaz v Linuxu (Najít soubory a adresáře)

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