Sí, puedes grep
/dev/sda1
y /proc
probablemente no quieras. Con más detalle:
Sí, puede ejecutar grep el contenido binario de /dev/sda1
. Pero, con los discos duros grandes modernos, esto llevará mucho tiempo y es probable que el resultado no sea útil.
Sí, puede manipular el contenido, /proc
pero tenga en cuenta que la memoria de su computadora está asignada allí como archivos. En una computadora moderna con gigabytes de RAM, esto llevará mucho tiempo y, nuevamente, el resultado probablemente no sea útil.
Como excepción, si está buscando datos en un disco duro con un sistema de archivos dañado, puede ejecutarlo grep something /dev/sda1
como parte de un intento de recuperar los datos del archivo.
Otros archivos problemáticos en /dev
Los discos duros y las particiones del disco duro debajo /dev
pueden, si uno tiene suficiente paciencia, agrietarse. Otros archivos (hat hat: user2313067 ), sin embargo, pueden causar problemas:
/dev/zero
es un archivo de longitud infinita. Afortunadamente, grep
(al menos la versión GNU) es lo suficientemente inteligente como para omitirla:
$ grep something /dev/zero
grep: input is too large to count
/dev/random
y /dev/urandom
también son infinitos. El comando grep something /dev/random
se ejecutará para siempre a menos que grep
se indique que se detenga.
Puede ser útil para grep /dev/urandom
al generar contraseñas. Para obtener, por ejemplo, cinco caracteres alfanuméricos aleatorios:
$ grep --text -o '[[:alnum:]]' /dev/urandom | head -c 10
G
4
n
X
2
Esto no es infinito porque, después de haber recibido suficientes caracteres, head
cierra la tubería haciendo que grep termine.
Bucles infinitos
"... los enlaces ... crean bucles infinitos cuando se atraviesan ..."
Grep (al menos la versión GNU) es lo suficientemente inteligente como para no hacer eso. Consideremos dos casos:
Con la -r
opción, grep no sigue enlaces simbólicos a menos que se especifiquen explícitamente en la línea de comando. Por lo tanto, los bucles infinitos no son posibles.
Con la -R
opción, grep hace seguir enlaces simbólicos sino que los cheques y se niega a quedar atrapado en un bucle. Para ilustrar:
$ mkdir a
$ ln -s ../ a/b
$ grep -R something .
grep: warning: ./a/b: recursive directory loop
Excluyendo directorios problemáticos de grep -r
Por otro lado, grep
proporciona una facilidad limitada para evitar que grep busque ciertos archivos o directorios. Por ejemplo, puede excluir todos los directorios nombrados proc
, sys
y dev
de búsqueda recursiva de grep con:
grep --exclude-dir proc --exclude-dir sys --exclude-dir dev -r something /
Alternativamente, podemos excluir proc
, sys
y dev
el uso de globos largos de bash:
shopt -s extglob
grep -r something /!(proc|sys|dev)
grep
busca un archivo/proc
que conduce a la memoria asignada, ¿podría suceder quegrep
golpee un EOF dentro de la memoria (aleatoria) e interprete los siguientes datos como un nuevo nombre de archivo para buscar? Empecé a leer elgrep
código fuente, pero supongo que no veré demasiado en él./dev
probable que el grepping nunca termine cuando grep comienza a escanear/dev/zero
o similar. No estoy seguro si tales archivos existen en/proc
o/sys
./dev/zero
, buscará/dev/random
para siempre a menos que se detenga. Respuesta actualizada