סביבת העבודה: Terminal וקובץ קוד ראשון

מטרות השיעור
  • להבחין בין Terminal, Shell ו-Command
  • לפרק פקודה לחלקיה — שם, ארגומנטים ודגלים
  • להסביר למה כותבים קוד בקובץ, ומה אומרת הסיומת .py
  • להכיר מבנה תיקיות מסודר לקורס ואת כללי השמות של קבצים ותיקיות

מה בשיעור

השיעור הזה בנוי משני פרקים קצרים, באותו סדר כמו במצגת. את הכלים עצמם (Python, VS Code, Git ו-Docker) כבר התקנו בנושא התקנות.

  1. פרק ראשון — Terminal, Shell ופקודות בסיסיות (PowerShell / Bash)
  2. פרק שני — תיקיית עבודה וקובץ Python ראשון

פרק ראשון: Terminal, Shell ופקודות בסיסיות (PowerShell / Bash)

מה נלמד?

  • מה ההבדל בין Terminal ל-Shell.
  • איך בנויה פקודה.
  • פקודות הבסיס שכל מפתח משתמש בהן כל יום: ניווט, הצגה, יצירה, העתקה, העברה, מחיקה.
  • PowerShell (Windows) מול Bash/Zsh (Mac/Linux).

למה צריך את זה?

  • Git (נושא Python), התקנת חבילות עם pip, והרצת שרת (נושא Backend ומסדי נתונים) נעשים מה-Terminal.
  • על שרתים אמיתיים בענן אין ממשק גרפי, יש רק Terminal.
  • מהרגע שמתרגלים, Terminal מהיר יותר מעכבר: פקודה אחת יכולה ליצור 5 תיקיות בבת אחת.

הסבר מהבסיס

Terminal, Shell, Command

שלושה מושגים שמבלבלים בהתחלה:

מושגמה זהדוגמה
Terminalהחלון: התוכנה שמציגה טקסט ומקבלת מקלדת.Windows Terminal, ה-Terminal של VS Code, Terminal.app במק
Shellהמפרש: התוכנה שרצה בתוך החלון, קוראת את מה שהקלדתם ומבצעת.PowerShell, Bash, Zsh, cmd
Commandהפקודה עצמה.cd week-1
אנלוגיה

Terminal הוא הטלפון, Shell הוא האדם בצד השני שמבין את השפה ומבצע, Command הוא המשפט שאתם אומרים. אפשר להחזיק אותו טלפון (Terminal) ולדבר עם אנשים שונים שמבינים שפות שונות (PowerShell או Bash).

  • PowerShell — ה-Shell המודרני של Windows.
  • Bash — ה-Shell הנפוץ בלינוקס. Zsh — ברירת המחדל במק, וכמעט זהה ל-Bash בפקודות הבסיס.
  • cmd — ה-Shell הישן של Windows. לא נשתמש בו.

ה-Prompt

ה-Prompt הוא הטקסט שה-Shell מציג כשהוא מחכה לפקודה:

PS C:\Users\dana\dev\kodkod6>        ← PowerShell: "PS" + current directory
dana@laptop:~/dev/kodkod6$           ← Bash: user@computer:directory$

~ (טילדה) בבאש = תיקיית הבית של המשתמש.

מבנה של פקודה

command   argument(s)    flag(s)/option(s)
  cp      notes.txt  backup.txt
  ls      -la
  mkdir   week-2
  • Command — מה לעשות.
  • Argument — על מה לעשות (קובץ, תיקייה).
  • Flag / Option — איך לעשות. בבאש: -a או --all. ב-PowerShell: -Recurse, -Force.
  • רווח מפריד בין החלקים. לכן שמות עם רווחים צריכים מירכאות: cd "My Folder". וזו עוד סיבה לא לשים רווחים בשמות.

תחביר

טבלת הפקודות המרכזית

