लिनक्स में फाइंड एंड ग्रेप कमांड का उचित उपयोग

यूनिक्स-सिस्टम के अधिकांश नौसिखिए उपयोगकर्ता, विशेष रूप से लिनक्स में, इस ओएस में उपयोग किए जाने वाले मूल कमांड लाइन ऑपरेटरों से परिचित नहीं हैं। आइए खोज और grep ऑपरेटरों के कार्यों और उपयोग पर करीब से नज़र डालें।

लिनक्स में फाइंड एंड ग्रेप कमांड का उपयोग करना।

FIND

लिनक्स खोज कमांड फाइल पदानुक्रम को ट्रेस करने के लिए एक कमांड लाइन उपयोगिता है। इसका उपयोग फ़ाइलों और निर्देशिकाओं को खोजने और उनके साथ बाद में संचालन करने के लिए किया जा सकता है। यह फ़ाइल, फ़ोल्डर, नाम, निर्माण तिथि, परिवर्तन तिथि, स्वामी और अनुमतियों द्वारा खोज का समर्थन करता है। -Exec का उपयोग करके, अन्य UNIX कमांड को मिली फाइलों या फ़ोल्डरों के लिए निष्पादित किया जा सकता है। वाक्य रचना:

$ खोज [जहां खोज शुरू करने के लिए] [अभिव्यक्ति यह निर्धारित करती है कि क्या ढूंढना है] [-वितरण] [क्या खोजना है]

विकल्प:

  • -exec - आवश्यक फ़ाइल जो उपरोक्त मानदंडों को पूरा करती है और सफल कमांड निष्पादन के लिए एक निकास राज्य के रूप में 0 लौटाती है;
  • -ओक - वैसा ही काम करता है, जैसे - इसके अलावा, उपयोगकर्ता को पहले संकेत दिया जाता है;
  • -inum N - संख्या "N" के साथ खोजें;
  • -Links N - लिंक "N" के साथ खोजें;
  • -नाम डेमो - "डेमो" में निर्दिष्ट फ़ाइलों के लिए खोज;
  • -newer फ़ाइल - "फ़ाइल" के बाद संशोधित / बनाई गई फ़ाइलों के लिए खोज;
  • -स्पर्म ऑक्टल - खोज यदि रिज़ॉल्यूशन ऑक्टल है;
  • -प्रिंट - अन्य मानदंडों का उपयोग करके पाए गए दस्तावेज़ों को पथ दिखाएं;
  • - खाली - खाली दस्तावेजों और निर्देशिकाओं के लिए खोज;
  • -साइज़ + एन /-एन - खोज ब्लॉक "एन"; "एन" और "सी" का उपयोग पात्रों में आकार को मापने के लिए किया जा सकता है; "+ N" का अर्थ है "N" ब्लॉक का एक बड़ा आकार, और "-N" का अर्थ है "N" ब्लॉक का एक छोटा आकार;
  • -user नाम - उपयोगकर्ता नाम या पहचानकर्ता "नाम" से संबंधित दस्तावेजों की खोज करें;
  • \ (expr \) - सच है अगर "expr" सच है; OR या AND के संयोजन में समूह मानदंड के लिए उपयोग किया जाता है।

ग्रेप

Grep कमांड का इस्तेमाल फाइलों को सर्च करने के लिए किया जाता है। फ़ंक्शन "नियमित अभिव्यक्ति की वैश्विक छपाई" के लिए खड़ा है और लिनक्स में सबसे शक्तिशाली और अक्सर उपयोग किए जाने वाले आदेशों में से एक है। कमांड एक या एक से अधिक इनपुट फ़ाइलों की खोज करती है जो निर्दिष्ट पैटर्न से मेल खाती है, और प्रत्येक संबंधित लाइन को मानक आउटपुट में लिखती है। यदि कोई फाइल निर्दिष्ट नहीं है, तो कमांड मानक इनपुट से पढ़ता है, जो आमतौर पर किसी अन्य कमांड का आउटपुट होता है। इस लेख में, हम आपको दिखाएंगे कि कमांड कैसे दर्ज करें, व्यावहारिक उदाहरण और सबसे सामान्य GNU grep विकल्पों की विस्तृत व्याख्या के साथ।

कमांड सिंटैक्स

इससे पहले कि हम कमांड का उपयोग करना शुरू करें, आइए बुनियादी सिंटैक्स की समीक्षा करके शुरू करें। उपयोगिता के भावों के निम्नलिखित रूप हैं:

