לדלג לתוכן

1.3 - אז מה זה באש - הרצאה

פקודות ב-bash

  • ישנם שני סוגים של פקודות ב-bash:
    • פקודות מובנות, פקודות שה-bash מכיר, ניתן לראותן עם הפקודה help. לדוגמה: cd, pwd, exit חשבו עליהן כפקודות שממש בנויות בתוך bash והן חלק מהפיצ'רים של הshell עצמו.
    • פקודות חיצוניות, תוכנות שאנשים פיתחו (בדרך כלל GNU) ואפשר להריצן כפקודות. לדוגמה: ls, mkdir, rmdir הן תוכנות שנמצאות על המחשב והshell יודע להריץ אותם כפקודות ממש כמו הפקודות המובנות.
    • בדומה ל-batch בווינדוס.
  • ב-bash ניתן לבדוק אם פקודה היא מובנית או חיצונית עם הפקודה which.
    ניתן לראות כי שעשינו which ls קיבלנו את הנתיב של הפקודה ls, ומכאן אפשר להסיק שזו פקודה חיצונית. ולא מובנית בbash
    צילום מסך: הרצת which ls בטרמינל, מחזירה /usr/bin/ls - מוכיחה שזו פקודה חיצונית
    לעומת זאת שעשינו which cd לא קיבלנו שום תוצאה וזה אומר שהפקודה היא מובנית ולא נמצאת באיזשהו קובץ במערכת ההפעלה כמו ls.
    צילום מסך: הרצת which cd בטרמינל, לא מחזירה תוצאה - מוכיחה שזו פקודה מובנית

משתני סביבה

משתני סביבה בלינוקס הן משתנים של הshell שכל תוכנה שרצה מתוך הshell יכולה לגשת אליהם.
- ניתן להשתמש בפקודה המובנית set כדי לראות משתני סביבה בshell
צילום מסך: פלט הפקודה set בטרמינל, מציג רשימה ארוכה של משתני סביבה כמו BASH, HOME, PATH וכו'
- יש המון משתני סביבה, בניהם משתנה הסביבה PATH, שמכיל רשימה של תיקיות מופרדות בנקודה-פסיק שבהן bash משתמש כדי למצוא פקודות חיצוניות כשאנחנו מריצים אותן. וכדי לגשת למשתני סביבה, נשתמש ב$.
- כך שאם נרצה להדפיס משתני סביבה, נריץ: echo $PATH למשל.
צילום מסך: הרצת echo $PATH בטרמינל, מציגה את רשימת התיקיות המופרדות בנקודתיים
הדפסנו את משתנה הסביבה PATH, שימו לב שהוא מכיל את כל התיקיות שהshell שלנו bash יעבור עליהן כדי למצוא פקודות להרצה. (פקודות חיצוניות), למשל אחת התיקיות היא "/usr/local/bin" איפה שנמצאת הפקודה ls.

  • ניתן להגדיר משתני סביבה כך:
    צילום מסך: הגדרת משתנה a=1 בטרמינל, ו-echo $a מדפיס 1
  • הבעיה היא שהמשתנה סביבה שהגדרנו פעיל רק בshell הזה, אם נפתח עוד טרמינל דרכו לא נוכל לגשת לa. כדי לדאוג שa יהיה בכל המערכת נשתמש בפקודה export

  • ניתן להשתמש בפקודה-export כדי להפוך את a לגולבלי
    צילום מסך: הרצת export a בטרמינל כדי להפוך את המשתנה a לגלובלי

  • בנוסף הפקודה declare עוזרת לנו גם כדי ליצור משתני סביבה חדשים, ויש לה המון דגלים. בניהם יש את דגל -x שמשמש בדיוק כמו export. כך שאפשר לעשות decalre -x a=1 וזה יעבוד בדיוק כמו export.

  • הפקודה unset משמשת להסרת משתנים: unset a
  • אם נרצה להעביר לפקודה מסויימת, משתני סביבה מסויימים, מבלי ליצור אותם גלובלית לכל הshell עם export, נוכל פשוט לתת אותם לפני הפקודה בצורה הבאה:
    LANG=fr_FR.UTF-8 date
    
  • כאשר נריץ את הפקודה date, שמדפיסה את התאריך, אנחנו משנים environment variable שנוצר על ידי bash שמכיל את השפה של הshell שלנו שהפקודה date משתמשת בו.
  • דוגמה נוספת היא לשנות את הenvrioment variable המוכר PATH, כך שכאשר נרצה להריץ פקודה חיצונית כמו ls, נוכל לשים תיקייה אחרת בPATH- ובכך להריץ תוכנת ls אחרת. שנוכל לכתוב בעצמנו.
  • חשוב להכיר: כל פעם לאחר שהshell נסגר, כל הenvrioment variables נמחקים.
  • בנוסף: למורות שהשתמשנו בset כדי לראות משתני סביבה, ניתן להשתמש ב-set כדי להגדיר אפשרויות שונות ל-shell, הריצו man set כדי לראות דברים שאפשר לעשות עם הפקודה. קיימים המון אפשרויות שונות, בהמשך הקורס וככל שתלמדו יותר על bash תבינו איך האפשרויות השונות יכולות לעזור לנו.
  • הפקודה env משמשמת אותנו כדי להריץ פקודות בסביבה עם משתני סביבה אחרים. (אפשר גם לעשות את אותם דברים בלי הפקודה הזו, היא פשוט נוחה.) למשל נוכל להשתמש בenv כדי לעשות בדיוק מה שעשינו קודם עם date:
    env LANG=fr_FR.UTF-8 date
    
  • אפשר להשתמש בenv גם כדי למחוק את כל משתני הסביבה:
    env -i date
    
  • אם נריץ את env מבלי פרמטרים, נקבל רשימה של כל המשתני סביבה בדיוק כמו עם set.
  • אפשר להשתמש בenv גם כדי להריץ פקודה עם המשתני סביבה בbash, רק בלי משתנה ספציפי.
    env -u PATH ls
    

    הפקודה למעלה לא תעבוד, כי בלי PATH, באש לא יצליח למצוא את הנתיב של ls.