פעולהPowerShellBash / Zsh
איפה אני?pwdpwd
מה יש כאן?ls (או dir)ls
כולל קבצים מוסתריםls -Forcels -a
כניסה לתיקייהcd week-1cd week-1
תיקייה אחת למעלהcd ..cd ..
לתיקיית הביתcd ~cd ~ (או רק cd)
יצירת תיקייהmkdir week-2mkdir week-2
יצירת קובץ ריקNew-Item notes.txttouch notes.txt
הצגת תוכן קובץcat notes.txtcat notes.txt
העתקהcp a.txt b.txtcp a.txt b.txt
העברה / שינוי שםmv a.txt b.txtmv a.txt b.txt
מחיקת קובץrm notes.txtrm notes.txt
מחיקת תיקייה עם התוכןrm -r folderrm -r folder
ניקוי מסךcls (או clear)clear
עזרה על פקודהGet-Help cpman cp (יציאה: q)

ב-PowerShell, ls, cat, cp, mv, rm הם כינויים (Aliases) לפקודות ארוכות יותר (Get-ChildItem, Get-Content, Copy-Item…). כך אותן פקודות בסיס עובדות בשתי הסביבות.

קיצורי מקלדת שחוסכים שעות

מקשמה עושה
Tabהשלמה אוטומטית של שמות קבצים ותיקיות. מקלידים cd we + Tab ומתקבל cd week-1.
↑ / ↓מעבר בין פקודות קודמות.
Ctrl + Cעצירת הפקודה שרצה.
Ctrl + Lניקוי מסך.

דוגמת קוד ראשונה

ניווט ובדיקה. בדרך נראה את ה-Prompt משתנה:

pwd
cd ~
pwd
cd dev\kodkod6
ls

פלט לדוגמה:

Path
----
C:\Users\dana\dev\kodkod6\week-1

Path
----
C:\Users\dana

    Directory: C:\Users\dana\dev\kodkod6

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          06/10/2026     09:12                sandbox
d----          06/10/2026     08:40                week-1

פירוק הקוד שורה אחר שורה

פקודהמה קרה
pwdprint working directory: מדפיס איפה אנחנו.
cd ~קפיצה לתיקיית הבית.
pwdמאמת שאכן עברנו.
cd dev\kodkod6נתיב יחסי, מתיקיית הבית לתוך dev, ואז לתוך kodkod6.
lsמציג את התוכן. ב-PowerShell, d בעמודת Mode מסמן Directory (תיקייה).

דוגמה נוספת

נבנה את מבנה התיקיות של נושא Python בפקודות בלבד, ניצור קבצים, נעתיק, נשנה שם ונמחק:

cd ~\dev\kodkod6
mkdir week-2
cd week-2
mkdir day-1, day-2, day-3
New-Item day-1\notes.txt
ls
cp day-1\notes.txt day-2\notes.txt
mv day-2\notes.txt day-2\summary.txt
ls day-2
rm day-1\notes.txt
cd ..

בבאש/זד-שֶל (Mac / Linux), אותו דבר:

cd ~/dev/kodkod6
mkdir week-2
cd week-2
mkdir day-1 day-2 day-3
touch day-1/notes.txt
ls
cp day-1/notes.txt day-2/notes.txt
mv day-2/notes.txt day-2/summary.txt
ls day-2
rm day-1/notes.txt
cd ..

פירוק:

  • mkdir day-1, day-2, day-3 — ב-PowerShell אפשר ליצור כמה תיקיות בבת אחת עם פסיקים. בבאש — עם רווחים.
  • New-Item / touch — יוצרים קובץ ריק.
  • cp מקור יעד — העתקה: המקור נשאר, ונוצר עותק.
  • mv מקור יעד — העברה. אם היעד באותה תיקייה עם שם אחר, זה בעצם שינוי שם.
  • rm — מחיקה.
  • cd .. — חזרה ל-kodkod6.

טעות נפוצה

הטעות: rm חושב שזה כמו “מחק” בסייר הקבצים.

rm לא שולח לסל המחזור!