[विकल्प] पत्र [फ़ाइल ...]

वर्ग कोष्ठक में आइटम वैकल्पिक हैं।

  • विकल्प - शून्य या अधिक विकल्प। टीम कई विकल्प प्रदान करती है जो उसके व्यवहार को नियंत्रित करते हैं।
  • पैटर्न - खोज पैटर्न।
  • फ़ाइल - शून्य या अधिक इनपुट फ़ाइल नाम।

फ़ाइलों को खोजने के लिए एक कमांड कैसे दर्ज करें

कमांड का मुख्य उद्देश्य फाइल में टेक्स्ट की खोज करना है। उदाहरण के लिए, bash लाइन वाले / etc / passwd फ़ाइल से प्रदर्शित करने के लिए, आप निम्न कमांड का उपयोग कर सकते हैं:

$ grep बैश / etc / passwd

आउटपुट कुछ इस तरह दिखना चाहिए:

रूट 0: 0: रूट: / रूट: / बिन / बैश

domain1000: 1000: डोमेन: / होम / डोमेन: / बिन / बैश

यदि स्ट्रिंग में स्थान हैं, तो आपको इसे एकल या दोहरे उद्धरणों में संलग्न करना होगा:

$ "सूक्ति प्रदर्शन प्रबंधक" / आदि / पासवार्ड

इनवर्ट मैच (पूर्व)

पैटर्न से मेल नहीं खाने वाली रेखाओं को प्रदर्शित करने के लिए –v (या -इनवर्ट-मैच) पैरामीटर दर्ज करें। उदाहरण के लिए, उस फ़ाइल को प्रदर्शित करने के लिए, जिसमें / etc / passwd फ़ाइल से nologin नहीं है, आप निम्न कमांड दर्ज कर सकते हैं:

$ -v nologin / etc / passwd

आउटपुट:

रूट 0: 0: रूट: / रूट: / बिन / बैश

colord 124: 124 :: / var / lib / colord: / बिन / गलत

git 994: 994: git डेमॉन उपयोगकर्ता: /: / usr / bin / git-shell

linuxize 1000: 1000: linuxize: / home / linuxize: / bin / bash

आउटपुट में खोज करने के लिए कमांड का उपयोग कैसे करें

इसके बजाय, यदि आप इनपुट फ़ाइलों को निर्दिष्ट करते हैं, तो आप किसी अन्य कमांड के आउटपुट को रीडायरेक्ट कर सकते हैं, और फिर केवल उन पंक्तियों को प्रदर्शित कर सकते हैं जो निर्दिष्ट पैटर्न से मेल खाती हैं। उदाहरण के लिए, यह जानने के लिए कि आपके सिस्टम में www-data उपयोगकर्ता के रूप में कौन सी प्रक्रियाएं चल रही हैं, आप निम्न कमांड का उपयोग कर सकते हैं:

$ ps -ef | www-डेटा

आउटपुट:

www-data 18247 12675 4 16:00? 00:00:00 php-fpm: पूल www

रूट 18272 17714 0 16:00 पीटीएस / 0 00:00:00 -कलर = ऑटो - बहिष्कृत- dir = .bzr-exclude-dir = CVS -exclude-dir = .It -exclude-dir = .hg-exclude-dir। = .सावन www-data

www-data 31147 12770 0 Oct22? 00:05:51 नगीनक्स: कार्यकर्ता प्रक्रिया

www-data 31148 12770 0 Oct22? 00:00:00 नगीनक्स: कैश मैनेजर प्रक्रिया

आप एक टीम में कई चैनल जोड़ सकते हैं। जैसा कि आप ऊपर दिए गए आउटपुट में देख सकते हैं, एक लाइन भी है जिसमें प्रक्रिया है। यदि आप नहीं चाहते कि यह रेखा प्रदर्शित हो, तो आउटपुट को दूसरे उदाहरण पर भेजें, जैसा कि नीचे दिखाया गया है।

$ ps -ef | www-डेटा | grep -v grep

आउटपुट:

www-data 18247 12675 4 16:00? 00:00:00 php-fpm: पूल www

रूट 18272 17714 0 16:00 पीटीएस / 0 00:00:00 -कलर = ऑटो - बहिष्कृत- dir = .bzr-exclude-dir = CVS -exclude-dir = .It -exclude-dir = .hg-exclude-dir। = .सावन www-data

