हाँ, आप कर सकते हैं grep
/dev/sda1
और /proc
आप शायद नहीं चाहते हैं। विस्तृत रूप में:
हाँ, आप बाइनरी सामग्री को चला सकते हैं /dev/sda1
। लेकिन, आधुनिक बड़ी हार्ड डिस्क के साथ, इसमें बहुत लंबा समय लगेगा और परिणाम उपयोगी होने की संभावना नहीं है।
हां, आप सामग्री को प्राप्त कर सकते हैं /proc
लेकिन इस बात से अवगत रहें कि आपके कंप्यूटर की मेमोरी वहां फाइलों के रूप में मैप की गई है। गीगाबाइट्स RAM के साथ एक आधुनिक कंप्यूटर पर, यह grep में एक लंबा समय लेगा और, फिर से, परिणाम उपयोगी होने की संभावना नहीं है।
अपवाद के रूप में, यदि आप एक क्षतिग्रस्त फ़ाइल सिस्टम के साथ हार्ड डिस्क पर डेटा की तलाश कर रहे हैं, तो आप grep something /dev/sda1
फ़ाइल के डेटा को पुनर्प्राप्त करने के प्रयास के भाग के रूप में चला सकते हैं ।
में अन्य समस्याग्रस्त फाइलें /dev
हार्ड डिस्क और हार्ड डिस्क विभाजन के तहत किया /dev
जा सकता है, अगर किसी के पास पर्याप्त धैर्य है, तो पकड़ लिया। अन्य फाइलें (हैट टिप: user2313067 ), हालांकि, समस्याएँ पैदा कर सकती हैं:
/dev/zero
अनंत लंबाई की एक फ़ाइल है। सौभाग्य से, grep
(कम से कम GNU संस्करण) इसे छोड़ने के लिए पर्याप्त स्मार्ट है:
$ grep something /dev/zero
grep: input is too large to count
/dev/random
और /dev/urandom
अनंत भी हैं। grep something /dev/random
जब तक grep
रुकने का संकेत नहीं दिया जाता तब तक कमांड हमेशा के लिए चलेगा ।
/dev/urandom
पासवर्ड जनरेट करते समय यह उपयोगी हो सकता है । उदाहरण के लिए, पाँच यादृच्छिक वर्णमाला वर्ण:
$ grep --text -o '[[:alnum:]]' /dev/urandom | head -c 10
G
4
n
X
2
यह अनंत नहीं है, क्योंकि इसमें पर्याप्त वर्ण प्राप्त करने के बाद, head
पाइप को बंद कर देता है जिससे ग्रीप समाप्त हो जाता है।
अनंत छोरों
"... लिंक ... ट्रैवर्स किए जाने पर अनंत लूप बनाते हैं ..."
Grep (कम से कम GNU संस्करण) ऐसा नहीं करने के लिए पर्याप्त स्मार्ट है। आइए दो मामलों पर विचार करें:
-r
विकल्प के साथ , grep प्रतीकात्मक लिंक का पालन नहीं करता है जब तक कि वे स्पष्ट रूप से कमांड लाइन पर निर्दिष्ट नहीं होते हैं। इसलिए, अनंत लूप संभव नहीं हैं।
-R
विकल्प के साथ , grep प्रतीकात्मक लिंक का पालन करता है , लेकिन यह उन्हें जाँचता है और लूप में पकड़े जाने से मना करता है। उदाहरण देकर स्पष्ट करने के लिए:
$ mkdir a
$ ln -s ../ a/b
$ grep -R something .
grep: warning: ./a/b: recursive directory loop
से समस्याग्रस्त निर्देशिकाओं को छोड़कर grep -r
एक तरफ के रूप में, grep
कुछ फ़ाइलों या निर्देशिकाओं की खोज से grep को रोकने के लिए एक सीमित सुविधा प्रदान करता है। उदाहरण के लिए, आप निकाल सकते हैं सभी निर्देशिकाओं नामित proc
, sys
और dev
साथ ग्रेप की पुनरावर्ती खोज से:
grep --exclude-dir proc --exclude-dir sys --exclude-dir dev -r something /
वैकल्पिक रूप से, हम बाहर कर सकते हैं proc
, sys
और dev
पार्टी के विस्तारित globs का उपयोग कर:
shopt -s extglob
grep -r something /!(proc|sys|dev)
grep
फ़ाइल को खोजा जाता/proc
है जिसमें मैप की गई मेमोरी होती है, तो क्या ऐसा हो सकता है किgrep
(यादृच्छिक) मेमोरी के अंदर ईओएफ हिट हो , और निम्न डेटा को एक के रूप में व्याख्या करता है खोज करने के लिए नया नाम? मैंनेgrep
सोर्स कोड पढ़ना शुरू कर दिया है , लेकिन मुझे लगता है कि मैं इसमें बहुत ज्यादा नहीं देखूंगा।