Sì, puoi grep
/dev/sda1
e /proc
probabilmente non vorrai. Più in dettaglio:
Sì, puoi eseguire grep i contenuti binari di /dev/sda1
. Tuttavia, con i moderni dischi rigidi di grandi dimensioni, ciò richiederà molto tempo e il risultato non sarà probabilmente utile.
Sì, puoi grep il contenuto di /proc
ma tieni presente che la memoria del tuo computer è mappata lì come file. Su un computer moderno con gigabyte di RAM, ci vorrà molto tempo per eseguire il grep e, di nuovo, è probabile che il risultato non sia utile.
In via eccezionale, se si stanno cercando dati su un disco rigido con un file system danneggiato, è possibile eseguire grep something /dev/sda1
come parte di un tentativo di recupero dei dati del file.
Altri file problematici in /dev
I dischi rigidi e le partizioni del disco rigido sottostanti /dev
possono essere, se uno ha abbastanza pazienza, grepped. Altri file (cappello: user2313067 ), tuttavia, possono causare problemi:
/dev/zero
è un file di lunghezza infinita. Fortunatamente, grep
(almeno la versione GNU) è abbastanza intelligente da saltare:
$ grep something /dev/zero
grep: input is too large to count
/dev/random
e /dev/urandom
sono anche infiniti. Il comando grep something /dev/random
verrà eseguito per sempre a meno che non grep
venga segnalato l'arresto.
Può essere utile grep /dev/urandom
durante la generazione di password. Per ottenere, ad esempio, cinque caratteri alfanumerici casuali:
$ grep --text -o '[[:alnum:]]' /dev/urandom | head -c 10
G
4
n
X
2
Questo non è infinito perché, dopo aver ricevuto abbastanza caratteri, head
chiude la pipe facendo terminare grep.
Anelli infiniti
"... collegamenti ... creano cicli infiniti quando vengono attraversati ..."
Grep (almeno la versione GNU) è abbastanza intelligente da non farlo. Consideriamo due casi:
Con l' -r
opzione, grep non segue i collegamenti simbolici a meno che non siano esplicitamente specificati sulla riga di comando. Quindi non sono possibili loop infiniti.
Con l' -R
opzione grep fa seguire i link simbolici ma li controlla e si rifiuta di rimanere intrappolati in un ciclo. Illustrare:
$ mkdir a
$ ln -s ../ a/b
$ grep -R something .
grep: warning: ./a/b: recursive directory loop
Escludendo directory problematiche da grep -r
A parte questo, grep
offre una funzione limitata per impedire a grep di cercare determinati file o directory. Ad esempio, è possibile escludere tutte le directory nome proc
, sys
e dev
dalla ricerca ricorsiva di grep con:
grep --exclude-dir proc --exclude-dir sys --exclude-dir dev -r something /
In alternativa, si può escludere proc
, sys
e dev
utilizzando gocce estese di bash:
shopt -s extglob
grep -r something /!(proc|sys|dev)
grep
cerca un file/proc
che porta alla memoria mappata, potrebbe accadere chegrep
colpisca un EOF all'interno della memoria (casuale) e interpreti i seguenti dati come un nuovo nome file da cercare? Ho iniziato a leggere ilgrep
codice sorgente, ma suppongo che non vedrò troppo in esso.