www-data 31147 12770 0 Oct22? 00:05:51 नगीनक्स: कार्यकर्ता प्रक्रिया

www-data 31148 12770 0 Oct22? 00:00:00 नगीनक्स: कैश मैनेजर प्रक्रिया

पुनरावर्ती खोज

पैटर्न के लिए पुन: खोज करने के लिए, -r (या -recursive) विकल्प दर्ज करें। यह आपको निर्दिष्ट निर्देशिका में सभी फ़ाइलों के माध्यम से खोज करने की अनुमति देगा, जो प्रतीकात्मक लिंक को लंघन करता है जो पुनरावर्ती होता है। सभी प्रतीकात्मक लिंक के माध्यम से जाने के लिए, (-dereference- पुनरावर्ती) विकल्प का उपयोग करें। निम्नलिखित उदाहरण में, हम / etc निर्देशिका के अंदर सभी फ़ाइलों में domain.com की तलाश कर रहे हैं:

$ -r domain.com / etc

कमांड पूर्ण फ़ाइल पथ उपसर्ग के साथ संबंधित फ़ील्ड प्रिंट करेगा।

/etc/hosts:127.0.0.1 node2.domain.com /etc/nginx/sites-available/domain.com: server_name domain.com www.domain.com;

यदि आप के बजाय –R विकल्प का उपयोग करते हैं, तो कमांड सभी प्रतीकात्मक लिंक का अनुसरण करेगा:

$ -R domain.com / etc

अंतिम आउटपुट फ़ील्ड पर ध्यान दें। यह ऊपर दिए गए उदाहरण में मुद्रित नहीं किया गया है, क्योंकि साइट-सक्षम Nginx निर्देशिका में फ़ाइलें साइट-उपलब्ध निर्देशिका के अंदर कॉन्फ़िगरेशन फ़ाइलों के प्रतीकात्मक लिंक हैं।

आउटपुट:

/etc/hosts:127.0.0.1 node2.domain.com

/etc/nginx/sites-available/domain.com: server_name domain.com www.domain.com;

/etc/nginx/sites-enabled/domain.com: server_name domain.com www.domain.com;

केवल फ़ाइल नाम दिखाएं

डिफ़ॉल्ट आउटपुट को दबाने के लिए और केवल मिलान किए गए पैटर्न वाली फ़ाइलों के नाम प्रिंट करने के लिए, आप –l (या -फाइल्स-विद-मैच) विकल्प दर्ज कर सकते हैं। उदाहरण के लिए, वर्तमान कार्य निर्देशिका में .conf में समाप्त होने वाली सभी फ़ाइलों की खोज करने के लिए, और domain.com युक्त केवल फ़ाइल नाम मुद्रित करने के लिए, टाइप करें:

$ –L domain.com * .conf

आउटपुट कुछ इस तरह दिखाई देगा:

tmux.conf

haproxy.conf

-L विकल्प आमतौर पर पुनरावर्ती -R विकल्प के साथ संयोजन में उपयोग किया जाता है:

$ -Rl domain.com / tmp

केस असंवेदनशीलता

डिफ़ॉल्ट रूप से, कमांड केस संवेदी होता है, जिसका अर्थ है कि अपरकेस और लोअरकेस वर्णों को अलग-अलग माना जाता है। खोज करते समय मामले को अनदेखा करने के लिए –i (या -ignore-case) विकल्प दर्ज करें। उदाहरण के लिए, यदि आप बिना किसी विकल्प के ज़ेबरा खोजते हैं, तो निम्न कमांड कोई आउटपुट प्रदर्शित नहीं करेगा, अर्थात। मेल खा रहे हैं।

$ ज़ेबरा / यूएसआर / शेयर / शब्द

लेकिन अगर आप केस-असंवेदनशील खोज करते हैं, तो –i विकल्प का उपयोग करें, यह ऊपरी और निचले दोनों केस लेटर्स से मेल खाएगा:

$ grep -i ज़ेबरा / usr / शेयर / शब्द

संकेत "ज़ेबरा" "ज़ेबरा", "ज़ेब्रा" या अपरकेस और लोअरकेस अक्षरों के किसी भी अन्य संयोजन के अनुरूप होगा।

आउटपुट:

ज़ेबरा

ज़ेबरा की

जेब्रा

सटीक मैच

खोज करते समय, ग्नू में ग्नू भी छपेगा, जिसमें बड़े शब्द डाले जाते हैं, जैसे कि साइग्नस या मैग्नम।

