Bash Tips
982 subscribers
14 photos
4 files
45 links
רוצים להשתמש בלינוקס אבל לא ממש מכירים את הכלים שהיא מספקת לעבודה?

בערוץ הבא תמצאו אוסף טיפים שימושיים ב-Bash והכרות עם כלים שונים שעשויים לחסוך מאמץ ועבודה בכתיבת סקריפטים ומימוש אוטומציות.
Download Telegram
צינורות ושמות mkfifo
רמת קושי: #advanced

שימוש יומיומי בבאש מכריח אותנו להכיר את הצורך ב pipe זוהי בעצם הדרך לשרשר מידע של פקודה אחת לאחרת, היום נכיר חבר חדש המוכר בשם named pipe

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

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

מספר דרכים בכדי ליצור named pipe

$ mkfifo mypipe
$ mknod mypipe p
$ ls -la
prw-rw-r-- 1 user user 0 אוק 24 23:01 mypipe
...

אנו יוצרים "קובץ" בתיקייה הנוכחית בשם mypipe (מסומן עם p) אליו נוכל לשלוח איזה מידע שנרצה, פעולת הכתיבה לא תסתיים עד שהצד השני יקרא את התוכן ולכן נרצה להריץ את הפקודה ברקע כדי לא לעצור את התהליך.

$ echo "Sending data through mypipe" > mypipe &
[1] 10839

$ cat < mypipe
[1] + 10839 done echo "Sending data through mypipe" > mypipe
Sending data through mypipe

או אם רוצים להאזין לכל תוכן שמועבר בלי שיסגר ה pipe

$ tail -f mypipe

סגירת ה named pipe היא כמו כל קובץ פשוט למחוק עם rm


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

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

mkfifo /tmp/logpipe
while true
do
read record </tmp/logpipe
echo $(date): "$record" >>/tmp/app.log
done

#mkfifo
#named_pipe

@bash_tips