30 דוגמאות Grep למנהלי מערכת

30 Grep Examples System Admins



אתה יכול למצוא גרפ קיים עמוק בתוך המוח החייתי של מערכות ההפעלה יוניקס ודמויי יוניקס. זוהי תוכנית בסיסית המשמשת להתאמת דפוסים והיא נכתבה בשנות ה -70 יחד עם שאר כלי UNIX שאנו מכירים ואוהבים (או שונאים).

אמנם למידה על שפות פורמליות וביטויים רגילים היא נושא מרגש. למידת grep יש הרבה יותר מזה מאשר regexes. כדי להתחיל עם זה ולראות את היופי והאלגנטיות של grep אתה צריך לראות כמה דוגמאות מהעולם האמיתי, ראשית.







דוגמאות שימושיות שהופכות את חייך לקלים יותר. להלן 30 מקרים כאלה ואפשרויות שימוש נפוצות ב- grep.



1. ps aux | grep

ה- PS aux מפרט את כל התהליכים ואת ה pids הקשורים אליהם. אבל לעתים קרובות רשימה זו ארוכה מכדי שאדם יכול לבדוק אותה. אם תעביר את הפלט לפקודת grep תוכל לרשום תהליכים הפועלים עם יישום מאוד ספציפי בחשבון. לדוגמה זה יכול להיות sshd או nginx או httpd.



# ps עד | grep sshd
שורש400 0.0 0.2 69944 5624? Ss17:47 0: 00/usr/sbin/sshd-D
שורש1076 0.2 0.3 95204 6816? Ss18:29 0: 00 sshd: root@נק '/0
שורש1093 0.0 0.0 12784 932נק '/0S+18:29 0: 00אחיזהsshd

2. ברכת כתובות ה- IP שלך

ברוב מערכות ההפעלה תוכל לרשום את כל ממשקי הרשת שלך ואת ה- IP המוקצה לממשק זה באמצעות הפקודה ifconfig או ip addr. שתי הפקודות הללו יפיקו מידע רב נוסף. אבל אם אתה רוצה להדפיס רק את כתובת ה- IP (נניח לגבי סקריפטים של מעטפת), תוכל להשתמש בפקודה הבאה:





$ip addr | אחיזהinet| awk '{הדפס 2 $; } '
$ip addr | אחיזה inet| awk '{הדפס 2 $; } ' #לקווים עם רק inet לא inet6 (IPv6)

הפקודה ip addr מקבלת את כל הפרטים (כולל כתובות ה- IP), לאחר מכן היא מועברת אל הפקודה השנייה של הפקודה grep אשר מוציאה רק את השורות עם inet בהן. לאחר מכן הוא מוזרם להצהרת awk את ההצהרה שמדפיסה את המילה השנייה בכל שורה (במילים פשוטות).

P.S: אתה יכול גם לעשות זאת ללא ה- grep אם אתה יודע awk יודע היטב.



3. הסתכלות על ניסיונות SSH כושלים

אם יש לך שרת הפונה לאינטרנט, עם IP ציבורי, הוא יופגז ללא הרף בניסיונות SSH ואם תאפשר למשתמשים לקבל גישה מבוססת סיסמה מבוססת סיסמה (מדיניות שלא הייתי ממליץ עליה) תוכל לראות את כל הניסיונות הכושלים הללו באמצעות הפקודה הבאה grep:

# cat /var/log/auth.log | grep נכשל
מדגם החוצה לשים
דצמבר5 16:עשרים: 03 debian sshd[509]: סיסמה נכשלהלשורש מיציאת 192.168.0.10052374ssh2
דצמבר5 16:עשרים: 07 debian sshd[509]: סיסמה נכשלהלשורש מיציאת 192.168.0.10052374ssh2
דצמבר5 16:עשרים:אחת עשרהdebian sshd[509]: סיסמה נכשלהלשורש מיציאת 192.168.0.10052374ssh2

4. צנרת Grep ל- Uniq

לפעמים, grep יפיק מידע רב. בדוגמה שלמעלה, ייתכן ש- IP יחיד ניסה להיכנס למערכת שלך. ברוב המקרים, יש רק קומץ כתובות IP פוגעות כאלה שאתה צריך לזהות באופן ייחודי ולרשום אותן בשחור.

#חתול /איפה/עֵץ/auth.log| אחיזה 'לְהִכָּשֵׁל' | uniq 3