קובץ שנמחק עם rm נמחק לצמיתות. אין Undo ואין Recycle Bin. ובמיוחד: לעולם אל תריצו rm -r על נתיב שאתם לא בטוחים בו, ואל תעתיקו מהאינטרנט פקודות שמכילות rm -rf / או sudo rm.

הרגל בטוח: לפני rm, הריצו ls על אותו נתיב בדיוק ובדקו מה תמחקו.

טעות שנייה — רווחים בשמות:

cd My Projects
Set-Location: A positional parameter cannot be found that accepts argument 'Projects'.

ה-Shell ראה שני ארגומנטים: My ו-Projects. התיקון: cd "My Projects". ועדיף מראש: my-projects.

טעות שלישית — להריץ קוד Python בתוך ה-Shell:

PS> print("hi")

print היא פקודה של Python, לא של PowerShell. שם הפקודה מורץ בתוך Python: python -c "print('hi')", או בתוך קובץ .py. וההפך, cd לא עובד בתוך קובץ Python.

סיכום

  • Terminal = החלון. Shell = המפרש (PowerShell / Bash / Zsh). Command = הפקודה.
  • פקודה = שם + ארגומנטים + דגלים, מופרדים ברווחים.
  • ניווט: pwd, ls, cd, cd .., cd ~.
  • קבצים: mkdir, New-Item / touch, cp, mv, rm. ו-rm לא שולח לסל המחזור.
  • Tab להשלמה, ↑ לפקודה קודמת, Ctrl + C לעצירה.

דוקומנטציה רשמית

פרק שני: תיקיית עבודה וקובץ Python ראשון

מה נלמד?

  • למה כותבים קוד בקובץ, ומה זה בעצם קובץ קוד.
  • איך בונים תיקיית עבודה (Workspace Folder) מסודרת לכל הקורס.
  • מה קורה כשמריצים קובץ: ה-Interpreter קורא אותו מלמעלה למטה.
  • מה זה התיקייה הנוכחית (Current Directory), ולמה היא הסיבה לשגיאה הנפוצה ביותר של מתחילים.

למה צריך את זה?

  • שורה אחת שמקלידים ב-Terminal נעלמת ברגע שסוגרים את החלון. תוכנית אמיתית היא עשרות ומאות שורות — צריך לשמור אותן.
  • בקורס נכתוב עשרות קבצים: תרגילים, פרויקטים, שרתים. בלי סדר, אחרי שבוע כבר לא תמצאו כלום. מפתחים מקצועיים שומרים כל פרויקט בתיקייה משלו — וזו גם הדרך שבה Git ו-VS Code מצפים לעבוד: פרויקט = תיקייה.
  • הרבה שגיאות של מתחילים (“הקובץ לא נמצא”) נובעות מכך שה-Terminal נמצא בתיקייה אחרת מזו של הקובץ.

הסבר מהבסיס

קובץ ותיקייה

  • קובץ (File) — יחידת מידע ששמורה על הדיסק: מסמך, תמונה, או קובץ קוד.
  • תיקייה (Folder / Directory) — “מגירה” שמכילה קבצים ותיקיות נוספות.
  • נתיב (Path) — הכתובת המלאה של קובץ, מהשורש ועד אליו. למשל: C:\dev\kodkod6\week-1\hello.py.

מה זה בעצם קובץ קוד

Textקובץ קוד הוא קובץ טקסט רגיל — אפשר לפתוח אותו בכל עורך טקסט.
.pyהסיומת אומרת למערכת ההפעלה ול-VS Code: “זה קוד Python”. VS Code רואה אותה ומפעיל צביעת תחביר וכפתור הרצה.
Interpreterתוכנת Python קוראת את הקובץ ומבצעת אותו. בלעדיה, הקובץ הוא סתם טקסט.
Top to Bottomהביצוע מתחיל בשורה הראשונה וממשיך שורה אחרי שורה עד הסוף.

“התיקייה הנוכחית” (Current Directory)

