שימוש נכון בפקודות Find ו- Grep ב- Linux

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

באמצעות פקודות חיפוש ו- Grep ב- Linux.

מצא

הפקודה 'מצא את Linux' היא כלי שורת פקודה לחציית היררכית הקבצים. זה יכול לשמש כדי לחפש קבצים וספריות ולבצע פעולות הבאים איתם. הוא תומך בחיפוש לפי קובץ, תיקייה, שם, תאריך יצירה, תאריך שינוי, הבעלים וההרשאות. באמצעות -exec, פקודות UNIX אחרות ניתן לבצע עבור קבצים או תיקיות שנמצאו. תחביר:

$ למצוא [היכן להתחיל את החיפוש] [ביטוי קובע מה למצוא] [-options] [מה למצוא]

אפשרויות:

  • -exec - הקובץ הנדרש שעומד בקריטריונים לעיל ומחזיר 0 כמצב יציאה לביצוע פקודות מוצלח;
  • -ok - עובד כמו exex, אלא כי המשתמש הוא הנחיה הראשונה;
  • -inum N - חפש עם המספר "N";
  • -Links N - חיפוש עם קישורים "N";
  • הדגמה-שם - חפש קבצים המצוינים ב "הדגמה";
  • קובץ חדש יותר - חפש קבצים שהשתנו / נוצרו לאחר "קובץ";
  • - אוקטלי אוקטלי - לחפש אם ההחלטה היא אוקטלית;
  • -דפוס - הצג את הנתיב למסמכים שנמצאו באמצעות הקריטריונים האחרים;
  • -פשוט - חיפוש מסמכים ריקים וספריות;
  • -size + N / -N - בלוקים לחיפוש "N"; "N" ו- "c" ניתן להשתמש כדי למדוד את הגודל תווים; "+ N" פירושו גודל גדול יותר של "N" בלוקים, ו- "N" פירושו גודל קטן יותר של "N" בלוקים;
  • -שם משתמש - חפש מסמכים השייכים לשם המשתמש או למזהה "שם";
  • \ (expr \) - נכון אם "expr" נכון; משמש לקריטריונים משותפים בשילוב עם OR או AND.

Grep

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

תחביר פקודה

לפני שנתחיל להשתמש בפקודה, נתחיל בסקירת התחביר הבסיסי. לביטוי השירות יש את הטופס הבא:

[OPTIONS] PATTERN [קובץ ...]

פריטים בסוגריים מרובעים הם אופציונליים.

  • אפשרויות - אפס או יותר אפשרויות. הצוות מספק מספר אפשרויות השולטות בהתנהגותו.
  • PATTERN - דפוס חיפוש.
  • קובץ - אפס או יותר שמות קובץ קלט.

כיצד להזין פקודה לחיפוש קבצים

המטרה העיקרית של הפקודה היא לחפש טקסט בקובץ. לדוגמה, כדי להציג מתוך קובץ / etc / passwd המכיל את שורת הבאש, באפשרותך להשתמש בפקודה הבאה:

$ grep bash / etc / passwd

הפלט אמור להיראות כך:

שורש 0: 0: root: / root: / bin / bash

תחום: 1000: 1000: תחום: / home / תחום: / bin / bash

אם המחרוזת מכילה רווחים, עליך לצרף אותה במרכאות בודדות או כפולות:

$ "Gnome מנהל תצוגה" / etc / passwd

הפוך התאמה (למשל)

כדי להציג שורות שאינן תואמות את התבנית, הזן את הפרמטר -v (או הפרמטר ההפוך). לדוגמה, כדי להציג קובץ שאינו מכיל nologin מקובץ / etc / passwd, באפשרותך להזין את הפקודה הבאה:

$ -v nologin / etc / passwd

פלט:

שורש 0: 0: root: / root: / bin / bash

colord 124: 124 :: / var / lib / colord: / bin / false

git 994: 994: משתמש daemon git: /: / usr / bin / git-shell

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

כיצד להשתמש בפקודה לחיפוש בפלט

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

$ ps -ef נתונים www

פלט:

www-data 18247 12675 4 16:00? 00:00:00 php-fpm: pool www

שורש 18272 17714 0 16:00 pts / 0 00:00:00-color = auto-exclude-dir = .bzr -exclude-dir = CVS -exclude-dir = .git -exclude-dir = .hg -exclude-dir = .svn www-data

www-data 31147 12770 0 Oct22? 00:05:51 nginx: תהליך עובד

www-data 31148 12770 0 Oct22? 00:00:00 nginx: תהליך ניהול המטמון

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

$ ps -ef www-נתונים grep -v grep

פלט:

www-data 18247 12675 4 16:00? 00:00:00 php-fpm: pool www

שורש 18272 17714 0 16:00 pts / 0 00:00:00-color = auto-exclude-dir = .bzr -exclude-dir = CVS -exclude-dir = .git -exclude-dir = .hg -exclude-dir = .svn www-data

www-data 31147 12770 0 Oct22? 00:05:51 nginx: תהליך עובד

www-data 31148 12770 0 Oct22? 00:00:00 nginx: תהליך ניהול המטמון

חיפוש רקורסיבי

כדי לחפש רקורסיבית אחר תבנית, הזן את האפשרות -r (או recursive). זה יאפשר לך לחפש את כל הקבצים בספריה שצוין, דילוג על קישורים סימבוליים המתרחשים רקורסיבית. כדי לעבור את כל הקישורים הסימבוליים, השתמש באפשרות -r (או -הפרשה-רקורסיבית). בדוגמה הבאה, אנחנו מחפשים domain.com בכל הקבצים בתוך / etc Directory:

