א צינור או פיפe הוא למעשה צינור זמין עבור UNIX / Linux והוא מעשי ביותר. אך כדי להבין היטב מהו צינור, עליך לדעת שבסביבת * nix יש לו 3 זרמי נתונים מובנים. פירוש הדבר שלמי שלא יודע פירושו שהנתונים יכולים לנסוע לשלוש נקודות או ממנה.
אז תבין זאת בצורה טובה יותר, אבל מה שאני רוצה שיהיה לך ברור עכשיו זה שעם צינור מה שאתה יכול לעשות זה לתעל מאחת הנקודות האלה לאחרים. זה מאפשר לקחת את הפלט או התוצאה שתוכנית זורקת לעבר הקלט של אחר לשימוש אותו וכו '. אנסה להסביר זאת בכמה דוגמאות מעשיות שיעזרו לך להבין זאת היטב.
הנקודות האלה שדיברתי עליהן או זרמי נתונים, הם:
- סטדין: תואם 0 והוא הקלט הסטנדרטי. באופן כללי, הקלט הסטנדרטי עבור מערכת * nix הוא המקלדת. כלומר, מה שתקליד יהיה המידע המשמש. יש לה מכשיר מיוחד המשויך אליו שהוא / dev / stdin.
- stdout: מזוהה עם 1, זה הפלט הסטנדרטי. בדרך כלל זה מתאים לצג או למסך של המחשב שלך, שם אתה יכול לראות את המידע. לדוגמא, כאשר אתה מפעיל פקודה ls רשימת התוכן תוצג על המסך, נכון? המכשיר המשויך הוא / dev / stdout.
- סטדרר: מזוהה עם 2, זהו פלט השגיאה הסטנדרטי, כאשר מתרחשת שגיאה בתוכנית. המכשיר המשויך הוא / dev / stderr.
בעזרת צינור תוכלו להעביר את הפלט הסטנדרטי או ה- stdout של פקודה אחת לעבור ישירות לקלט הרגיל של אחר. כלומר, אתה יכול לגרום לתוכנית אחת להזין תוכנית אחרת. במקום להשתמש בפרמטרים שהוזנו במקלדת, צינור מספק את המידע שנוצר על ידי הפקודה הקודמת דרך צינור זה המיוצג על ידי |
עם הדוגמאות אתה תבין טוב יותר. נניח שתרצה לרשום את תוכן הספרייה, אך אתה מעוניין רק לראות את השמות התואמים את המילה doc. אז אתה יכול להשתמש בצינור לצינור הפלט של ls ולקחת אותו לקלט של מסנן grep כדי לומר לו להציג רק את אלה שתואמים לדפוס זה:
ls -l | grep doc
אז במקום להציג לך את כל השמות, זה פשוט מראה לך אלה שבאמת מעניינים אותך. אתה יכול לעשות את אותו הדבר עם תוכן הקובץ. תאר לעצמך שאתה רוצה לראות רק את המידע על התהליכים ששמו firefox ולא את כולם:
ps aux | grep firefox
במקום להציג את כל הפלט של תוכנית ה- ps על המסך (stdout), מה שהיא עושה זה לתעל אותה לכניסה של מסנן ה- grep ומראה רק בפלט מה מתאים לדפוס Firefox במקרה זה ...
אם אתה רוצה, אתה יכול להשתמש צינורות שונים להביא את הפלט של פקודה אחת לקלט של פקודה שנייה אחרת, ואת הפלט של אותה שנייה לקלט של שלישית, וכן הלאה. לדוגמה:
cat libro | grep love | more
כפי שאתה רואה, האפשרויות רבות, כל מה שאתה יכול לדמיין ומותר לך. אפילו הצג רק את השורות הראשונות והאחרונות של הקובץ, ספור את השורות שנכנסות ל- wc שמגיעות מהרשימה, ואפילו ממיין אותן:
cat listado | head cat listado | tail cat listado | wc -l cat listado | sort
אתה יכול גם לעבוד עם שגיאות עם | & לדוגמא חפש את המילה התראה בפלט של סקריפט אם היא נכשלת:
./miscript |& grep alerta
ולבסוף, ישנן שתי פקודות הקשורות קשר הדוק לצינורות טי ו- xargs וכי הם יכולים להרחיב עוד יותר את האפשרויות של אלה. במקרה של טי, מה שהוא יאפשר זה להציג את התוצאה של התוכנית הקודמת בפלט הסטנדרטי, כך שתוכלו לראות אותה, ובנוסף לכך, היא יכולה לצינור אותה לקובץ אחר. דוגמה לכך תהיה אם תרשום את תוכן הספרייה ותרצה לראות את הפלט של ls -l כרגע ושמור אותה ברשימת הקבצים.txt:
ls -l | tee listado.txt
אם אינך משתמש בטי, לא תוכל לראות את הפלט במסוף שלך ...
Y קסארגס במקרים מסוימים זה מעניין עוד יותר. במקרה זה הוא מסוגל לבנות פקודה מהקלט הסטנדרטי שהוא מקבל דרך הצינור. במילים אחרות, היא מסוגלת לתפוס את כל מה שתוכנית קודמת השיקה באמצעות הפלט שלה ומגיעה ל xargs דרך הצינור כדי להעביר אותה בתור לפקודה אחרת כטיעונים.
עדיין לא מבין? אתה תראה את זה הרבה יותר טוב עם דוגמא. דמיין שאתה רוצה להסיר את כל קבצי thumbs.db הארורים מספרייה, דיסק או מחיצה. אם ישנם רבים, ייתכן שאי אפשר ללכת בזה אחר זה עם הפקודה rm למחוק אותם באופן ידני. אבל עם xargs אתה יכול לעשות הכל אוטומטי. ואתה יכול לעשות זאת באמצעות חיפוש כדי לאתר אותם, לשלוח את הפלט דרך קלט ה- xargs וזה בתורו ייתן ל- rm את השמות כטיעונים. לכן כל האיתורים יימחקו באופן אוטומטי:
find ./ -name "thumbs.db" | xargs rm
לדוגמא, נניח שמצא אתרים /home/name/thumbs.db, /media/test/thumbs.db ו- /tmp/thumbs.db. ובכן, קסארגס יעביר אותם ל- rm כאילו היו ויכוחים. כלומר, כאילו ביצענו: rm /home/name/thumbs.db, ואז rm /media/test/thumbs.db ואז rm /tmp/thumbs.db.
מצוין, מידע זה חשוב מאוד עבורנו משתמשי הלינוקס
איזה מאמר טוב, כרגע כשאני לומד הפניית קלט / פלט בספר שורת הפקודה של לינוקס. ברור לי יותר לגבי הצינורות (Pipeline) ושלושת זרמי הנתונים. התרומה מוערכת. ברכות.
הדוגמה עם xargs התאימה לי כמו כפפה ליד. בדיוק היום התמודדתי עם אותו פרט קטן של יציאה מרובה שהיה עלי לשלוח "בחלקים". קסארגס הלך על פינטוריטה.
אסיר תודה!