GNU/Linux >> Belajar Linux >  >> Linux

Grep:Memori Habis?

Saya melakukan pencarian yang sangat sederhana:

grep -R Milledgeville ~/Documents

Dan setelah beberapa waktu kesalahan ini muncul:

grep: memory exhausted

Bagaimana saya bisa menghindari ini?

Saya memiliki 10GB RAM di sistem saya dan beberapa aplikasi berjalan, jadi saya sangat terkejut grep sederhana kehabisan memori. ~/Documents berukuran sekitar 100 GB dan berisi semua jenis file.

grep -RI mungkin tidak memiliki masalah ini, tetapi saya juga ingin mencari dalam file biner.

Jawaban yang Diterima:

Dua potensi masalah:

  • grep -R (kecuali untuk GNU grep . yang dimodifikasi ditemukan di OS/X 10.8 dan di atasnya) mengikuti symlink, jadi meskipun hanya ada 100GB file di ~/Documents , mungkin masih ada symlink ke / misalnya dan Anda akhirnya akan memindai seluruh sistem file termasuk file seperti /dev/zero . Gunakan grep -r dengan grep GNU yang lebih baru , atau gunakan sintaks standar:

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

    (namun perhatikan bahwa status keluar tidak akan mencerminkan fakta bahwa polanya cocok atau tidak).

  • grep menemukan garis yang cocok dengan pola. Untuk itu, ia harus memuat satu baris pada satu waktu di memori. GNU grep sebagai lawan dari banyak grep . lainnya implementasi tidak memiliki batasan ukuran baris yang dibacanya dan mendukung pencarian dalam file biner. Jadi, jika Anda memiliki file dengan garis yang sangat besar (yaitu, dengan jarak dua karakter baris baru yang sangat jauh), lebih besar dari memori yang tersedia, itu akan gagal.

    Itu biasanya akan terjadi dengan file yang jarang. Anda dapat mereproduksinya dengan:

    truncate -s200G some-file
    grep foo some-file
    

    Yang satu itu sulit untuk dikerjakan. Anda dapat melakukannya sebagai (masih dengan GNU grep ):

    temukan ~/Documents -type f -exec sh -c 'for i do tr -s "
    
Linux
  1. Pipa Ke Banyak File Di Shell?

  2. Bagaimana Menemukan Banyak String Dalam File??

  3. File .o vs file .a

  1. Bagaimana cara mencari konten dari banyak file pdf?

  2. Perintah Linux:Bagaimana cara 'menemukan' hanya file teks?

  3. Mencari string di banyak file di Linux

  1. Menggunakan file untuk IPC untuk memori bersama

  2. Menggunakan indeks untuk membuat grep lebih cepat?

  3. Grafik penggunaan memori proses di Linux