$ गन्नू / usr / शेयर / शब्द

आउटपुट:

सिग्नस

बैल की आकृति का बारहसिद्धान्त

दो राजाए के भीतर समय

lgnu9d

Lignum

मैग्नम

मेग्नुसन

दलदल में उगनेवाली एक प्रकारए की सेवार

wingnut

केवल उन अभिव्यक्तियों को वापस करने के लिए जिनमें निर्दिष्ट फ़ील्ड एक पूरा शब्द है (शब्दों में संलग्न नहीं है), आप –w विकल्प (या-regexp) का उपयोग कर सकते हैं।

महत्वपूर्ण। शब्द के वर्णों में अल्फ़ान्यूमेरिक वर्ण (az, AZ और 0-9) और अंडरस्कोर (_) शामिल हैं। अन्य सभी पात्रों को गैर-मौखिक वर्ण माना जाता है।

यदि आप -w ऑप्शन सहित उपरोक्त कमांड को चलाते हैं, तो कमांड केवल उन्हीं को लौटाएगा जिसमें एक अलग शब्द के रूप में ग्नू शामिल है।

$ grep -w gnu / usr / शेयर / शब्द

आउटपुट: गन्नू

नंबर दिखाएं

पैटर्न वाली लाइनों की संख्या दिखाने के लिए, –n (या –line- नंबर) पैरामीटर का उपयोग करें। इस विकल्प का उपयोग करके उस नंबर के उपसर्ग के साथ मानक आउटपुट से मेल खाएगा, जिसमें यह पाया गया था। उदाहरण के लिए, संबंधित नंबर के साथ bash उपसर्ग युक्त / etc / सेवाओं फ़ाइल से प्रदर्शित करने के लिए, आप निम्न आदेश का उपयोग कर सकते हैं:

$ grep -n 10000 / etc / सेवाएं

नीचे दिए गए आउटपुट से पता चलता है कि मैच 10423 और 10424 पर हैं।

आउटपुट:

10423: ndmp 10, 000 / tcp

10424: ndmp 10000 / udp

गिनती

मानक आउटपुट के लिए मिलान लाइनों की संख्या प्रिंट करने के लिए, -c (या -count) पैरामीटर का उपयोग करें। नीचे दिए गए उदाहरण में, हम उन खातों की संख्या की गणना करते हैं जिनमें शेल / यूएसआर / बिन / जेडश है।

$ grep -c '/ usr / bin / zsh' / etc / passwd

आउटपुट: ४

कई लाइनें (पैटर्न)

OR ऑपरेटर दो या अधिक खोज पैटर्नों को जोड़ सकता है | डिफ़ॉल्ट रूप से, कमांड मुख्य नियमित अभिव्यक्ति के रूप में पैटर्न की व्याख्या करता है, जिसमें मेटाचैकर्स अपना विशेष अर्थ खो देते हैं, और बैकस्लैश वाले उनके संस्करणों का उपयोग किया जाना चाहिए। नीचे दिए गए उदाहरण में, हम Nginx त्रुटि लॉग फ़ाइल में घातक, त्रुटि और महत्वपूर्ण सभी घटनाओं की खोज करते हैं:

$ grep 'घातक \ ​​_ त्रुटि \ _ | महत्वपूर्ण' /var/log/nginx/error.log

यदि आप विस्तारित नियमित अभिव्यक्ति विकल्प का उपयोग करते हैं - ई (या -रिगेड-रेगेक्सपी), तो कथन से बचना नहीं चाहिए, जैसा कि नीचे दिखाया गया है:

$ grep -E 'घातक | त्रुटि | आलोचनात्मक' /var/log/nginx/error.log

नियमित अभिव्यक्ति

