GNU/Linux >> Linux Esercitazione >  >> Linux

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

Tempo fa abbiamo esaminato 15 esempi pratici di comando trova (Parte I). Il comando Trova può fare molto di più della semplice ricerca di file in base al nome.
 
In questo articolo (parte 2), discutiamo 15 esempi avanzati di trova comando incluso — trovare i file in base all'ora in cui si accede, si modifica o si cambia, trovare i file in modo comparativo, eseguire operazioni sui file trovati ecc.,
 
Ramesh Natarajan: Quella è la mia dolce figlioletta in quella foto. È stata molto felice di avvistare il leone marino nel California Long Beach Aquarium.

Trova file in base al tempo di accesso/modifica/cambiamento

Puoi trovare i file in base ai seguenti tre attributi di tempo del file.

  1. Tempo di accesso del file. Il tempo di accesso viene aggiornato quando si accede al file .
  2. Tempo di modifica del file. Il tempo di modifica viene aggiornato quando il contenuto del file viene modificato .
  3. Cambiare l'ora del file. Il tempo di modifica viene aggiornato quando i dati inode cambiano .

 
Nei seguenti esempi, la differenza tra l'opzione min e l'opzione dell'ora è l'argomento.

  • argomento minimo tratta la sua argomentazione come minuti . Ad esempio, min 60 =60 minuti (1 ora).
  • argomento del tempo tratta il suo argomento come 24 ore . Ad esempio, tempo 2 =2*24 ore (2 giorni).
  • Durante il calcolo delle 24 ore, le parti frazionarie vengono ignorate, quindi 25 ore vengono considerate 24 ore e anche 47 ore vengono considerate 24 ore, solo 48 ore vengono considerate 48 ore. Per maggiore chiarezza, fai riferimento alla sezione -atime del comando trova pagina man.

Esempio 1:trova i file il cui contenuto è stato aggiornato nell'ultima ora

Per trovare i file in base all'ora di modifica del contenuto, viene utilizzata l'opzione -mmin e -mtime. Di seguito è riportata la definizione di mmin e mtime dalla pagina man.

  • -mmn n I dati del file sono stati modificati per l'ultima volta n minuti fa.
  • -mtime n I dati del file sono stati modificati l'ultima volta n*24 ore fa.

 
Il seguente esempio troverà i file nella directory e nelle sottodirectory correnti, il cui contenuto è stato aggiornato nell'ultima ora (60 minuti)

# find . -mmin -60

 
Allo stesso modo, l'esempio seguente trova tutti i file (sotto il file system root /) che sono stati aggiornati nelle ultime 24 ore (1 giorno).

# find / -mtime -1

Esempio 2:trova i file a cui è stato effettuato l'accesso prima di 1 ora

Per trovare i file in base al tempo di accesso al file, viene utilizzata l'opzione -amin e -atime. Di seguito è riportata la definizione di amin e atime dalla pagina man di trova.

  • -amin n Ultimo accesso al file n minuti fa
  • -atime n Ultimo accesso al file n*24 ore fa

 
Il seguente esempio troverà i file nella directory e nelle sottodirectory correnti, a cui è stato effettuato l'accesso nell'ultima ora (60 minuti)

# find -amin -60

 
Allo stesso modo, l'esempio seguente trova tutti i file (sotto il file system root /) a cui è stato effettuato l'accesso nelle ultime 24 ore (1 giorno).

# find / -atime -1

Esempio 3:trova i file che sono stati modificati esattamente prima di 1 ora

Per trovare i file in base al tempo di modifica dell'inode del file, viene utilizzata l'opzione -cmin e -ctime. Di seguito è riportata la definizione di cmin e ctime dalla pagina man di trova.

  • -cmin n Lo stato del file è stato modificato per l'ultima volta n minuti fa.
  • -ctime n Lo stato del file è stato modificato l'ultima volta n*24 ore fa.

 
Il seguente esempio troverà i file nella directory e nelle sottodirectory correnti, che sono cambiate nell'ultima ora (60 minuti)

# find . -cmin -60

 
Allo stesso modo, l'esempio seguente trova tutti i file (sotto il file system root /) che sono stati modificati nelle ultime 24 ore (1 giorno).

# find / -ctime -1

