Sì, puoi grep /dev/sda1e /procprobabilmente 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 /procma 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/sda1come 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 /devpossono 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/randome /dev/urandomsono anche infiniti. Il comando grep something /dev/randomverrà eseguito per sempre a meno che non grepvenga segnalato l'arresto.
Può essere utile grep /dev/urandomdurante 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, headchiude 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' -ropzione, 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' -Ropzione 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, grepoffre una funzione limitata per impedire a grep di cercare determinati file o directory. Ad esempio, è possibile escludere tutte le directory nome proc, syse devdalla ricerca ricorsiva di grep con:
grep --exclude-dir proc --exclude-dir sys --exclude-dir dev -r something /
In alternativa, si può escludere proc, syse devutilizzando gocce estese di bash:
shopt -s extglob
grep -r something /!(proc|sys|dev)
grepcerca un file/procche porta alla memoria mappata, potrebbe accadere chegrepcolpisca un EOF all'interno della memoria (casuale) e interpreti i seguenti dati come un nuovo nome file da cercare? Ho iniziato a leggere ilgrepcodice sorgente, ma suppongo che non vedrò troppo in esso.