תחי ישראל - אין לנו ארץ אחרת

תחי ישראל -אין לנו ארץ אחרת

לינוקס - צינורות והפניות

 

מחבר:
בתאריך:

כשעובדים עם שורת הפקודות של לינוקס כדאי להכיר את הנושא של צינורות (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 היא הפנייה למקום מיוחד במערכת הקבצים של לינוקס הידוע בכינויו "החור השחור" כיוון שמה שנשלח אליו נעלם כלא היה. במקרה זה, הודעות השגיאה יעלמו ללא עקבות כי אין לנו עניין בהם. לפעמים זה יכול להועיל.

     

אולי גם זה יעניין אותך:

ניהול תהליכים בלינוקס או איך לא להתעצבן כשהמחשב שוב נתקע

מערכת הקבצים של Linux - מה שרצית לדעת ולא העזת לשאול

לינוקס - צינורות והפניות

 

לכל המדריכים בסדרת הלינוקס

 

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

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

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

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

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

השימוש שלך באתר מהווה ראייה להסכמתך עם הכללים והתקנות שנוסחו בהסכם תנאי השימוש.

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

דג למים הוא כמו ציפור ל...?