हाँ, आप कर सकते हैं 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सोर्स कोड पढ़ना शुरू कर दिया है , लेकिन मुझे लगता है कि मैं इसमें बहुत ज्यादा नहीं देखूंगा।