ה-Terminal תמיד “עומד” בתיקייה אחת — היא מופיעה משמאל לסמן (ה-Prompt):

PS C:\dev\kodkod6\week-1>

כשכותבים python hello.py, Python מחפשת את hello.py בתיקייה הנוכחית בלבד. אם הקובץ בתיקייה אחרת — היא לא תמצא אותו.

אנלוגיה

ה-Terminal הוא כמו אדם שעומד בחדר מסוים בבית. אם תבקשו ממנו “תביא את הספר מהמדף” — הוא יחפש רק במדף שבחדר שבו הוא עומד. אם הספר בחדר אחר, צריך קודם להגיד לו לעבור חדר (פקודת cd), או לתת לו את הכתובת המלאה.

מבנה תיקיות מומלץ לקורס

C:\dev\kodkod6\          (Mac: ~/dev/kodkod6/)
├── week-1\
│   └── hello.py
├── week-2\
├── week-3\
└── week-4\
  • תיקייה אחת לכל הקורס (kodkod6), ובתוכה תיקייה לכל שבוע.
  • כללים לשמות: אותיות אנגליות קטנות, בלי רווחים ובלי עברית. במקום רווח משתמשים במקף - לתיקיות ובקו תחתון _ לקבצי Python (my_file.py). רווחים ועברית בנתיב גורמים לתקלות בכלים רבים.
  • ב-VS Code פותחים את כל התיקייה kodkod6 (File → Open Folder), ולא קובץ בודד.

איך מריצים קובץ

נניח שבתיקייה week-1 יש קובץ hello.py, ובו שורה אחת שמדפיסה Hello, World!. המרצה ידגים את ההרצה על המסך:

cd week-1
python hello.py

פלט:

Hello, World!
פקודהמה היא עושה
cd week-1change directory — מעבירה את ה-Terminal לתיקייה שבה הקובץ נמצא.
python hello.pyמפעילה את ה-Interpreter ומוסרת לו את הקובץ. הוא קורא אותו מלמעלה למטה ומבצע כל שורה.

דרך הרצה שנייה: כפתור Run. ב-VS Code, כשקובץ .py פתוח, יש למעלה מימין משולש ▷ (Run Python File). לחיצה עליו פותחת Terminal ומריצה את הקובץ עם הנתיב המלא שלו — ולכן לא צריך cd.

טעות נפוצה

הטעות: להריץ מהתיקייה הלא נכונה.

PS C:\dev\kodkod6> python hello.py
can't open file '...hello.py':
[Errno 2] No such file or directory
  • ה-Terminal עומד ב-kodkod6, והקובץ נמצא ב-kodkod6\week-1.
  • Python מחפשת את הקובץ רק בתיקייה הנוכחית.
  • הפתרון: קודם cd week-1, ורק אז להריץ. או להריץ עם הנתיב: python week-1\hello.py.

טעות שנייה: לא לשמור לפני הרצה. אם בלשונית של הקובץ יש עיגול ⚪ במקום ✕, הקובץ לא נשמר, ו-Python תריץ את הגרסה הישנה. מומלץ להפעיל File → Auto Save.

סיכום

  • קובץ קוד הוא קובץ טקסט. הסיומת .py אומרת שזה קוד Python.
  • פרויקט = תיקייה. שמות באנגלית, בלי רווחים: kodkod6/week-1/hello.py.
  • ה-Interpreter קורא את הקובץ ומבצע אותו מלמעלה למטה.
  • התיקייה הנוכחית היא המקום שבו ה-Terminal עומד — ושם Python מחפשת את הקובץ.
  • מריצים עם cd לתיקייה ואז python file.py, או עם כפתור ▷ ב-VS Code.

דוקומנטציה רשמית

תרגול

שאלות הבנה על החומר של השיעור — בלי קוד.

תרגיל 1: Terminal, Shell או Command?

