GNU/Linux >> Linux Esercitazione >  >> Linux

Mamma, l'ho trovato! — 15 Esempi pratici di comandi Trova Linux


Foto per gentile concessione di Qole Pejorian

Oltre all'operazione di base di ricerca di file in una struttura di directory, puoi anche eseguire diverse operazioni pratiche utilizzando il comando trova che renderà facile il tuo viaggio dalla riga di comando.

In questo articolo, esaminiamo 15 esempi pratici di comando trova Linux che saranno molto utili sia per i principianti che per gli esperti.


Per prima cosa, crea i seguenti file vuoti di esempio nella tua home directory per provare alcuni degli esempi di comando find menzionati di seguito.

# 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. Trova i file usando il nome

Questo è un utilizzo di base del comando trova. Questo esempio trova tutti i file con nome — MyCProgram.c nella directory corrente e tutte le sue sottodirectory.

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

2. Trova i file usando il nome e ignorando maiuscole e minuscole

Questo è un utilizzo di base del comando trova. Questo esempio trova tutti i file con nome — MyCProgram.c (ignorando il caso) nella directory corrente e in tutte le sue sottodirectory.

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

3. Limita la ricerca a un livello di directory specifico utilizzando mindepth e maxdepth

Trova il file passwd in tutte le sottodirectory a partire dalla directory principale.

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


Trova il file passwd sotto root e un livello sotto. (vale a dire root — livello 1 e una sottodirectory — livello 2)

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


Trova il file passwd sotto root e due livelli sotto. (vale a dire root — livello 1 e due sottodirectory — livello 2 e 3)

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


Trova il file della password tra le sottodirectory di livello 2 e 4.

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

4. Esecuzione di comandi sui file trovati dal comando Trova.

Nell'esempio seguente, il comando find calcola la somma md5 di tutti i file con il nome MyCProgram.c (ignorando maiuscole e minuscole). {} viene sostituito dal nome del file corrente.

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

5. Invertire la partita.

Mostra i file o le directory il cui nome non è MyCProgram.c .Dato che maxdepth è 1, apparirà solo nella directory corrente.

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

6. Trovare i file in base al suo numero di inode.

Ogni file ha un numero di inode univoco, grazie al quale possiamo identificare quel file. Crea due file con nome simile. cioè un file con uno spazio alla fine.

# 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


Dall'output di ls, non è possibile identificare quale file ha lo spazio alla fine. Usando l'opzione -i, puoi visualizzare il numero di inode del file, che sarà diverso per questi due file.

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


Puoi specificare il numero di inode su un comando di ricerca come mostrato di seguito. In questo esempio, il comando find rinomina un file utilizzando il numero di inode.

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

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


Puoi usare questa tecnica quando vuoi fare qualche operazione con i file che sono nominati male come mostrato nell'esempio sotto. Ad esempio, il file con nome — file?.txt contiene un carattere speciale. Se si tenta di eseguire "rm file?.txt", tutti e tre i file seguenti verranno rimossi. Quindi, segui i passaggi seguenti per eliminare solo il file "file?.txt".

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


Trova i numeri di inode di ogni file.

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


Utilizza il numero di inode per rimuovere il file che conteneva un carattere speciale come mostrato di seguito.

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

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

7. Trova il file in base alle autorizzazioni del file

Sono possibili le seguenti operazioni.

  • Trova i file che corrispondono esattamente all'autorizzazione
  • Verifica se l'autorizzazione fornita corrisponde, indipendentemente da altri bit di autorizzazione
  • Cerca dando una rappresentazione ottale/simbolica


Per questo esempio, supponiamo che la directory contenga i seguenti file. Tieni presente che i permessi dei file su questi file sono diversi.

# 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


Trova i file che hanno l'autorizzazione di lettura per raggruppare. Usa il comando seguente per trovare tutti i file leggibili da tutto il mondo nella tua home directory, indipendentemente dalle altre autorizzazioni per quel file.

# 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


Trova i file che hanno l'autorizzazione di lettura solo per il gruppo.

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


Trova i file che hanno l'autorizzazione di lettura solo per raggruppare [ ricerca per ottale ]

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