Esempio 4:limitazione dell'output di ricerca solo ai file. (Visualizza solo i file come risultati del comando di ricerca)

I comandi di ricerca precedenti mostreranno anche le directory perché le directory vengono accedute quando si accede al file al suo interno. Ma se vuoi che vengano visualizzati solo i file, dai -digita f nel comando trova come
 
Il seguente comando trova mostra i file a cui si è effettuato l'accesso negli ultimi 30 minuti.

# 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]

Esempio 5:limitazione della ricerca solo ai file non nascosti. (Non visualizzare i file nascosti nell'output di ricerca)

Quando non vogliamo che i file nascosti siano elencati nell'output di ricerca, possiamo usare la seguente espressione regolare.
La ricerca di seguito mostra i file che sono stati modificati negli ultimi 15 minuti. Ed elenca solo i file non nascosti. cioè file nascosti che iniziano con un . (punto) non vengono visualizzati nell'output di ricerca.

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

Trovare file in modo comparativo utilizzando il comando Trova

La mente umana può ricordare meglio le cose per riferimento, ad esempio, voglio trovare i file che ho modificato dopo aver modificato il file "test". Puoi trovare i file facendo riferimento alle altre modifiche ai file come di seguito.

Esempio 6:Trova i file che vengono modificati dopo la modifica di un particolare FILE

Syntax: find -newer FILE

 
L'esempio seguente mostra tutti i file che sono stati modificati dopo la modifica dei file /etc/passwd. Questo è utile se vuoi tenere traccia di tutte le attività che hai svolto dopo aver aggiunto un nuovo utente.

# find -newer /etc/passwd

Esempio 7:trova i file a cui si accede dopo la modifica di un FILE specifico

Syntax: find -anewer FILE

 
Il seguente esempio mostra tutti i file a cui si accede dopo aver modificato /etc/hosts. Se ricordi di aver aggiunto una voce a /etc/hosts e vorresti vedere tutti i file a cui hai avuto accesso da allora, usa il comando seguente.

# find -anewer /etc/hosts

Esempio 8:trova i file il cui stato è stato modificato dopo la modifica di un FILE specifico.

Syntax: find -cnewer FILE

 
L'esempio seguente mostra tutti i file il cui stato è stato modificato dopo aver modificato il file /etc/fstab. Se ricordi di aver aggiunto un punto di montaggio in /etc/fstab e desideri conoscere tutti i file il cui stato è stato modificato da allora, usa il comando seguente.

find -cnewer /etc/fstab

Esegui qualsiasi operazione sui file trovati dal comando Trova

Abbiamo esaminato molti modi diversi per trovare i file utilizzando il comando trova in questo articolo e anche nel nostro precedente articolo. Se non hai dimestichezza con la ricerca di file in diversi modi, ti consiglio vivamente di leggere la parte 1.
 
Questa sezione spiega come eseguire diverse operazioni sui file dal comando trova. cioè come manipolare i file restituiti dall'output del comando find.
 
Possiamo specificare qualsiasi operazione sui file trovati dal comando trova.

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

 
L'OPERAZIONE può essere qualsiasi cosa come:

  • comando rm per rimuovere i file trovati dal comando trova.
  • comando mv per rinominare i file trovati.
  • Comando ls -l per ottenere i dettagli dei file di output del comando trova.
  • md5sum su trova i file di output del comando
  • comando wc per contare il numero totale di parole sui file di output del comando trova.
  • Esegui qualsiasi comando della shell Unix sui file di output del comando trova.
  • o esegui il tuo script di shell personalizzato / comando su trova i file di output del comando.

Esempio 9:ls -l nell'output del comando trova. Elenca i file che sono stati modificati nell'ultima ora.

# 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

Esempio 10:ricerca solo nel filesystem corrente

Gli amministratori di sistema vorrebbero cercare nel file system radice, ma non nelle altre partizioni montate. Quando hai più partizioni montate e se vuoi cercare in /. Puoi fare quanto segue.
 
Il comando seguente cercherà i file *.log a partire da /. cioè se hai più partizioni montate sotto / (root), il seguente comando cercherà tutte quelle partizioni montate.

# find / -name "*.log"

 
Questo cercherà il file solo nel file system corrente. Di seguito è riportata la definizione di xdev dalla pagina man di trova:

  • -xdev Non scendere nelle directory su altri filesystem.

 
Il comando seguente cercherà i file *.log a partire da / (root) e solo nel file system corrente. cioè se hai più partizioni montate sotto / (root), il seguente comando NON cercherà tutte quelle partizioni montate.

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

Esempio 11:utilizzo di più di un { } nello stesso comando

Il manuale dice che è possibile solo un'istanza di {}. Ma puoi usare più di un {} nello stesso comando come mostrato di seguito.

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

 
È possibile utilizzare questo {} nello stesso comando ma non utilizzarlo in un comando diverso, supponiamo di voler rinominare i file come segue, il che non darà il risultato previsto.

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

Esempio 12:utilizzo di { } in più di un'istanza.

Puoi simularlo scrivendo uno script di shell come mostrato di seguito.

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

 
Queste doppie virgolette servono a gestire gli spazi nel nome del file. E poi chiama quello script di shell dal comando trova come mostrato di seguito.

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

Quindi, per qualsiasi motivo, se vuoi che lo stesso nome di file venga utilizzato più di una volta, scrivere il semplice script di shell e passare i nomi dei file come argomento è il modo più semplice per farlo.

Esempio 13:reindirizzamento degli errori a /dev/null

Reindirizzare gli errori non è una buona pratica. Un utente esperto comprende l'importanza di stampare l'errore sul terminale e risolverlo.
 
In particolare nel comando find, reindirizzare gli errori non è una buona pratica. Ma se non vuoi vedere gli errori e desideri reindirizzarlo a null, fallo come mostrato di seguito.

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

 
A volte questo può essere utile. Ad esempio, se stai cercando di trovare tutto il file *.conf sotto / (root) dal tuo account, potresti ricevere molti messaggi di errore "Autorizzazione negata" come mostrato di seguito.

$ 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]

 
Quindi, se vuoi solo visualizzare l'output reale del comando trova e non il messaggio di errore "Autorizzazione negata" puoi reindirizzare il messaggio di errore a /dev/null come mostrato di seguito.

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