GNU Grep के नियमित अभिव्यक्ति कार्यों के दो सेट हैं - मूल और विस्तारित। डिफ़ॉल्ट रूप से, फ़ंक्शन एक नियमित रेगुलर एक्सप्रेशन के रूप में पैटर्न की व्याख्या करता है, एक्सटेंडेड रेगुलर एक्सप्रेशंस पर स्विच करने के लिए, आपको –E विकल्प का उपयोग करना होगा। मुख्य मोड में नियमित अभिव्यक्ति का उपयोग करते समय, मेटाचैकर्स को छोड़कर अन्य सभी अक्षर वास्तव में नियमित अभिव्यक्ति होते हैं जो एक दूसरे के अनुरूप होते हैं। नीचे सबसे अधिक उपयोग किए जाने वाले मेटाचैकर्स की सूची दी गई है:

  • एक पंक्ति की शुरुआत में अभिव्यक्ति से मेल करने के लिए ^ चरित्र (कैरेट चरित्र) का उपयोग करें। निम्न उदाहरण में, ^ कंगारू तभी मेल खाएगा जब यह बहुत शुरुआत में होता है: $ grep "^ कंगारू" file.txt
  • अंत में अभिव्यक्ति से मेल करने के लिए $ (डॉलर) प्रतीक का उपयोग करें। निम्नलिखित उदाहरण में, कंगारू $ केवल तभी मेल खाएगा जब उसका सामना बहुत अंत में होगा: grep "कंगारू $" file.txt
  • प्रतीक का प्रयोग करें। (डॉट) किसी एक पात्र से मिलान करने के लिए। उदाहरण के लिए, दो वर्णों के कान से शुरू होने वाली और रो के साथ समाप्त होने वाली हर चीज़ से मेल खाने के लिए, आप निम्न पैटर्न का उपयोग कर सकते हैं: $ grep "kan..roo" file.txt
  • कोष्ठक में संलग्न किसी भी एकल वर्ण से मेल करने के लिए [(कोष्ठक) का उपयोग करें। उदाहरण के लिए, उन लोगों को ढूंढें जिनमें स्वीकार या "उच्चारण" है, आप निम्नलिखित पैटर्न का उपयोग कर सकते हैं: $ grep "acce [np] t" file.txt

अगले वर्ण के विशेष अर्थ से बचने के लिए, \ (बैकस्लैश) वर्ण का उपयोग करें।

विस्तारित नियमित अभिव्यक्ति

एक विस्तारित नियमित अभिव्यक्ति के रूप में एक पैटर्न की व्याख्या करने के लिए, -E (या –extended-regexp) पैरामीटर का उपयोग करें। विस्तारित नियमित अभिव्यक्तियों में सभी बुनियादी मेटाचैकर्स शामिल हैं, साथ ही अधिक जटिल और शक्तिशाली खोज पैटर्न बनाने के लिए अतिरिक्त मेटाचैकर्स भी शामिल हैं। नीचे कुछ उदाहरण दिए गए हैं:

  • इस फ़ाइल से सभी ईमेल पतों को मिलान करें और निकालें: $ grep -E -o "\ b [A-Za-z0-9 ._% + -] [A-Za-z0-9-।] + \। [A-Za-z] {2.6} \ b "file.txt
  • इस फ़ाइल से सभी मान्य IP पते को मैप करें और निकालें: $ grep -E -o '(25 [0-5] | 2 [0-4] [0-9] | [01]? [0-9] [0 -9];) \? (25 [0-5] | 2 [0-4] [0-9] | [01]; [0-9] [0-9]?) (?) (25 [0-] 5] | 2 [0-4] [0-9] | [01]? [0-9] [0-9]?] \ _ (25 [0-5] | 2 [0-4] [0-] 9] | [01]? [0-9] [0-9]?) 'File.txt

-O विकल्प का उपयोग केवल मैचों को प्रिंट करने के लिए किया जाता है।

गिनने से पहले प्रिंट करें

मिलान से पहले एक निश्चित संख्या में लाइनों को प्रिंट करने के लिए –B (या -before-reference) पैरामीटर का उपयोग करें। उदाहरण के लिए, मिलान से पहले प्रारंभिक संदर्भ की 5 पंक्तियों को प्रदर्शित करने के लिए, आप निम्न कमांड का उपयोग कर सकते हैं: $ grep -A 5 जड़ / आदि / पास।

खोज के बाद प्रिंट करें

एक मैच के बाद एक विशिष्ट संख्या में लाइनों को प्रिंट करने के लिए –A (या -अंतर-संदर्भ) पैरामीटर का उपयोग करें। उदाहरण के लिए, तार के मिलान के बाद अंतिम संदर्भ की 5 पंक्तियों को प्रदर्शित करने के लिए, आप निम्न कमांड का उपयोग कर सकते हैं: $ grep -B 5 रूट / etc / passwd

आदेश सूचनाओं के पूर्ण उपयोग के लिए यह सब आवश्यक है। यदि आप पहले से ही लिनक्स का उपयोग करते हैं और शुरुआती लोगों को कोई सलाह दे सकते हैं, तो इस लेख के तहत टिप्पणियां साझा करें।