8. Trova tutti i file vuoti (file a zero byte) nella tua home directory e nella sua sottodirectory

La maggior parte dei file dell'output del comando seguente saranno file di blocco e segnaposto creati da altre applicazioni.

# find ~ -empty


Elenca tutti i file vuoti solo nella tua home directory.

# find . -maxdepth 1 -empty


Elenca solo i file vuoti non nascosti solo nella directory corrente.

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

9. Trovare i 5 migliori file di grandi dimensioni

Il comando seguente visualizzerà i primi 5 file più grandi nella directory corrente e nella sua sottodirectory. L'esecuzione dell'operazione potrebbe richiedere del tempo a seconda del numero totale di file che il comando deve elaborare.

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

10. Trovare i primi 5 piccoli file

La tecnica è la stessa di trovare i file più grandi, ma l'unica differenza è l'ordine crescente.

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


Nel comando precedente, molto probabilmente vedrai solo i file ZERO byte (file vuoti). Quindi, puoi usare il seguente comando per elencare i file più piccoli diversi dai file ZERO byte.

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

11. Trova file in base al tipo di file usando l'opzione -type

Trova solo i file socket.

# find . -type s


Trova tutte le directory

# find . -type d


Trova solo i file normali

# find . -type f


Trova tutti i file nascosti

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


Trova tutte le directory nascoste

# find -type d -name ".*"

12. Trova i file confrontandoli con l'ora di modifica di un altro file.

Mostra i file che vengono modificati dopo il file specificato. Il seguente comando trova mostra tutti i file creati/modificati dopo file_ordinario.

# 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. Trova i file per dimensione

Usando l'opzione -size puoi trovare i file per dimensione.

Trova file più grandi della dimensione indicata

# find ~ -size +100M


Trova file più piccoli della dimensione indicata

# find ~ -size -100M


Trova i file che corrispondono alla dimensione specificata

# find ~ -size 100M


Nota:– significa meno della dimensione indicata, + significa più della dimensione indicata e nessun simbolo indica la dimensione esatta data.

14. Crea alias per le operazioni di ricerca frequenti

Se trovi qualcosa di abbastanza utile, puoi farlo come alias. Ed eseguilo quando vuoi.


Rimuovi frequentemente i file denominati a.out.

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


Rimuovi i file core generati dal programma c.

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

15. Rimuovi i file di archivio di grandi dimensioni utilizzando il comando trova

Il comando seguente rimuove i file *.zip che superano i 100 milioni.

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

Rimuovere tutti i file *.tar che superano i 100 M utilizzando l'alias rm100m (Rimuovi 100 M). Usa concetti simili e crea alias come rm1g, rm2g, rm5g per rimuovere file di dimensioni maggiori rispettivamente di 1G, 2G e 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

Trova esempi di comandi seconda parte

Se ti è piaciuto questo articolo di mamma sul comando trova, non dimenticare di dare un'occhiata all'articolo di papà del comando trova - Papà, l'ho trovato!, 15 fantastici esempi di comandi Trova Linux (parte 2)

Fantastici articoli su Linux

Di seguito sono riportati alcuni fantastici 15 esempi articoli che potresti trovare utili.

  • 15 esempi per padroneggiare la cronologia della riga di comando di Linux
  • Comando Unix LS:15 esempi pratici
  • Fai una presa sul Grep! – 15 Esempi pratici di comandi Grep
  • Linux Crontab:15 fantastici esempi di Cron Job

Linux
  1. 25 Utili comandi find Esempi pratici in Linux

  2. Comando cp in Linux:7 esempi pratici

  3. Comando di arresto di Linux:5 esempi pratici

  4. 10 esempi pratici di comandi Linux nm

  5. trova Esempi di comandi in Linux

I 50 esempi pratici del comando SED in Linux

15 esempi pratici di comando Rsync in Linux

5 esempi pratici di Tail Command in Linux

echo Command in Linux:7 esempi pratici

Pratico comando Ping negli esempi di Linux

Papà, l'ho trovato!, 15 fantastici esempi di comandi Trova Linux (Parte 2)