הפקודה uniq אמורה להדפיס רק את השורות הייחודיות. ה- uniq -f 3 מדלג על שלושת השדות הראשונים (כדי להתעלם מחותמות הזמן שלעולם לא חוזרות על עצמן) ואז מתחיל לחפש קווים ייחודיים.

5. ברכה על הודעות שגיאה

השימוש ב- Grep עבור יומני גישה ושגיאות אינו מוגבל ל- SSH בלבד. שגיאות אינטרנט (כמו Nginx) שגיאת יומן ויומני גישה די מוקפדים. אם אתה מגדיר סקריפטים לניטור ששולחים לך התראות כאשר grep 404 מחזיר ערך חדש. זה יכול להיות שימושי למדי.

# grep -w '404' /var/www/nginx/access.log

192.168.0.100 - -[06/דצמבר/2018: 02:עשרים:29+0530] 'GET /favicon.ico HTTP /1.1' 404 200
'http://192.168.0.102/' 'מוזילה/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, כמו Gecko) Chrome/70.0.3538.110 Safari/537.36 '


192.168.0.101 - -[06/דצמבר/2018: 02:ארבע חמש:16+0530] 'GET /favicon.ico HTTP /1.1' 404 143
'http://192.168.0.102/' 'מוזילה/5.0 (iPad; מערכת הפעלה CPU 12_1 כמו Mac OS X)
גרסת AppleWebKit/605.1.15 (KHTML, כמו Gecko)/12.0 Mobile/15E148 Safari/604.1 '

יתכן ש- regex אינו 404 אלא סינון regex אחר ללקוחות ניידים בלבד או רק למכשירי אפל הצופים בדף אינטרנט. זה מאפשר לך לקבל תובנה מעמיקה יותר לגבי הביצועים של האפליקציה שלך.

6. רישום חבילות

עבור מערכות מבוססות Debian, dpkg -l מפרט את כל החבילות המותקנות במערכת שלך. אתה יכול לצרף את זה לפקודת grep כדי לחפש חבילות השייכות ליישום ספציפי. לדוגמה:

#dpkg | אחיזה 'באתי'

7. grep -v שמות קבצים

כדי לרשום את כל השורות אשר אל תעשה להכיל תבנית נתונה, השתמש בדגל -v. זה בעצם ההיפך מפקודת grep רגילה.

8. grep -l

הוא מפרט את כל הקבצים המכילים מופע אחד לפחות של התבנית המסופקת. זה שימושי כאשר אתה מחפש תבנית בתוך ספרייה עם מספר קבצים. הוא מדפיס רק את שם הקובץ, ולא את השורה הספציפית עם התבנית.

9. אפשרות מילה אחת -w

$אחיזה <תבנית>שמות קבצים

הדגל -w אומר ל- grep לחפש את התבנית הנתונה כמילה שלמה ולא רק מחרוזת משנה של שורה. לדוגמה, קודם לכן בירכנו על כתובת IP והתבנית inet הדפיס את השורות בשניהם inet ו inet6 פירוט כתובות IPv4 ו- IPv6. אבל אם השתמשנו ב- -w רק את הקווים עם inet כפי שמילה לפניה ואחריה רווחים לבנים היא התאמה תקפה.

10. ביטוי רגיל מורחב

לעתים קרובות תגלו שהביטויים הרגילים שמקורם ב- Grep מעט מגבילים. ברוב התסריטים וההוראות תמצא את השימוש בדגל -E וזה יאפשר לך להזין תבנית במה שנקרא מצב מורחב.

להלן פקודות grep ו- grep -E לחיפוש מילים סופרמן וספיידרמן.

$אחיזה ' (סופר | עכביש ) איש'טֶקסט
$אחיזה 'איש (סופר | עכביש)'טֶקסט

כפי שאתה יכול לראות את הגרסה המורחבת הרבה יותר קלה לקריאה.

11. גרפ על המכולות שלך

אם יש לך מקבץ גדול של מכולות הפועלות על המארח שלך, תוכל לחזק אותן לפי שם תמונה, סטטוס, יציאות שהם חושפים ותכונות רבות אחרות. לדוגמה,

$עגינהנ.ב | אחיזה [שם תמונה]

12. גרפ על התרמילים שלך