$ -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 / וכו '

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

פלט:

/etc/hosts:127.0.0.1 node2.exe

/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 (או -files-with-match). לדוגמה, כדי לחפש את כל הקבצים המסתיימים ב- .conf בספריית העבודה הנוכחית, ולהדפיס רק שמות קבצים המכילים את סוג domain.com, הקלד:

$ -L domain.com * .conf

הפלט ייראה בערך כך:

tmux.conf

haproxy.conf

האופציה -l משמשת בדרך כלל בשילוב עם האפשרות רקורסיבית -R:

$ -Rl domain.com / tmp

חוסר רגישות למקרה

כברירת מחדל, הפקודה רגישה לרישיות, כלומר תווים רישומים וקטנים מטופלים כשונה. כדי להתעלם מהמקרה בעת החיפוש, הזן את האפשרות -i (או -התאמה). לדוגמה, אם אתה מחפש Zebra ללא אפשרות כלשהי, הפקודה הבאה לא תציג פלט כלשהו, ​​כלומר. יש התאמה.

$ זברה / usr / share / מילים

אבל אם אתה מבצע חיפוש חסר רישיות, השתמש באפשרות -i, היא תתאים גם באותיות גדולות וגם באותיות קטנות:

$ grep -i זברה / usr / share / words

האינדיקציה "זברה" תתאים ל "זברה", "זברה" או לכל שילוב אחר של אותיות רישיות וקטנות.

פלט:

זברה

זברה

זברות

התאמה מדויקת

בעת חיפוש, gnu גם להדפיס gnu, שבו מילים גדולות יותר מוכנסים, כגון cygnus או magnum.

$ gnu / usr / share / words

פלט:

ציגנוס

לא

interregnum

לא

lignum

מגנום

מגנוסון

ספגנום

אג

כדי להחזיר רק את הביטויים שבהם השדה שצוין הוא מילה שלמה (לא סגורה במילים), ניתן להשתמש באפשרות -w (או -word-regexp).

חשוב. הדמויות של המילה כוללות תווים אלפאנומריים (az, AZ ו- 0-9) וקווים תחתונים (_). כל שאר הדמויות מטופלות כתווים לא מילוליים.

אם אתה מפעיל את הפקודה כמו לעיל, כולל אפשרות -W, הפקודה יחזיר רק אלה הכוללים gnu כמילה נפרדת.

$ grep -w gnu / usr / share / words

פלט: לא

הצג מספרים

כדי להציג את מספר השורות המכילות תבנית, השתמש בפרמטר -n (או-number-number). שימוש באפשרות זו ידפיס התאמות לפלט הסטנדרטי עם הקידומת של המספר שבו הוא נמצא. לדוגמה, כדי להציג מתוך קובץ / etc / services המכיל את קידומת הבאש עם המספר המתאים, באפשרותך להשתמש בפקודה הבאה:

$ grep -n 10000 / etc / services

הפלט שלהלן מראה כי ההתאמות הן ב 10423 ו 10424.

פלט:

10423: ndmp 10, 000 / tcp

10424: ndmp 10000 / udp

ספירה

כדי להדפיס את מספר השורות התואמות לפלט הסטנדרטי, השתמש בפרמטר -c (או -count). בדוגמה הבאה, אנו סופרים את מספר החשבונות שיש להם את הקליפה / usr / bin / zsh.

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

תפוקה: 4

מספר שורות (דפוסים)

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

$ grep 'Fatal \ | error \ | critical' /var/log/nginx/error.log

אם אתה משתמש באפשרות הביטוי הרגיל המורחבת -E (או -extended-regexp), אין לבטל את ההצהרה, כפי שמוצג להלן:

$ grep -E 'fatal | error | critical' /var/log/nginx/error.log

ביטוי רגיל

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

  • השתמש בתו ^ (תו התו) כדי להתאים לביטוי בתחילת השורה. בדוגמה הבאה, ^ kangaroo יתאים רק אם הוא מתרחש ממש בהתחלה: $ grep "^ קנגורו" file.txt
  • השתמש בסמל $ (דולר) כדי להתאים לביטוי בסוף. בדוגמה הבאה, kangaroo $ יתאים רק אם הוא נתקל בסוף מאוד: grep "kangaroo $" file.txt
  • השתמש בסמל. (נקודה) כדי להתאים לכל תו בודד. לדוגמה, כדי להתאים לכל מה שמתחיל ב- kan של שתי תווים ומסתיים ב- roo, ניתן להשתמש בתבנית הבאה: $ grep "kan..rox" 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 [0-9] | [01]? [0-9] [0-9]?). (25 [0- 5 [] 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 (או לפני ההקשר). לדוגמה, כדי להציג 5 שורות של הקשר ראשוני לפני ההתאמה, ניתן להשתמש בפקודה הבאה: $ grep -A 5 root / etc / passwd

הדפס אחרי חיפוש

כדי להדפיס מספר מסוים של שורות לאחר התאמה, השתמש בפרמטר -A (או לאחר הקשר). לדוגמה, כדי להציג 5 שורות מהקשר הסופי לאחר מחרוזות תואמות, ניתן להשתמש בפקודה הבאה: $ grep -B 5 root / etc / passwd

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