לדלג לתוכן

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

פקודות ב-bash

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

משתני סביבה

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

  • ניתן להגדיר משתני סביבה כך:
    Pasted image 20250126000043.png
  • הבעיה היא שהמשתנה סביבה שהגדרנו פעיל רק בshell הזה, אם נפתח עוד טרמינל דרכו לא נוכל לגשת לa. כדי לדאוג שa יהיה בכל המערכת נשתמש בפקודה export

  • ניתן להשתמש בפקודה-export כדי להפוך את a לגולבלי
    Pasted image 20250126000315.png

  • בנוסף הפקודה 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 - מפנה את הפלט של הפקודה לקובץ
  • האופרטור command >> file - מוסיף את הפלט של הפקודה לקובץ
    הריצו את הפקודה למטה.
    echo "hello" > file
    cat file
    ls -la > file
    cat file
    ls -la >> file
    cat file
    
  • האופרטור command1 | command2 - צינור (pipe) - מפנה את הפלט של הפקודה הראשונה לקלט של הפקודה השנייה
    הריצו את הפקודה למטה.
    ls -la
    ls -la | head -n 5
    ls -la | head -n 5 | tail -n 2
    
  • האופרטור command 1> file - מפנה את הפלט של הפקודה לקובץ בלבד
  • האופרטור command 2> file - מפנה את שגיאות הפקודה לקובץ בלבד
    לדוגמה, הפקודה הבאה מחזירה המון שגיאות:
    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.