לכל משפט כתבו אם הוא מתאר Terminal, Shell או Command:

  1. החלון שבו מקלידים ורואים את הפלט.
  2. mkdir week-2
  3. PowerShell ב-Windows, או Bash ב-Mac וב-Linux.
  4. התוכנה שמבינה את מה שהקלדנו ומבצעת אותו.
  5. cd ..
הצג פתרון
  1. Terminal — החלון.
  2. Command — הוראה אחת: יצירת תיקייה.
  3. Shell — אלה שמות של Shell-ים שונים.
  4. Shell — “המוח” שמפרש ומבצע את הפקודות.
  5. Command — הוראה אחת: מעבר תיקייה אחת למעלה.

הכלל: ה-Terminal הוא החלון, ה-Shell הוא התוכנה שרצה בתוכו, ו-Command הוא מה שמקלידים.

תרגיל 2: מה הנתיב המלא?

מבנה התיקיות של הקורס:

C:\dev\kodkod6\
├── week-1\
│   └── hello.py
└── week-2\
  1. מה הנתיב המלא של הקובץ hello.py?
  2. ה-Terminal עומד ב-C:\dev\kodkod6\week-2. איזו פקודה מחזירה אותו ל-kodkod6?
  3. למה כדאי לשים את כל קבצי הקורס תחת תיקייה אחת, ולא על שולחן העבודה?
הצג פתרון
  1. C:\dev\kodkod6\week-1\hello.py
  2. cd .. — שתי נקודות = תיקייה אחת למעלה.
  3. כשהכול תחת kodkod6 קל למצוא כל קובץ גם בעוד חודש, הנתיבים קצרים ובלי רווחים, ואפשר לפתוח את כל הקורס ב-VS Code בבת אחת.

תרגיל 3: מבנה של פקודה

בכל אחת מהפקודות הבאות — מהו שם הפקודה, מה הארגומנט ומה הדגל (אם יש)?

git --version
cp notes.txt backup.txt
ls -la
mkdir week-2
הצג פתרון
פקודהשם הפקודהארגומנטיםדגל
git --versiongit—--version
cp notes.txt backup.txtcpnotes.txt, backup.txt—
ls -lals—-la
mkdir week-2mkdirweek-2—

הכלל: פקודה = מה עושים, ארגומנט = על מה, דגל = איך (שינוי התנהגות, מתחיל במקף).

תרגיל 4: ניווט בתיקיות

ה-Terminal עומד ב-C:\dev\kodkod6. כתבו את רצף הפקודות שעושה את הדברים הבאים, לפי הסדר:

  1. יוצר תיקייה בשם week-1.
  2. נכנס אליה.
  3. מציג איפה ה-Terminal עומד עכשיו.
  4. חוזר תיקייה אחת למעלה.
הצג פתרון
mkdir week-1
cd week-1
pwd
cd ..
  • mkdir — יצירת תיקייה.
  • cd week-1 — מעבר לתיקייה.
  • pwd — מדפיס את הנתיב הנוכחי: C:\dev\kodkod6\week-1.
  • cd .. — שתי נקודות = תיקייה אחת למעלה.

תרגיל 5: “No such file or directory”

הקובץ hello.py נמצא ב-C:\dev\kodkod6\week-1. סטודנט מריץ:

PS C:\dev\kodkod6> python hello.py
can't open file '...hello.py': [Errno 2] No such file or directory
  1. למה Python לא מוצאת את הקובץ, אם הוא קיים?
  2. תנו שתי דרכים לתקן.
הצג פתרון
  1. Python מחפשת את הקובץ רק בתיקייה הנוכחית — התיקייה שבה ה-Terminal עומד (kodkod6). הקובץ נמצא בתת-תיקייה week-1, ולכן הוא לא נמצא.
  2. שתי דרכים:
    • לעבור קודם לתיקייה: cd week-1, ואז python hello.py.
    • להריץ עם הנתיב: python week-1\hello.py.

(אפשרות שלישית: כפתור ▷ Run ב-VS Code, שמריץ עם הנתיב המלא של הקובץ.)