GNU/Linux >> Linux Esercitazione >  >> Linux

Grep:Memoria esaurita?

Stavo facendo una ricerca molto semplice:

grep -R Milledgeville ~/Documents

E dopo qualche tempo è apparso questo errore:

grep: memory exhausted

Come posso evitarlo?

Ho 10 GB di RAM sul mio sistema e poche applicazioni in esecuzione, quindi sono davvero sorpreso che un semplice grep esaurisca la memoria. ~/Documents è di circa 100 GB e contiene tutti i tipi di file.

grep -RI potrebbe non avere questo problema, ma voglio cercare anche nei file binari.

Risposta accettata:

Due potenziali problemi:

  • grep -R (tranne per GNU grep modificato trovato su OS/X 10.8 e versioni successive) segue i collegamenti simbolici, quindi anche se ci sono solo 100 GB di file in ~/Documents , potrebbe esserci ancora un collegamento simbolico a / per esempio e finirai per scansionare l'intero file system inclusi file come /dev/zero . Usa grep -r con il nuovo GNU grep oppure usa la sintassi standard:

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

    (tuttavia, tieni presente che lo stato di uscita non rifletterà il fatto che il modello sia abbinato o meno).

  • grep trova le linee che corrispondono al modello. Per questo, deve caricare una riga alla volta in memoria. GNU grep al contrario di molti altri grep le implementazioni non hanno un limite alla dimensione delle righe che legge e supporta la ricerca nei file binari. Quindi, se hai un file con una riga molto grande (cioè con due caratteri di nuova riga molto distanti tra loro), più grande della memoria disponibile, fallirà.

    Ciò accadrebbe in genere con un file sparso. Puoi riprodurlo con:

    truncate -s200G some-file
    grep foo some-file
    

    Quello è difficile da aggirare. Potresti farlo come (sempre con GNU grep ):

    find ~/Documents -type f -exec sh -c 'for i do tr -s "
    
Linux
  1. Come Grep nei file Pdf?

  2. Grep Word all'interno di un file, quindi copia il file?

  3. Pipe a più file nella shell?

  4. Come trovare più stringhe nei file??

  5. File .o vs file .a

Grep Command in Linux (Trova testo nei file)

Come eseguire la ricerca del modello nei file utilizzando Grep

Trova testo nei file su Linux usando grep

Come eseguire la ricerca Grep su tutti i file e in tutte le directory

Trovare file eseguibili usando ls e grep

Utilizzo di file per IPC di memoria condivisa