GNU/Linux >> Tutoriels Linux >  >> Linux

Grep :Mémoire épuisée ?

Je faisais une recherche très simple :

grep -R Milledgeville ~/Documents

Et après un certain temps, cette erreur est apparue :

grep: memory exhausted

Comment puis-je éviter cela ?

J'ai 10 Go de RAM sur mon système et peu d'applications en cours d'exécution, donc je suis vraiment surpris qu'un simple grep manque de mémoire. ~/Documents est d'environ 100 Go et contient toutes sortes de fichiers.

grep -RI peut-être pas ce problème, mais je veux aussi chercher dans les fichiers binaires.

Réponse acceptée :

Deux problèmes potentiels :

  • grep -R (sauf pour le GNU modifié grep trouvé sur OS/X 10.8 et supérieur) suit les liens symboliques, donc même s'il n'y a que 100 Go de fichiers dans ~/Documents , il peut toujours y avoir un lien symbolique vers / par exemple et vous finirez par analyser l'ensemble du système de fichiers, y compris des fichiers comme /dev/zero . Utilisez grep -r avec le nouveau GNU grep , ou utilisez la syntaxe standard :

    find ~/Documents -type f -exec grep Milledgeville /dev/null {} +
    

    (notez cependant que le statut de sortie ne reflétera pas le fait que le modèle corresponde ou non).

  • grep trouve les lignes qui correspondent au motif. Pour cela, il doit charger une ligne à la fois en mémoire. GNU grep contrairement à beaucoup d'autres grep implémentations n'a pas de limite sur la taille des lignes qu'il lit et prend en charge la recherche dans les fichiers binaires. Donc, si vous avez un fichier avec une très grosse ligne (c'est-à-dire avec deux caractères de retour à la ligne très éloignés), plus grand que la mémoire disponible, il échouera.

    Cela se produirait généralement avec un fichier fragmenté. Vous pouvez le reproduire avec :

    truncate -s200G some-file
    grep foo some-file
    

    Celui-là est difficile à contourner. Vous pouvez le faire comme (toujours avec GNU grep ):

    find ~/Documents -type f -exec sh -c 'for i do tr -s "
    
Linux
  1. Comment utiliser la commande Grep pour rechercher du texte dans des fichiers

  2. Grep Word dans un fichier puis copier le fichier ?

  3. Canaliser vers plusieurs fichiers dans le shell ?

  4. fichiers gzippés wc?

  5. Recherche d'une chaîne dans plusieurs fichiers sous Linux

Commande Grep sous Linux (Rechercher du texte dans des fichiers)

Comment effectuer une recherche de modèle dans les fichiers à l'aide de Grep

Rechercher du texte dans des fichiers sous Linux à l'aide de grep

Comment effectuer une recherche Grep sur tous les fichiers et dans tous les répertoires

Recherche de fichiers exécutables à l'aide de ls et grep

Utiliser un index pour accélérer grep ?