משתני סביבה בלינוקס מוסברים¶
הקלדתם פעם שם של פקודה בטרמינל, והיא פשוט עבדה, בלי שהייתם צריכים לכתוב את הנתיב המלא אליה? זה קורה בזכות משתני סביבה, ואחד מהם בפרט - PATH. משתני סביבה הם אחד המושגים הבסיסיים ביותר בלינוקס, אבל הם גם לרוב אחד הכי פחות מובנים למתחילים.
מה זה בעצם משתנה סביבה¶
משתנה סביבה הוא זוג של שם וערך, ששמור בזיכרון של המעטפת - shell - ומועבר אוטומטית לכל תוכנית שאתם מריצים ממנה. במקום שכל תוכנית תצטרך לקבל הגדרות בנפרד בכל הרצה, היא יכולה פשוט לקרוא משתני סביבה שכבר קיימים בסביבת ההרצה שלה, כמעט כמו הגדרות גלובליות זמינות לכולם.
אפשר לראות את כל משתני הסביבה הפעילים בטרמינל שלכם עם הפקודה:
ולראות ערך של משתנה ספציפי עם:
הסימן $ לפני שם המשתנה אומר לshell "תחליף את זה בערך של המשתנה", ולא בשם המשתנה עצמו.
PATH - המשתנה הכי חשוב שיש¶
מבין כל משתני הסביבה, PATH הוא כנראה החשוב ביותר להבנה יומיומית. הוא מכיל רשימת תיקיות, מופרדות בנקודתיים, שבהן המערכת מחפשת קבצי הרצה כשאתם מקלידים שם פקודה בלי לציין נתיב מלא.
כשאתם מקלידים ls בטרמינל, המערכת לא "יודעת בקסם" איפה ls נמצא - היא עוברת על כל התיקיות ב-PATH, בסדר שהן מופיעות, עד שהיא מוצאת קובץ בשם ls בתיקייה כלשהי מהרשימה, ומריצה אותו. זו הסיבה שכשמתקינים תוכנית חדשה ומקבלים שגיאת "command not found", לרוב הבעיה היא שהתיקייה שבה התוכנית יושבת פשוט לא נמצאת ב-PATH.
משתני סביבה נפוצים נוספים¶
מלבד PATH, יש כמה משתנים שכדאי להכיר:
- HOME - הנתיב לתיקיית הבית של המשתמש הנוכחי, למשל /home/amit.
- USER - שם המשתמש הנוכחי המחובר.
- SHELL - הנתיב למעטפת שהמשתמש משתמש בה, למשל bash- או zsh-.
- LANG - שפת המערכת והקידוד שלה, שמשפיע על איך תווים מיוחדים מוצגים.
איך מגדירים משתנה סביבה בעצמכם¶
הגדרת משתנה זמנית, שתיעלם ברגע שתסגרו את הטרמינל, היא פשוטה:
המילה export- חשובה - בלעדיה המשתנה יהיה זמין רק לshell הנוכחי, אבל לא לתוכניות שהוא מריץ. אבל אם אתם רוצים שהמשתנה יישאר קבוע בכל פעם שאתם פותחים טרמינל חדש, צריך להוסיף אותו לקובץ ההגדרות של המעטפת, לרוב בשם bashrc.- או zshrc.-, שנמצא בתיקיית הבית שלכם:
מכאן, בכל פעם שterminal חדש נפתח, הקובץ הזה נטען אוטומטית, והמשתנה כבר יהיה שם.
למה זה חשוב במיוחד למפתחים¶
משתני סביבה הם הדרך הסטנדרטית להעביר מידע רגיש כמו מפתחות API וסיסמאות לתוכניות, בלי לכתוב אותם ישירות בקוד. זו גם הסיבה שקבצים כמו env. הפכו לפרקטיקה נפוצה בפרויקטי תוכנה - הם מרכזים את כל ההגדרות התלויות בסביבה במקום אחד, בלי לחשוף אותן בקוד המשותף.
לסיכום¶
משתני סביבה הם התשתית השקטה שגורמת לטרמינל של לינוקס להרגיש חכם - הם מה שגורם לפקודות לעבוד בלי נתיב מלא, ומה שמאפשר לתוכניות שונות לשתף הגדרות בלי תלות זו בזו. ברגע שמבינים איך PATH עובד, הרבה תקלות מוזרות של "command not found" פתאום הופכות ברורות לגמרי.
רוצים להעמיק עוד בטרמינל ובעבודה עם bash? יש לנו קורס לינוקס בסיסי מלא בחינם שמסביר את היסודות שלב אחרי שלב.
יש לכם שאלה על משתני סביבה או הגדרות bash? בואו לדבר בדיסקורד.