מה בדיוק עושה 2>/dev/null?

What Exactly Does 2 Dev Null Do



בין אם אתה משתמש Linux חדש או מתכנת bash מנוסה, סביר מאוד להניח שנתקלת בפקודה הסמויה 2>/dev/null. למרות שפקודה זו נראית מורכבת מבחינה טכנית, מטרתה פשוטה מאוד. הוא מתייחס להתקן null המשמש לדיכוי פלטים של פקודות שונות. מאמר זה יפרק כל חלק בפקודה 2>/dev/null, יסביר את מטרתו ויראה דוגמאות לאופן השימוש בו.

מכשיר Null - '/dev/null'

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







/dev/null הוא מכשיר null - סוג מיוחד של מכשיר וירטואלי. הוא קיים בכל מערכת לינוקס, ומטרתו של מכשיר זה היא להשליך כל דבר שנשלח אליה ולקרוא את סוף הקובץ (EOF). רוב המכשירים הווירטואליים משמשים לקריאת נתונים; עם זאת, /dev /null הוא ייחודי מכיוון שהוא משמש לדיכוי כל מידע שנכתב אליו. במילים פשוטות, הוא משמש חור שחור לכל הנתונים שנכתבים אליו במערכות הפעלה לינוקס.



כעת, הבה נבחן את החלקים הנותרים בפקודה 2> /dev /null



מתאר קובץ - '2'

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





  • '0' עבור קלט סטנדרטי
  • '1' עבור פלט סטנדרטי
  • '2' עבור שגיאת תקן

המונחים הטכניים עבור קלט סטנדרטי, פלט סטנדרטי וזרמי שגיאות סטנדרטיים הם stdin, stdout ו- stderr, בהתאמה.

אנו יודעים כי המספר '2' בפקודה '2>/dev/null' מתייחס לזרם השגיאה הסטנדרטית (stderr).



אופרטור ניתוב קבצים - '>'

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

עד כה הבנו את המטרה מאחורי כל רכיב בפקודה 2>/dev/null. הוא שולח את זרם השגיאות אל /dev /null, המבטל אותו. במילים אחרות, פקודה זו משמשת לביטול ודיכוי יציאות שגיאה. עם זאת, אם אתה ותיק Linux מנוסה, אתה יכול להסתכל על התוכן של הקובץ /dev /null על ידי הפעלת הפקודה הבאה במסוף:

$ls /dev/ריק

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

שימוש ב- 2>/dev/null

מכיוון שאנו יודעים שהפקודה 2>/dev/null משמשת למחיקת שגיאות, היא תמיד תשמש יחד עם פקודות אחרות. נראה גישה דומה בדוגמאות הבאות. אתה יכול לפתוח את הטרמינל על ידי גישה אליו דרך תפריט היישומים או באמצעות קיצור המקשים Ctrl + Alt + T.

בדוגמה הראשונה, נבצע חיפוש בספרייה / sys / אחר מחרוזת אקראית (helloworld במקרה זה). הפקודה לחיפוש היא grep, והטיעון שלה יהיה מחרוזת החיפוש. הזן את הפקודה הבאה כדי לחפש את המחרוזת שלך.

$אחיזה -rשלום עולם/sys/

פקודת חיפוש זו עשויה להציג שגיאות רבות מכיוון שהיא נמצאת בשימוש ללא גישה לשורש. אנו נשלח את זרם השגיאות שלו אל/dev/null באמצעות הפקודה 2>/dev/null כדי למחוק שגיאות אלה.

$אחיזה -rשלום עולם/sys/ 2> /dev/ריק

אנו יכולים לראות שפלט הפקודה הרבה יותר מסודר ופשוט מהקודם. הסיבה היא שהשגיאות נמחקות באמצעות 2> /dev /null, ומכיוון שפקודת grep לא הצליחה למצוא שום קובץ התואם את המחרוזת 'helloworld' שלנו, הוא אינו מציג פלט.

כדי להבין טוב יותר את השימוש ב- /dev /null, נבחן את הדוגמה הבאה של פינג כל אתר (google.com במקרה שלנו). אתה יכול לצלצל ל- google.com על ידי ביצוע הפקודה הבאה:

$פינגGoogle com

אם ברצוננו לא לכלול את כל הפינגים שנכשלו, נוכל להשתמש בפקודה 2>/dev/null:

$פינגGoogle com2> /dev/ריק

במקרה זה, זרם השגיאות הסטנדרטי (המציג את הפינגים שנכשלו ל- google.com) נשלח למכשיר הווירטואלי /dev /null שמבטל אותם.

עם זאת, אם ברצוננו לראות רק את הפינגים הכושלים, נוכל לבצע את הפקודה הבאה:

$פינגGoogle com1> /dev/ריק

כאן, אנו שולחים את זרם הפלט הסטנדרטי (stdout) למכשיר /dev /null שמבטל אותו. כתוצאה מכך, נותר לנו רק הפינגים שלא הצליחו להגיע לשרת google.com. עם זאת, במקרה שלנו, לא היו פינגים כושלים. אנו יכולים גם לכוון את stdout ו- stderr למיקומים שונים. זה מועיל אם ברצוננו למחוק פלט ולאחסן שגיאות ביומן או להיפך. אתה יכול להריץ את הפקודה הבאה כדי לאחסן את הפינגים שנכשלו ביומן שגיאות תוך מחיקת הפלט הסטנדרטי של הפקודה ping:

$פינגGoogle com1> /dev/ריק2>error.log

בהזדמנויות, ייתכן שתרצה לדכא את כל הפלט של פקודה (כולל פלט רגיל ושגיאות סטנדרטיות). אנו יכולים להשיג זאת על ידי שימוש במכשיר /dev /null בצורה מעט שונה. אתה יכול להקליד את הפקודה הבאה כדי לדכא את כל הפלט:

$פינגGoogle com> /dev/ריק2> &1

שים לב שסדר הפקודות כאן מאוד חשוב. לאחר ביצוע הפקודה ping, '>/dev/null' אומר למערכת לדכא את הפלט, ו- '2> & 1' מפנה את זרם השגיאות הסטנדרטי לפלט סטנדרטי. בדרך זו, כל הפלט של הפקודה מושלך.

סיכום

פיתחנו את הפקודה 2>/dev/null והדוגמאות הפשוטות במאמר זה, ובתקווה, עכשיו אתה מבין מה כל חלק בו עושה. עם זאת, זהו רק קצה הקרחון; מכשירי null משמשים במספר דרכים בתכנות bash. חלק מהשימושים המתקדמים יותר כוללים בדיקת קיומם של קבצים, אוטומציה של התקנות חבילות והימנעות מסקריפטים להיתקל בחריגים לא רצויים.