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

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

כשעובדים עם שורת הפקודות של לינוקס כדאי להכיר את הנושא של צינורות (pipes) והפניות (redirects).

נשתמש בצינורות (pipes) והפניות (redirections) כדי להפנות את המידע מתוכנה אחת לאחרת, כך שהפלט של תוכנה אחת הופך לקלט של תוכנה שנייה.

לכל תוכנה שרצה במערכת לינוקס יש שלושה מאפיינים (descriptors):

מאפיין

מזהה

משמעות

STDIN

0

קלט סטנדרטי הוא המידע שהתוכנה קולטת

STDOUT

1

פלט סטנדרטי הוא המידע שהתוכנה מייצאת (ברירת המחדל היא הדפסה לטרמינל)

STDERR

2

שגיאה סטנדרטית

לכל אחד מהמאפיינים מוקצה ספרה. את הקלט הסטנדרטי STDIN מזהה הספרה 0. את הפלט הסטנדרטי STDOUT מזהה הספר 1. ואת השגיאה הסטנדרטית STDERR מסמנת הספרה 2.

 

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

והתוצאה היא:

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

 

הפניית STDERR

ברירת המחדל של לינוקס היא להפנות לפלט הסטנדרטי STDOUT שמספרו 1 המוצג על מסך הטרמינל. אם נרצה שהודעות השגיאה יכתבו לקובץ במקום להופיע בטרמינל נצטרך להפנות ל-STDERR שמספרו 2.

נפנה את השגיאות מהרצת הפקודה ל-STDERR:

$ 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

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

$ ls -l shalom.log 1>tracking.log 2>tracking.log

אבל אנחנו קצת חוזרים על עצמנו.

יש גם קיצור דרך. נפנה את ה- STDERR ל-STDOUT ואז נפנה את ה-STDOUT לקובץ:

$ ls -l shalom.log > tracking.log 2>&1

נזהה את ההפנייה ל-STDOUT על ידי כך שנשבץ את התו & לפני הספרה 1 כדי שההודעה לא תכתב לקובץ ששמו '1'.

 

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

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

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

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

 

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

 

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

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

 

 

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

 

= 3 + 3