Esempio 14:sostituisci lo spazio con un trattino basso nel nome del file.

I file audio che scarichi da Internet vengono per lo più con gli spazi al suo interno. Ma avere spazio nel nome del file non è così buono per i sistemi di tipo Linux. Puoi utilizzare la combinazione di comandi trova e rinomina come mostrato di seguito per rinominare i file, sostituendo lo spazio con il trattino basso.
 
Quanto segue sostituisce lo spazio in tutti i file *.mp3 con _

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

Esempio 15:esecuzione di due comandi di ricerca contemporaneamente

Come mostrato negli esempi del comando find nella sua pagina di manuale, la seguente è la sintassi che può essere utilizzata per eseguire due comandi in un unico attraversamento.
 
Il seguente esempio di comando find, attraversa il filesystem solo una volta, elencando i file e le directory setuid in /root/suid.txt e i file di grandi dimensioni in /root/big.txt.

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

I nostri altri 15 articoli di serie di esempio

  • 15 Esempi pratici di comando Trova Unix – Parte 1
  • 15 Esempi pratici di comandi Grep per Linux
  • Cronologia della riga di comando di Unix master con 15 esempi
  • Manipolare i file audio utilizzando 15 fantastici esempi di comandi Sox (Sound eXchange)
  • 15 Esempi di comandi PostgreSQL avanzati
  • 15 eccellenti trucchi, suggerimenti e trucchi per la ricerca di Google
  • 15 Esempi di DBA PostgreSQL avanzati
  • 15 Esempi pratici di utilizzo di Mysqladmin
  • 15 fantastici esempi di lavoro Cron su Linux

 
Se devi tornare, aggiungi questa pagina ai segnalibri su del.icio.us per un pratico riferimento.


Linux
  1. 5 strumenti da riga di comando per trovare rapidamente file in Linux

  2. 25 Utili comandi find Esempi pratici in Linux

  3. Utilizzo del comando trova Linux:utilizzo con esempi

  4. Esempi pratici di comando rsync in Linux

  5. 25 semplici esempi di comando trova Linux

lsof Command in Linux (10 esempi)

Come trovare file con il comando fd in Linux

Tutorial comando trova Linux (con esempi)

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

lsof Command in Linux con esempi

Comando di comunicazione Linux con esempi