בזמן שאנחנו עוסקים בנושא מכולות. Kubernetes נוטים לעתים קרובות להשיק תרמילים מרובים בפריסה נתונה. למרות שלכל תרמיל יש שם ייחודי, במרחב שמות נתון, הוא מתחיל בדרך כלל בשם הפריסה. אנו יכולים להתייחס לזה ולפרט את כל התרמילים הקשורים לפריסה נתונה.

$kubectl לקבל תרמילים| אחיזה <deploymentName>

13. אחיזה ל Big Data

פעמים רבות ניתוח Big Data כרוך בחיפוש פשוט, מיון וספירה של תבניות במערך נתונים נתון. שירותי UNIX ברמה נמוכה כמו grep, uniq, wc טובים במיוחד בזה. פוסט זה בבלוג מציג דוגמה טובה למשימה שהושגה תוך שניות ספורות באמצעות grep ושירותי יוניקס אחרים בעוד Hadoop לקח כמעט חצי שעה.

לדוגמה, גודל הנתונים הזה הוא מעל 1.7GB. הוא מכיל מידע על ריבוי משחקי שחמט, כולל המהלכים שנעשו, מי ניצח וכו '. אנו מעוניינים רק בתוצאות ולכן אנו מפעילים את הפקודה הבאה:

$אחיזה 'תוֹצָאָה'מיליון בסיס-2.22.pgn| סוג | uniq
221 [תוֹצָאָה'*']
653728 [תוֹצָאָה'0-1']
852305 [תוֹצָאָה'1-0']
690934 [תוֹצָאָה'1 / 2-1 / 2']

זה לקח בערך 15 שניות במעבד בן 2 ליבות/4 חוטים בן 4 שנים. אז בפעם הבאה שאתה פותר בעיה של ביג דאטה. תחשוב אם אתה יכול להשתמש ב- grep במקום זאת.

14. grep – צבע = אוטומטי

אפשרות זו מאפשרת ל- grep להדגיש את התבנית בתוך השורה שבה היא נמצאה.

15. grep -i

התאמת תבניות grep היא מטבעה תלויה באותיות רישיות. אבל אם לא אכפת לך מזה אז שימוש בדגל -i יהפוך את ה- grep לבלתי רגיש.

16. grep -n

הדגל -n יציג את מספרי השורות כך שלא תדאג למצוא את אותה השורה בהמשך.

17. git grep

ל- Git, מערכת בקרת הגרסאות, עצמה יש פקודת grep מובנית שעובדת פחות או יותר כמו ה- grep הרגיל שלך. אך ניתן להשתמש בו לחיפוש דפוסים על כל עץ מחויב באמצעות ה- git CLI המקורי, במקום צינורות מייגעים. לדוגמה, אם אתה נמצא בענף הראשי של המאגר שלך, אתה יכול לדלג על פני המאגר באמצעות:

(לִשְׁלוֹט)$git grep <תבנית>

18. grep -o

הדגל -o הוא ממש מועיל כשאתה מנסה לאתר באקס רגב. הוא ידפיס רק את החלק התואם של השורה, במקום את השורה כולה. אז, במקרה שאתה מקבל יותר מדי קו לא רצוי לדפוס המסופק, ואינך יכול להבין מדוע זה קורה. אתה יכול להשתמש בדגל -o כדי להדפיס את מחרוזת המשנה הפוגעת ולנמק לגבי הרקס שלך אחורה משם.

19. grep -x

הדגל -x היה מדפיס שורה, אם ורק אם השורה כולה תואמת את הרקס -ביטוי המסופק שלך. זה דומה במקצת לדגל -w שהדפיס שורה אם ורק מילה שלמה תואמת את הרקס המסופק.

20. grep -T

כאשר אתה מתמודד עם יומנים ותפוקות מתוך סקריפטים של מעטפת, סביר להניח שתתקל בכרטיסיות קשות להבדיל בין עמודות פלט שונות. הדגל -T יישר את הלשוניות האלה בצורה מסודרת כך שהעמודות מסודרות בצורה מסודרת, כך שהפלט יהיה קריא אנושי.

21. grep -q

זה מדכא את הפלט ומפעיל בשקט את הפקודה grep. שימושי מאוד בעת החלפת טקסט, או הפעלת grep בתסריט דמון.

22. grep -P

אנשים שרגילים לתרגם תחביר ביטוי רגיל יכולים להשתמש בדגל -P כדי להשתמש בדיוק בזה. אינך צריך ללמוד ביטוי רגיל בסיסי, בו משתמש grep כברירת מחדל.

