Терминал Linux #3 - Команда Grep: поиск по файлам и папкам
תוכן עניינים:
- תחביר פיקוד Grep
- כיצד להשתמש ב-
grep
כדי לחפש מחרוזת בקבצים - הפוך התאמה (אל תכלול)
- כיצד להשתמש ב- Grep כדי לחפש מחרוזת בפלט הפקודה
- חיפוש רקורסיבי
- הצג רק את שם הקובץ
- חיפוש לא רגיש
- חפש מילים מלאות
- הצג מספרי שורה
- ספירת גפרורים
- חפש מחרוזות מרובות (דפוסים)
- מצב שקט
- ביטוי רגיל בסיסי
- ביטויים רגילים מורחבים
- הדפס קווים לפני משחק
- הדפס קווים לאחר משחק
- סיכום
הפקודה
grep
"הדפס ביטוי רגיל גלובלי" היא אחת מהפקודות החזקות והנפוצות ביותר בלינוקס.
גרפ מבצע חיפוש בקבצי קלט אחד או יותר אחר שורות התואמות דפוס נתון וכותב כל שורה תואמת לפלט רגיל. אם לא מוגדרים קבצים,
grep
קורא מהקלט הרגיל, שהוא בדרך כלל פלט של פקודה אחרת.
במדריך זה, נראה לך כיצד להשתמש בפקודה
grep
באמצעות דוגמאות מעשיות, והסברים מפורטים על אפשרויות ה-
grep
הנפוצות ביותר של GNU.
תחביר פיקוד Grep
לפני שנבדוק כיצד להשתמש בפקודה
grep
, נתחיל בבחינת התחביר הבסיסי.
ביטויי השירות של
grep
לובשים את הצורה הבאה:
grep PATTERN
הפריטים בסוגריים מרובעים הם לא חובה.
-
OPTIONS
- אפס או יותר אפשרויות. גרפ מספקת מספר אפשרויות השולטות בהתנהגותה.PATTERN
- דפוס חיפוש.FILE
- שמות קבצי קלט אפסיים או יותר.
כדי להיות מסוגל לחפש בקובץ, המשתמש המריץ את הפקודה חייב להיות בעל גישה לקריאה לקובץ.
כיצד להשתמש ב-
grep
כדי לחפש מחרוזת בקבצים
השימוש הבסיסי ביותר בפקודת
grep
הוא חיפוש מחרוזת (טקסט) בקובץ.
לדוגמה, כדי להציג את השורות מקובץ
/etc/passwd
המכיל את המחרוזת, אתה יכול להשתמש בפקודה הבאה:
grep bash /etc/passwd
הפלט צריך להיראות כך:
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
אם המחרוזת כוללת רווחים, עליך לסגור אותה במרכאות בודדות או כפולות:
grep "Gnome Display Manager" /etc/passwd
הפוך התאמה (אל תכלול)
להצגת השורות שאינן תואמות תבנית, השתמש באפשרות
-v
(או
--invert-match
).
לדוגמה כדי להציג את השורות מקובץ
/etc/passwd
שאינם מכילים את
nologin
אתה יכול להשתמש בפקודה הבאה:
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
כיצד להשתמש ב- Grep כדי לחפש מחרוזת בפלט הפקודה
במקום לציין קבצי קלט, תוכלו לצרף את הפלט של פקודה אחרת ל-
grep
ואז להציג רק שורות התואמות לדפוס נתון.
לדוגמה, כדי לגלות אילו תהליכים פועלים במערכת שלך כ-
www-data
למשתמש
www-data
תוכל להשתמש בפקודת ה-
ps
הבאה:
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --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: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
אתה יכול גם לשרשרת מספר צינורות בפקודה. כפי שניתן לראות בפלט שלמעלה יש גם שורה המכילה את תהליך
grep
. אם אינך רוצה שיוצג קו זה העביר את הפלט למופע
grep
אחר כמוצג להלן.
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --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: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
חיפוש רקורסיבי
לחיפוש רקורסיבי אחר תבנית השתמש באפשרות, השתמש באפשרות
-r
(או -
--recursive
). פעולה זו תחפש בכל הקבצים בספרייה שצוינה, ותדלג על קישורי הסימן שנמצאים רקורסיבית. כדי לעקוב אחר כל הקישורים הסמליים, השתמש באפשרות
-R
(או -
--dereference-recursive
).
בדוגמה הבאה אנו מחפשים את המחרוזת
linuxize.com
בכל הקבצים בספריית
/etc
:
grep -r linuxize.com /etc
הפקודה תדפיס את השורות התואמות שהוגדרו מראש עם הנתיב המלא לקובץ.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
אם במקום זאת, אם אתה משתמש באפשרות
-R
grep
יעקוב אחר כל הקישורים הסמליים:
grep -R linuxize.com /etc
שימו לב לשורה האחרונה של הפלט. שורה זו אינה מודפסת בדוגמה שלמעלה מכיוון שקבצים בתוך הספרייה
sites-enabled
Nginx הם קישורים סימנים לקבצי תצורה בתוך הספרייה
sites-available
.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
הצג רק את שם הקובץ
כדי לדכא את תפוקת ה-
grep
המוגדרת כברירת מחדל ולהדפיס רק את שמות הקבצים המכילים את התבנית המותאמת, באפשרותך להשתמש באפשרות
-l
(או -
--files-with-matches
).
לדוגמה לחיפוש בכל הקבצים המסתיימים ב-
.conf
בספריית העבודה הנוכחית ולהדפיס רק את שמות הקבצים המכילים את המחרוזת
linuxize.com
:
grep -l linuxize.com *.conf
הפלט ייראה כך:
tmux.conf haproxy.conf
בדרך כלל משתמשים באפשרות
-l
בשילוב עם האפשרות רקורסיבית
-R
:
חיפוש לא רגיש
כברירת מחדל, פקודת
grep
היא רגישת רישיות. משמעות הדבר היא כי התווים הגדולים והקטנים מתייחסים זה לזה.
כדי להתעלם ממקרה בעת חיפוש, השתמשו באפשרות
-i
(או
--ignore-case
).
לדוגמה, בעת חיפוש אחר
Zebra
ללא אפשרות, הפקודה הבאה לא תציג פלט כלשהו, כלומר יש שורות תואמות:
grep Zebra /usr/share/words
אך אם תבצע חיפוש חסר רגישות באמצעות האפשרות
-i
, הוא יתאים לאותיות גדולות וקטנות:
grep -i Zebra /usr/share/words
ציון "זברה" יתאים ל"זברה ", " ZEbrA "או לכל שילוב אחר של אותיות גדולות וקטנות עבור מחרוזת זו.
חפש מילים מלאות
בעת חיפוש אחר "gnu",
grep
ידפיס גם את השורות בהן "gnu" משובץ במילים גדולות יותר, כמו "cygnus" או "magnum".
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
כדי להחזיר רק את השורות בהן המחרוזת שצוינה היא מילה שלמה (סגורה על ידי תווים שאינם מילים), השתמש באפשרות
-w
(או -
--word-regexp
).
az
,
AZ
ו-
0-9
)
0-9
תחתונים (
_
). כל שאר התווים נחשבים כתווים שאינם מילים.
grep -w gnu /usr/share/words
הצג מספרי שורה
כדי להציג את מספר השורות הכוללות מחרוזת התואמת לתבנית, השתמש באפשרות
-n
(או
--line-number
). בעת שימוש באפשרות זו,
grep
ידפיס את ההתאמות לפלט הסטנדרטי מראש עם מספר השורות עליו נמצא.
לדוגמה כדי להציג את השורות מקובץ
/etc/services
המכיל את המחרוזת
bash
עם מספר השורה התואם, תוכלו להשתמש בפקודה הבאה:
grep -n 10000 /etc/services
הפלט שלהלן מראה לנו שהגפרורים נמצאים בקווים 10423 ו- 10424.
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
ספירת גפרורים
כדי להדפיס ספירת שורות תואמות לפלט רגיל, השתמש באפשרות
-c
(או -).
בדוגמה למטה אנו סופרים את מספר החשבונות שיש להם
/usr/bin/zsh
כקליפה.
grep -c '/usr/bin/zsh' /etc/passwd
חפש מחרוזות מרובות (דפוסים)
ניתן לחבר לשני דפוסי חיפוש או יותר באמצעות מפעיל OR
|
.
כברירת מחדל,
grep
מפרש את התבנית כביטוי רגיל בסיסי שבו המטא-תווים כגון
|
מאבדים את המשמעות המיוחדת שלהם, ויש להשתמש בגרסאות השורשות שלהם.
בדוגמה למטה אנו מחפשים את כל המופעים של המילים
fatal
,
error
וחיוניות בקובץ השגיאה של יומן Nginx:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
מצב שקט
ה-
-q
(או -
--quiet
) אומר ל-
grep
לא לכתוב דבר למסוף (פלט רגיל). אם נמצא התאמה, הפקודה תצא ממצב
0
. זה שימושי בעת שימוש ב-
grep
בסקריפטים של פגז שבהם ברצונך לבדוק אם קובץ מכיל מחרוזת ולבצע פעולה מסוימת בהתאם לתוצאה.
להלן דוגמה לשימוש ב-
grep
במצב שקט כפקודת מבחן בהצהרת
if
:
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
ביטוי רגיל בסיסי
ל- GNU Grep שתי קבוצות תכונות ביטוי רגילות, בסיסיות ומורחבות. כברירת מחדל,
grep
מפרש את התבנית כביטוי רגיל בסיסי.
כאשר משתמשים בהן במצב ביטוי רגיל בסיסי, כל שאר הדמויות למעט הדמויות המטאיות, הם למעשה ביטויים רגילים התואמים את עצמם. להלן רשימה של מטא-תווים נפוצים ביותר:
-
השתמש בסמל
^
(caret) כדי להתאים ביטוי בתחילת קו. בדוגמה הבאה, המחרוזת^kangaroo
תתאים רק אם היא מתרחשת ממש בתחילת שורה.grep "^kangaroo" file.txt
השתמש בסמל
$
(דולר) כדי להתאים לביטוי בסוף שורה. בדוגמה הבאה, מחרוזתkangaroo$
תתאים רק אם היא מתרחשת בסוף קו.grep "kangaroo$" file.txt
השתמש ב-
.
(נקודה) סמל כדי להתאים לכל דמות יחידה. לדוגמה, כדי להתאים לכל דבר שמתחיל עםkan
יש שתי תווים ומסתיים במחרוזתroo
, אתה יכול להשתמש בתבנית הבאה:grep "kan..roo" file.txt
להשתמש
accept
או "accent
, אתה יכול להשתמש בתבנית הבאה:grep "accet" file.txt
להשתמש
co(any_letter_except_l)a
, כגוןcoca
,cobalt
וכן הלאה, אך לא יתאימו לקווים המכיליםcola
,grep "coa" file.txt
כדי לברוח מהמשמעות המיוחדת של הדמות הבאה, השתמש בסמל
\
(קו אחורי).
ביטויים רגילים מורחבים
כדי לפרש את התבנית כביטוי רגיל מורחב, השתמש באפשרות
-E
(או
--extended-regexp
). ביטויים רגילים מורחבים כוללים את כל הדמויות המטא-בסיסיות, יחד עם מטא-תווים נוספים ליצירת דפוסי חיפוש מורכבים וחזקים יותר. להלן כמה דוגמאות:
-
התאם ולחלץ את כל כתובות הדוא"ל מקובץ נתון:
grep -E -o "\b+@+\.{2, 6}\b" file.txt
התאם ולחלץ את כל כתובות ה- IP התקפות מקובץ נתון:
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
האפשרות
-o
משמשת להדפסת מחרוזת התאמה בלבד.
הדפס קווים לפני משחק
כדי להדפיס מספר ספציפי של שורות לפני שורות תואמות, השתמש באפשרות
-B
(או -
--before-context
).
לדוגמה, כדי להציג חמש שורות של הקשר מוביל לפני שורות התאמה, היית משתמש בפקודה הבאה:
הדפס קווים לאחר משחק
כדי להדפיס מספר ספציפי של שורות לאחר שורות התאמה, השתמש באפשרות
-A
(או
--after-context
).
לדוגמה כדי להציג חמש שורות של הקשר נגרר לאחר שורות התאמה, היית משתמש בפקודה הבאה:
סיכום
הפקודה
grep
מאפשרת לך לחפש תבנית בתוך הקבצים. אם התאמה אם תמצא, grep ידפיס את השורות הכוללות את התבנית שצוינה.
יש עוד הרבה דברים ללמוד על Grep בדף מדריך למשתמש של Grep.
מסוף grepLenovo שירות משבית מחשבים נישאים עם הודעת טקסט ביום שלישי הודיעה Lenovo על שירות המאפשר למשתמשים להשבית מרחוק מחשב על ידי שליחת הודעת טקסט. אם המחשב הנייד אבוד, עכשיו יש דרך חדשה לסגור אותו מרחוק - רק טקסט.

Lenovo מתכננת להודיע ביום שלישי שירות Secure Remote Disable מרחוק, המאפשר למשתמשים מרחוק להשבית מחשב על ידי שליחת טקסט הוֹדָעָה. המשתמשים מקבלים גם הודעת טקסט לאישור המאמת את השבתת המחשב.
חיפוש טקסט בקבצים סרוקים עם שולחן העבודה Recollect

תוכנית זו הולכת לאן תוכניות חיפוש אחרות לא: דואר אלקטרוני, מסמכי PDF, סרוק מסמכים ועוד.
פקודת Chmod בלינוקס (הרשאות קבצים)

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