Suponiendo que se debe usar la herramienta grep, me gustaría buscar la cadena de texto "800x600" en todo el sistema de archivos.
Lo intenté:
grep -r 800x600 /
Pero no funciona.
Lo que creo que mi comando debería hacer es grep recursivamente a través de todos los archivos / carpetas en la raíz para el texto "800x600" y enumerar los resultados de la búsqueda.
¿Qué estoy haciendo mal?

Permission deniederrores? ¿Lo ejecutaste como root o como un usuario normal?grep -r 800x600 / 2>/dev/null. También puedes intentar ejecutarlo como root.Respuestas:
Normalmente uso este estilo de comando para ejecutar
grepvarios archivos:Lo que esto realmente hace es hacer una lista de cada archivo en el sistema, y luego para cada archivo, ejecutar
grepcon los argumentos dados y el nombre de cada archivo.El
-xdevargumento dice encontrar que debe ignorar otros sistemas de archivos; esto es bueno para evitar sistemas de archivos especiales como/proc. Sin embargo, también ignorará los sistemas de archivos normales, por lo que si, por ejemplo, su carpeta / home está en una partición diferente, no se buscará, debería decirfind / /home -xdev ....-type fsignifica buscar solo archivos, por lo que se ignoran los directorios, dispositivos y otros archivos especiales (aún se repetirá en los directorios y se ejecutarágrepen los archivos internos; simplemente no se ejecutarágrepen el directorio en sí, lo que no funcionaría de todos modos). Y la-Hopcióngreple dice que siempre imprima el nombre del archivo en su salida.findacepta todo tipo de opciones para filtrar la lista de archivos. Por ejemplo,-name '*.txt'procesa solo archivos que terminan en .txt.-size -2Msignifica archivos que son más pequeños que 2 megabytes.-mtime -5significa archivos modificados en los últimos cinco días. Une estos con -a for y y -o for or , y usa'('paréntesis')'para agrupar expresiones (entre comillas para evitar que el shell las interprete). Así por ejemplo:Echa un vistazo
man findpara ver la lista completa de posibles filtros.fuente
-xdevexcluirá todos los demás sistemas de archivos, no solo los especiales. (por ejemplo, si ha/homemontado como una partición separada, no se buscará).find: paths must precede expression: /xargscon tal vez una mejor eficiencia al hacerlofind / -xdev -type f -exec grep -H '800x600' +.+signo al final delfindcomando en realidad hace lo mismo quexargs: genera ungrepproceso con varios argumentos.Normalmente no querrás buscar TODO en el sistema. Linux utiliza nodos de archivo para todo, por lo que algunos "archivos" no son cosas que desea buscar. Por ejemplo,
/dev/sdaes el dispositivo de bloque físico para su primer disco duro. Probablemente desee buscar en los sistemas de archivos montados, no en el dispositivo de disco sin formato. También existe la/dev/randomque escupe datos aleatorios cada vez que los lee. Buscar eso no tiene mucho sentido. El/procsistema de archivos también es problemático en su caso.Recomendaría una de dos cosas.
No busque en la raíz, solo busque los lugares que podrían ser útiles. Buscar
/homeo/usro/etcseparadamente. La información que está buscando es probable que sea de un tipo específico, por lo que es probable que esté en una carpeta específica de todos modos. Los ajustes de configuración deben estar en/etc. Sus archivos de datos personales deben estar en/home. Limitar la búsqueda a un área importante como esta reducirá en gran medida sus problemas con greps recursivos.Excluya el uso de áreas problemáticas
--exclude-diry un conjunto de cosas que sabe que no necesita de esta manera:grep -r --exclude-dir /proc --exclude-dir /dev --exclude-dir /tmp --exclude-dir /lost+foundPor último, no es raro encontrarse con algunos errores de "permiso denegado" cuando se hace una gran grep recursiva. En el curso normal de uso, hay archivos que su usuario no podrá leer. Siempre que estos sean solo algunos archivos extraños y no cosas como el dispositivo sin formato para sus discos duros o todo el sistema de archivos de proceso, está bien simplemente ignorar los errores. De hecho, puede hacer esto en la línea de comando enviando todos los errores a nunca nunca aterrizar:
fuente
-Ipara excluir binarioPor simplicidad, sugeriría ack-grep . El enlace muestra muchos casos cuando
ack-grepes una mejor opción.Para usar es, después de la instalación:
fuente
Otra forma de verlo es de esta manera:
fuente
* entonces obtengo un / proc / sysrq-trigger: error de entrada / salida
Su comando está funcionando, está recibiendo este error porque está tratando de escanear procesos en ejecución en busca de una cadena.
Recomiendo excluir directorios del sistema con
grep -exclude-dir = {proc, sys} "800x600" /
fuente
simplemente correcto
-Lo que está mal en su comando actual son las comillas, "". Siempre ponga el argumento de cadena
grepentre comillas.fuente
grep. Pruébalo y verás. Coloque la cadena "800x600" en un archivo y luegogrep 800x600 fileverá que funciona bien. El OP obviamente tiene otro problema.