23. grep -D [פעולה]

ב- Unix ניתן להתייחס כמעט לכל דבר כקובץ. כתוצאה מכך, ניתן להזין כל התקן, שקע או זרם נתונים של FIFO ל- grep. אתה יכול להשתמש בדגל -D עקוב אחר פעולה (פעולת ברירת המחדל היא READ). כמה אפשרויות אחרות הן דילוג על דילוג בשקט על מכשירים ספציפיים ו- RECURSE כדי לעבור דרך מדריכים וקישורים סימבוליים.

24. חזרה

אם אתה מחפש דפוס נתון שהוא חזרה על דפוס פשוט יותר ידוע, השתמש בפלטות מתולתלות כדי לציין את מספר החזרה

$אחיזה [0-9]{10}

זה מדפיס שורות המכילות מחרוזות באורך 10 ספרות או יותר.

25. קיצורי חזרה

כמה תווים מיוחדים שמורים לסוג מסוים של חזרה על תבניות. אתה יכול להשתמש אלה במקום פלטה מתולתלת, אם הם מתאימים לצורך שלך.

? : התבנית שלפני סימן השאלה צריכה להתאים לאפס או פעם אחת.

*: התבנית הקודמת לכוכב צריכה להתאים לאפס או יותר פעמים.

+: הדפוס הקודם פלוס צריך להתאים פעם אחת או יותר.

25. קיזוז בתים

אם אתה רוצה לדעת לראות את קיזוז הבייט של השורות בהן נמצא הביטוי התואם, תוכל להשתמש בדגל -b גם להדפסת הקיזוזים. כדי להדפיס את הקיזוז של רק החלק התואם של שורה, תוכל להשתמש בדגל -b עם דגל -o.

$אחיזה -אוֹ <תבנית> [שם קובץ]

קיזוז פשוט אומר, אחרי כמה בתים מתחילת הקובץ מתחילה המחרוזת התואמת.

26. egrep, fgrep ו- rgerp

לעתים קרובות תראה את הפנייה של egrep, כדי להשתמש בתחביר הביטוי הרגיל המורחב עליו דנו קודם לכן. עם זאת, מדובר בתחביר שהוצא משימוש ומומלץ להימנע משימוש בו. השתמש במקום זאת ב- grep -E. באופן דומה, השתמש ב- grep -F, במקום ב- fgrep ו- grep -r במקום ב- rgrep.

27. grep -z

לפעמים הקלט ל- grep אינו שורות המסתיימות בתו קו חדש. לדוגמה, אם אתה מעבד רשימה של שמות קבצים, הם עשויים להגיע ממקורות שונים. הדגל -z אומר ל- grep להתייחס לדמות NULL כאל סיום השורה. זה מאפשר לך להתייחס לזרם הנכנס כאל כל קובץ טקסט רגיל.

28. grep -a [שם קובץ]

הדגל -a אומר ל- grep להתייחס לקובץ המצורף כאילו היה טקסט רגיל. הקובץ יכול להיות בינארי, אך grep יתייחס לתוכן שבפנים, כאילו הם טקסט.

29. grep -U [שם קובץ]

דגל ה- U אומר ל- grep להתייחס לקבצים שסופקו כאילו הם קבצים בינאריים ולא טקסט. כברירת מחדל grep מנחש את סוג הקובץ על ידי הסתכלות על הבייטים הראשונים. שימוש בדגל זה משתלט על ניחושים שעובדים.

Grep -m NUM

עם קבצים גדולים, הברכה לביטוי יכולה להימשך לנצח. עם זאת, אם אתה רוצה לחפש רק NUM מספרים ראשונים של התאמות, תוכל להשתמש בדגל -m כדי להשיג זאת. הוא מהיר יותר והפלט לעתים קרובות גם ניתן לניהול.

סיכום

הרבה עבודה יומיומית של sysadmin כרוכה בניפוי של חלקים גדולים של טקסט. אלה עשויים להיות יומני אבטחה, יומני שרת האינטרנט או הדואר שלך, פעילות משתמשים או אפילו טקסט גדול של דפי אדם. Grep מעניק לך מעט גמישות נוספת בעת התמודדות עם מקרי שימוש אלה.

יש לקוות שהדוגמאות הבאות ומקרים השימוש לעיל עזרו לך להבין טוב יותר את המאובן החי של תוכנה.