אופרטורים לפקודות

  • האופרטור command > file - redirects את הפלט של הפקודה לקובץ
  • האופרטור command >> file - מוסיף את הפלט של הפקודה לקובץ
    הריצו את הפקודה למטה.
    echo "hello" > file
    cat file
    ls -la > file
    cat file
    ls -la >> file
    cat file
    
  • האופרטור command1 | command2 - pipe - redirects את הפלט של הפקודה הראשונה לקלט של הפקודה השנייה
    הריצו את הפקודה למטה.
    ls -la
    ls -la | head -n 5
    ls -la | head -n 5 | tail -n 2
    
  • האופרטור command 1> file - redirects את הפלט של הפקודה לקובץ בלבד
  • האופרטור command 2> file - redirects את שגיאות הפקודה לקובץ בלבד
    לדוגמה, הפקודה הבאה מחזירה המון שגיאות:
    find / -name "my_file"
    
  • נוכל להריץ את הפקודה כך ואז כל השגיאות והפלט לקבצים שונים
    find / -name "my_file" 2> ./errors
    find / -name "my_file" 1> ./output
    

    קיים קובץ מיוחד בלינוקס בתקייה /dev/null שנוכל להשתמש בו שאנחנו רוצים לזרוק מהshell תוכן של משהו מסויים, נוכל לזרוק את כל השגיאות לdev null וכך להשאיר רק את הפלט שאנחנו אוהבים על המסך.
    find / -name "my_file" 2> /dev/null
    
  • האופרטור command1; command2 - נקודה-פסיק - משלב פקודות
    touch file1
    touch ./Downloads/file2
    ls -la; ls -la ./Downloads;
    
  • האופרטור command1 && command2 - אם הפקודה הראשונה רצה בהצלחה, מריצה את הפקודה השנייה
    command_that_dont_exist && ls -la # it wont run the ls
    echo "Hello" && ls -la # it will run the ls
    
  • האופרטור command1 || command2 - אם הפקודה הראשונה רצה בהצלחה, לא מריצה את הפקודה השנייה ואם הפקודה הראשונה לא צלחה, אז תרוץ הפקודה השנייה.
    command_that_dont_exist || ls -la
    
  • ישנם עוד אופרטורים שנלמד בעתיד

התקנת תוכנות

  • בלינוקס, וספציפית בubuntu קיימת דרך להתקין תוכנות דרך הטרמינל. בהמשך הקורס נפרט יותר על האפשרות, אך כרגע כדי לתקדם נראה
    sudo apt install <your-package> -y
    

    נשים במקום <your-package> את החבילה (התוכנה) שאותה נרצה להתקין, למשל נתקין תוכנת עורך text מתקדמת יותר מnano: בשם mousepad, הריצו:
    sudo apt install mousepad -y
    
  • שימו לב, זה הפעולה תבקש מכם כנראה סיסמא, שימו את הסיסמא שבחרתם כשהתקנתם את הubuntu.
    לאחר שההתקנה הסתיימה והתוכנה mousepad הותקנה בהצלחה, הריצו mousepad a.txt כדי להשתמש בה. (קצת מזכיר את notepad, לחצו על ctrl+s כדי לשמור את הקובץ לפני שאתם סוגרים)
  • בשיעורים הבאים נדבר עוד על apt, ואיך מתקינים תוכנות עם apt.

סיכום

  • התחילו להשתמש בטרמינל כמה שיותר, ככה תשתפרו ותכירו פקודות חדשות.
  • השתמשו המון בman כדי ללמוד על הפקודות שאתם משתמשים בהם, בנוסף בman קיימים עוד המון תיעוד על עוד דברים שהם לא פקודות, תגלו בהמשך :)
  • בשיעורים הבאים נמשיך ללמוד על פקודות, קונספים בלינוקס, ועל כתיבת סקריפטים עם bash.