20/05/2024

מדריך לינוקס למתחילים בעברית חלק 9 - סינון וחיפוש עם grep


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

במדריך זה נלמד:
1) מה זה grep בלינוקס?
2) מתי משתמשים ב grep?
3) איך לסנן תוצאות עם grep בלינוקס?
4)איך לבצע חיפוש תוכן של קבצים עם grep בלינוקס?



1.אז מה זה בעצם grep?
הפקודה grep היא ראשי תיבות של "Global Regular Expression Print", שבגדול זה רצף תווים שמגדיר תבנית חיפוש - וזה ממש ממש ממש ממש בקצרה..

2.מתי משתמשים ב grep בלינוקס?
בעצם השימוש בפקודה הזאת מתבצע כמה מקרים, פעם אחת כאשר אנחנו רוצים לבצע נגיד חיפוש בתוך תצוגה כלשהי, לדוגמא אם יש לי רשימה ענקית של תהליכים ואני רוצה תהליך מסוים, אז אני יכול להגיד ללינוקס שיראה לי רק תהליך מסוים בפלט שלו, או לחלופין, ברגע שאני מחפש נגיד מילה בתוך קובץ, זאת אומרת אפשר להשתמש ב grep בתור פקודה לאחר שהוא מקבל מידע ב"צינור" (Pipeline) או בתור פקודה עצמאית לגמרי שמבצעת חיפוש כזה או אחר בתוך קבצים\תיקיות במחשב שלנו.

3.איך לסנן תוצאות עם grep בלינוקס?

נתחיל מהדבר הכי פשוט שאפשר, איך למצוא כתובת IP במחשב שלכם? בווינדוס, הדברים יחסית פשוטים, בלינוקס אם אנחנו נשתמש בפקודה ifconfig (המקבילה של ipcoinfig) בווינדוס, נקבל מידע קצת שונה, בעיקרון בלינוקס זה יותר דומה לפקודה ipconfig /all לפי כמות המידע שמקבלים.
על מערכות חדשות אין את הפקודה ifconfig, אז צריך להתקין "כלי תקשורת",לצורך כך,
נריץ את הפקודה sudo apt install net-tools



במידה והכל עבד אצלכם תקין, זה יראה ככה:



עכשיו אפשר להריץ את הפקודה בשביל לקבל את המידע אודות הרשת, ואז אתם תבינו למה בעצם צריך grep במקרה הזה:


אנחנו יכולים לראות כאן שקיבלנו המון המון מידע, ודיי צריך לנחש מי פה כתובת ה IP, עכשיו תתארו לכם שאתם על שרת עם 4 כרטיסי רשת? אז בדיוק במקרה הזה מגיעה הפקודה grep שעובדת גם על MAC באותה הצורה, לצורך הסינון אני יכול לבחור לחפש לפי inet או לפי כתובת ה IP לדוגמא: ifconfig |grep inet:


נראה קצת יותר קריא לא?, עכשיו בוא ננסה לפי "172": ifconfig |grep 172


לדוגמא, אם אני רוצה לחפש את הפרוסס SSH ולבדוק מה המצב שלו אני ארשום ps aux |grep ssh


נגיד ואני רוצה לקבל מידע אודות פעולות עם קבצים מתוך העזרה של הפקודה "cp" אני ארשום "man cp|grep "file



בנוסף עם הפקודה grep אפשר לבצע "פילטר" לקבלת פלט הרבה יותר מדויק, לדוגמא אם אני רוצה להציג רק קבצים מסוג מסוים, אני אשתמש בפקודה ls ואעביר ל grep את הפלט עם ההגדרות שאני רוצה "ls -l |grep "doc



ניתן לעשות גם "פילטר" הפוך, להציג את כל מה שלא כולל את הסיומת doc בערת הפרמטר v-,
בצורה הזאת: "ls -l |grep -v "doc




4. איך לבצע חיפוש תוכן של קבצים עם grep בלינוקס?

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

לדוגמא, נגיד ואני רוצה למצוא את כל כתובות ה IP שמתחילות ב 10.20, בקובץ שיש לי, אני אכתוב את הפקודה, לאחר מכן מה אני מחפש ואז את שם הקובץ grep 10.20 pc_list.txt


אם אני רוצה להציג לדוגמא את כמות השורות שיש בקובץ הזה, אני אוסיף את הפרמטר n-
grep -n 10.20 pc_list.txt


נגיד ואני רוצה למצוא את כל הקבצים שיש בהם את כתובות IP מסוימות ואני לא זוכר באיזה קובץ רשמתי את זה אשתמש בפרמטר r- (רקורסיבי):
/grep -r "10.20.28" ~/Desktop



אותו דבר לגבי כל דבר אחר כמובן, לדוגמא נחפש את המילה "linux" בתוך הקבצים שיש בשולחן העבודה, בכוונה יצרתי הרבה קבצים (אני אתן לכם להוריד אותם בסוף המדריך) אם אני ארשום לו לחפש רקורסיבית הוא יראה לי באיזה קבצים יש את המילה, אבל אם אני אוסיף לו גם את הפרמטר i- (הכוונה "Ignore") שהוא מתעלם מאותיות גדולות וקטנות, אני אקבל תוצאה עם הקבצים שבהם יש את המילים שאני מחפש במקרה הזה "linux", אז ראשית נראה את הדוגמא בלי i-:

הפקודה: grep -r ["what_to_search"] [path]



ועכשיו עם הפרמטר i-:
 /grep -ri "linux" ~/Desktop
הרישום "ri-" הוא לא טעות, ניתן לרשום בלינוקס בשתי דרכים, או כל פרמטר בנפרד עם "-" או פשוט לשלב אותם ביחד:

הפקודה הזאת : grep -r ["what_to_search"] [path]
והפקודה הזאת:  /grep -ri "linux" ~/Desktop

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



אם אני רוצה לבדוק כמה פעמים המילה linux מופיע בקבצים האלה, אני אשתמש בפרמטר c-, עשיתי בדיקה בכוונה בשביל להראות לכם את זה שלינוקס מבדיל במילים עם אותיות גודלות לבין מילים עם אותיות קטנות, לכן הרצתי את אותה הפקודה פעמיים, אחת עם הפרמטר c- והשניה בלי הפרמטר: /grep -rc "linux" ~/Desktop




נגיד ואני רוצה להציג את כל הקבצים שבהם אין את המילה linux - כן יש דבר כזה "סינון הפוך" אני אשתמש בפרמטר v-
ואוסיף אותו לפרמטרים האחרים נשתמש בפרמטר r- (רקורסיבי) i- (התעלם מאותיות גדולות קטנות) ו v- ובעצם נקבל פקודה כזאת: /grep -riv "linux" ~/Desktop



נגיד ואני נמצא בתיקייה מסוימת ואני רוצה למצוא את כל הקבצים שיש בהם את המילה linux, אני אשתמש כמובן בפרמטר i- ואז אשתמש ב "*" עם המילה שאני רוצה למצוא:* grep -i linux 


אם אני רוצה להציג נגיד את כל הקבצים שבהם מופיעה המילה linux בלי התוכן עצמו אשתמש בפרמטר l- (רשימה "List") והפקודה תראה ככה:  * grep -irl linux 



זה הכל להפעם.

המייל שלי לכל שאלה :levl@leidertech.co.il

קבצי הטקסט שיהיה לכם עם מה "לשחק" - כאן

ההורדה מתבצעת מהאיחסון Google Drive


כמו תמיד, סרטון מצולם של המדריך:


אין תגובות:

הוסף רשומת תגובה

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

תודה :)