לינוקס - צינורות והפניות
כשעובדים עם שורת הפקודות של לינוקס כדאי להכיר את הנושא של צינורות (pipes) והפניות (redirects).
נשתמש בצינורות (pipes) והפניות (redirections) כדי להפנות את המידע מתוכנה אחת לאחרת, כך שהפלט של תוכנה אחת הופך לקלט של תוכנה שנייה.
Pipes - צינורות
בלינוקס, הפלט של תוכנה אחת יכול להפוך לקלט של תוכנה שנייה באמצעות שימוש בצינור (|) מקש בצד הימני ביותר של המקלדת סמוך ל-Enter.
לדוגמה, כדי לקבל את רשימת הקבצים בתיקייה:
$ ls -l
התוצאה המודפסת למסך ארוכה מאוד.
כדי לצפות בתוצאות באופן נוח יותר, נוסיף את הצינור (|) ואז את הפקודה less:
$ ls -l | less
כדי שנוכל לראות את רשימת הקבצים מסך אחד בכל פעם.
- כדי לדפדף בין המסכים לחץ על מקש הרווח.
- כדי לצאת מהמצב לחץ על המקש 'q'.
עוד ניתן, להפנות את התוצאה של ls לפקודה grep כדי לסנן את התוצאות:
$ ls -l | grep .js
הפקודה מדפיסה למסך הטרמינל קבצים ששמם מכיל את המחרוזת '.js'.
ניתן לשרשר יחדיו יותר מ-2 פקודות, לדוגמה, 3 פקודות:
$ ls -l | grep .js | less
כדי לצפות ברשימת כל התהליכים של לינוקס נשתמש בפקודה:
$ ps aux
הרשימה ארוכה מאוד. יהיה נוח יותר לראות את רשימת התהליכים מסך אחד בכל פעם:
$ ps aux | less
נשאיר רק את התהליכים הכוללים בשמם את המחרוזת 'usr':
$ ps aux | grep usr | less
נצא מהמצב באמצעות לחיצה על המקש 'q'.
Redirections - הפניות
נשתמש ב-echo כדי להדפיס לטרמינל:
$ echo hi!
והתוצאה:
hi!
במקום להדפיס למסך, ניתן לרשום לתוך קובץ:
$ echo hi! > hello.log
במקום שהמחרוזת hi! תודפס למסך היא עכשיו נרשמה לתוך הקובץ hello.log הודות לשימוש בהפנייה.
נשתמש ב-cat כדי לרשום את תוכן הקובץ למסך:
$ cat hello.log
hi!
נרשום משהו נוסף לתוך אותו הקובץ:
$ echo ahallan > hello.log
נשתמש ב-cat כדי לרשום את תוכן הקובץ לטרמינל:
$ cat hello.log
ahallan
המחרוזת החדשה החליפה את הישנה בגלל ששימוש ב - < גורם לשכתוב תוכן הקובץ.
כדי להוסיף תוכן נוסף על הקיים (במקום לשכתב) נשתמש ב - <<:
$ echo shalom >> hello.log
נבדוק מה רשום בקובץ:
$ cat hello.log
והתוצאה היא:
ahallan
shalom
אפשר להשתמש בהפניה כדי להעתיק את תוכנו של קובץ אחד לתוך קובץ שני:
$ cat hello.log > shalom.txt
נציג את תוכן הקובץ בטרמינל:
cat shalom.txt
נשתמש ב - << כדי להוסיף את תוכנו של הקובץ hello.log לתוך הקובץ shalom.txt:
$ cat hello.log >> shalom.txt
ahallan
shalom
ועכשיו, ננסה דוגמה יותר שימושית. נרשום את רשימת כל התהליכים של לינוקס שרצים ברגע זה לתוך קובץ:
$ ps aux > ps.log
נרשום את רשימת כל התהליכים של לתוך קובץ, בתנאי שהם כוללים את המחרוזת 'root':
$ ps aux | grep root > ps.log
זרמי מידע data streams במערכת לינוקס
מידע יכול לעבור במערכת לינוקס בין תהליכי מידע בתוך אחד משלושה זרמי מידע data streams:
data stream |
מזהה |
משמעות |
---|---|---|
STDIN |
0 |
קלט סטנדרטי הוא המידע שהתוכנה קולטת |
STDOUT |
1 |
פלט סטנדרטי הוא המידע שהתוכנה מייצאת (ברירת המחדל היא הדפסה לטרמינל) |
STDERR |
2 |
שגיאה סטנדרטית |
לכל אחד מזרמי המידע מוקצה ספרה. את הקלט הסטנדרטי STDIN מזהה הספרה 0. את הפלט הסטנדרטי STDOUT מזהה הספר 1. ואת השגיאה הסטנדרטית STDERR מסמנת הספרה 2.
הפניות Redirections בין זרמי המידע
ברירת המחדל של לינוקס היא להפנות לפלט הסטנדרטי STDOUT שמספרו 1 המוצג על מסך הטרמינל אבל לפעמים נרצה לעשות משהו אחר עם המידע. לדוגמה, לכתוב לקבצי לוג. איך עושים את זה?
לדוגמה, אנחנו יכולים להפנות את השגיאות לקובץ לוג מיוחד, errors.log
ניצור את קובץ הלוג של השגיאות:
touch errors.log
נפנה ללוג את השגיאות:
$ ls -l shalom.log 2>> errors.log
- הקדמנו ל - << את הספרה 2 וע"י כך גרמנו ללינוקס להסיט את פלט השגיאה לקובץ errors.log במקום לכתוב למסך.
נוודא על ידי כך שנפתח את קובץ הלוג errors.log לקריאה:
$ cat errors.log
התוצאה:
ls: cannot access 'shalom.log': No such file or directory
- הסטה של פלט השגיאות לקובץ לוג מיוחד היא מאוד מקובלת ומועילה כי היא מאפשרת ל-sysadmin, מנהל המערכת, לעבור על לוג השגיאות במקום לעבור על כל הפלט שעלול להיות ארוך מדי.
בפעמים אחרות, נרצה לכתוב גם את ה-STDIN וגם את ה-STDERR לאותו הקובץ. הדרך הפשוטה ביותר לעשות זאת:
$ ls -l shalom.log 1>>tracking.log 2>>tracking.log
אבל אנחנו קצת חוזרים על עצמנו.
יש גם קיצור דרך. נפנה את ה- STDERR ביחד עם STDOUT לאותו הקובץ על ידי שימוש ב-&:
$ ls -l shalom.log &>> tracking.log
הערך ברירת המחדל של לינוקס הוא ה- STDOUT שסימנו 1. לפיכך, גם אם נשמיט את הספרה לפני החץ ימינה עדיין לינוקס יבין שעליו להפנות את ה-STDOUT:
$ ls -l shalom.log >> tracking.log
- אפשר להשמיט את הספרה 1 כשרוצים להפנות את ה-STDOUT
לפעמים השגיאות בזמן הרצת פקודה לא מעניינות אותנו אז אפשר להפנות אותם למקום מיוחד במערכת הקבצים:
$ ls -l shalom.log 1>>tracking.log 2>/dev/null
- הפנייה של כל פלט, במקרה זה של STDERR, ל-/dev/null היא הפנייה למקום מיוחד במערכת הקבצים של לינוקס הידוע בכינויו "החור השחור" כיוון שמה שנשלח אליו נעלם כלא היה. במקרה זה, הודעות השגיאה יעלמו ללא עקבות כי אין לנו עניין בהם. לפעמים זה יכול להועיל.
זיהוי כתובות ה-IP שהשאירו אחריהם הכי הרבה רישומים
אפשר להשתמש בידע שרכשנו כדי לזהות דפוסים בתוך קבצי לוג. לדוגמה, לזהות מאילו כתובות IP נכנסו לאתר הכי הרבה פעמים.
בשרת אפאצ'י הלוג המתעד את הכניסות לאתר נמצא בדרך כלל בתיקייה אליה ננווט באמצעות הפקודה:
$ cd /var/log/apache2/
נציץ בתחילת הקובץ access.log (ייתכן שהשם והנתיב שונים אצלך) כדי לראות את התאריכים הראשונים המתועדים בו:
$ head -n 5 ./access.log
נציץ בסוף הקובץ access.log כדי לראות את התאריכים האחרונים המתועדים בו:
$ tail -n 5 ./access_log
נסנן את הרשומות שנוספו בתהליך שמעניין אותנו בהשמטת כתובת ה-IP האופיינית של השרת עצמו ואת התוצאה נרשום לקובץ חדש:
$ grep '10/Jun/2024' access.log | grep -v '127.0.0.1' > access_log_2024_06_10
נמצה את כתובות ה-IP בלבד מכל רשומה ונרשום בתוך קובץ נוסף חדש:
$ awk '{print $1}' access_log_2024_06_10 > ips_2024_06_10
נמיין את כתובות ה-IP כדי שהנפוצות ביותר יופיעו ראשונות בקובץ:
$ sort ips_2024_06_10 | uniq -c | sort -nr > ip_counts_2024_06_10
נצפה ב-10 כתובות ה-IP הנפוצות ביותר מהשורות הראשונות של הקובץ:
$ head -n 10 ip_counts_2024_06_10
אולי גם זה יעניין אותך:
ניהול תהליכים בלינוקס או איך לא להתעצבן כשהמחשב שוב נתקע
מערכת הקבצים של Linux - מה שרצית לדעת ולא העזת לשאול
אהבתם? לא אהבתם? דרגו!
0 הצבעות, ממוצע 0 מתוך 5 כוכבים
המדריכים באתר עוסקים בנושאי תכנות ופיתוח אישי. הקוד שמוצג משמש להדגמה ולצרכי לימוד. התוכן והקוד המוצגים באתר נבדקו בקפידה ונמצאו תקינים. אבל ייתכן ששימוש במערכות שונות, דוגמת דפדפן או מערכת הפעלה שונה ולאור השינויים הטכנולוגיים התכופים בעולם שבו אנו חיים יגרום לתוצאות שונות מהמצופה. בכל מקרה, אין בעל האתר נושא באחריות לכל שיבוש או שימוש לא אחראי בתכנים הלימודיים באתר.
למרות האמור לעיל, ומתוך רצון טוב, אם נתקלת בקשיים ביישום הקוד באתר מפאת מה שנראה לך כשגיאה או כחוסר עקביות נא להשאיר תגובה עם פירוט הבעיה באזור התגובות בתחתית המדריכים. זה יכול לעזור למשתמשים אחרים שנתקלו באותה בעיה ואם אני רואה שהבעיה עקרונית אני עשוי לערוך התאמה במדריך או להסיר אותו כדי להימנע מהטעיית הציבור.
שימו לב! הסקריפטים במדריכים מיועדים למטרות לימוד בלבד. כשאתם עובדים על הפרויקטים שלכם אתם צריכים להשתמש בספריות וסביבות פיתוח מוכחות, מהירות ובטוחות.
המשתמש באתר צריך להיות מודע לכך שאם וכאשר הוא מפתח קוד בשביל פרויקט הוא חייב לשים לב ולהשתמש בסביבת הפיתוח המתאימה ביותר, הבטוחה ביותר, היעילה ביותר וכמובן שהוא צריך לבדוק את הקוד בהיבטים של יעילות ואבטחה. מי אמר שלהיות מפתח זו עבודה קלה ?
השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.