ver tamaño que por para ordenar ocupan mas listar grandes formato fecha extendido espacio duro disco directorios creacion comando buscar archivos antiguos bash grep

bash - tamaño - que archivos ocupan mas espacio en mi disco duro linux



¿Expandir un archivo enorme(80 GB) de alguna manera para acelerarlo? (5)

grep -i -A 5 -B 5 ''db_pd.Clients'' eightygigsfile.sql

Esto ha estado funcionando durante una hora en un servidor linux bastante poderoso que de lo contrario no está sobrecargado. ¿Alguna alternativa a grep? ¿Algo sobre mi sintaxis que se pueda mejorar, (por ejemplo, refregar, fgurar mejor?)

El archivo está realmente en un directorio que se comparte con un montaje en otro servidor, pero el espacio de disco real es local, por lo que no debería haber ninguna diferencia.

el grep está capturando hasta un 93% de CPU


Alguna mejora trivial:

  • Quite la opción -i, si puede, la distinción entre mayúsculas y minúsculas es bastante lenta.

  • Reemplace el . por /.

    Un solo punto es el símbolo de la expresión regular para que coincida con cualquier carácter, que también es lento


Aquí hay algunas opciones:

1) Prefijo el comando grep con LC_ALL=C para usar la configuración regional C en lugar de UTF-8.

2) Use fgrep porque está buscando una cadena fija, no una expresión regular.

3) Elimine la opción -i , si no la necesita.

Entonces tu comando se convierte en:

LC_ALL=C fgrep -A 5 -B 5 ''db_pd.Clients'' eightygigsfile.sql

También será más rápido si copia su archivo en el disco RAM.


Dos líneas de ataque:

  • ¿Estás seguro, necesitas el -i , o tienes la posibilidad de deshacerte de él?
  • ¿Tienes más núcleos para jugar? grep tiene un único subproceso, por lo que es posible que desee iniciar más de ellos en diferentes desplazamientos.

Si tienes una CPU multinúcleo, realmente recomendaría GNU paralelo . Para grep un archivo grande en uso paralelo:

< eightygigsfile.sql parallel --pipe grep -i -C 5 ''db_pd.Clients''

Dependiendo de sus discos y CPU, puede ser más rápido leer bloques más grandes:

< eightygigsfile.sql parallel --pipe --block 10M grep -i -C 5 ''db_pd.Clients''

No está del todo claro por tu pregunta, pero otras opciones para grep incluyen:

  • Soltando la bandera -i .
  • Usando el indicador -F para una cadena fija
  • Desactivando NLS con LANG=C
  • Establecer un número máximo de coincidencias con el indicador -m .

< eightygigsfile.sql parallel -k -j120% -n10 -m grep -F -i -C 5 ''db_pd.Clients''

Si necesita buscar varias cadenas, grep -f strings.txt ahorra mucho tiempo. Lo anterior es una traducción de algo que estoy probando actualmente. el valor de la opción -j y -n pareció funcionar mejor para mi caso de uso. El -F grep también hizo una gran diferencia.