Command Line Student Material

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

נקודות עיקריות

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

מהי שורת הפקודה?

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

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

  • אמצעי לאינטראקציה עם תוכנת מחשב שבו המשתמש מקליד פקודות. לדוגמה:
open README.txt
  • דרך לנווט במחשב ולהפעיל אותו בלי עכבר.
  • דרך לא גרפית ליצור, לקרוא, לעדכן, להפעיל ולמחוק את הקבצים והספריות שלכם. למשל:
mv README.txt readme.txt

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

מתי משתמשים בשורת הפקודה?

מפתחים מעדיפים לעיתים קרובות ממשקי שורת פקודה (CLI):

  • הם מספקים דרך תמציתית יותר לשלוט בתוכנה או במערכת הפעלה. למה? הכול קורה באותו חלון, ועם תרגול, קל יותר למצוא ולשנות דברים באמצעות מקשי הקיצור מאשר באמצעות העכבר.
  • הם חושפים בקלות אפשרויות לשליטה בפקודה. למה? תפריטים בממשקי משתמש גרפיים מספקים מספר קטן מאוד של אפשרויות. בשורה של פקודה יש מאות פקודות, וכמה תווים שמוסיפים לפקודה יכולים לגרום לה לבצע הרבה דברים שונים. למשל:
  • ls קבצים של רשימות בסיסיות
  • ls -a הצגת רשימה של כל הקבצים, כולל קבצים שמוסתרים בדרך כלל
  • ls -l רשימה ארוכה עם מידע על כל קובץ
  • ls -R רקורסיבי, מציג את התוכן של ספריות
  • ls -la רשימה ארוכה של כל הקבצים
  • הם מאפשרים לבצע פעולות על הרבה קבצים בבת אחת בצורה פשוטה.
for i in *.png; do pngtogif $i `echo $i | sed s/png/gif/`; done
  • הם מספקים אמצעי לתכנות מערכת ההפעלה (תוכניות מעטפת), למשל, הדוגמה שלמעלה היא תוכנית מעטפת פשוטה מאוד שנועדה לשנות תמונות עם שמות קבצים שמסתיימים ב-.png.

שורת הפקודה בפעולה

חלקי פקודה בשורת הפקודה

כל הפקודות מורכבות משלושה חלקים:

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

מסגור

הקשר ומטרה

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

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

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

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

יעדי למידה

התלמידים יוכלו

  • שימוש בטרמינל כדי לנווט בין קבצים ותיקיות
  • הצגת רשימת התכנים של תיקייה
  • יצירת קבצים ותיקיות בשורת הפקודה
  • העברת קבצים ותיקיות
  • העתקת קבצים ותיקיות
  • מחיקת קבצים ותיקיות

תחילת העבודה

גישה לטרמינל

המסגרת והמטרה של הקטע

הטרמינל מספק ממשק שורת פקודה (CLI) למערכת ההפעלה. באמצעותה אפשר לתת למחשב הוראות ישירות שמבוססות על טקסט.

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

כשמפעילים את הטרמינל, הוא מתחיל בספריית הבית של המחשב (השם שנתתם למחשב). ספריית הבית מסומנת באמצעות הטילדה ~.

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

שינוי ספריות

המסגרת והמטרה של הקטע

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

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

# See your current location - abbreviation for 'print working directory'
pwd

רשימת הקבצים והספריות הזמינים

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

כדי לראות אילו קבצים או תיקיות נמצאים בספרייה הנוכחית, משתמשים בפקודה ls (קיצור של list) כדי לראות את התוכן בתצוגת רשימה.

# See files and folders in current location - abbreviation for 'list'
ls

שינוי ספריית העבודה

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

התחביר שמשמש להעברה שלכם לספרייה חדשה (שנקראת גם תיקייה) בשורת הפקודה הוא cd ואחריו (באותה שורה) הנתיב לתיקייה החדשה.

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

# Change your current working directory (current location)
# Abbreviation for 'change directory'
cd Documents

אפשר גם לנווט החל מספריית הבית ~.

# Add a `~/` to begin from the home directory.
cd ~/Downloads

אם שיניתם את הספריות אבל אתם צריכים לחזור לספריית הבית, אתם יכולים לעשות זאת על ידי חזרה ישירה לספריית הבית באמצעות ~, או על ידי שימוש ב-.. כדי לעלות רמה אחת.

# Option 1: navigate directly to the home directory
cd ~

# Option 2: navigate back one level
cd ..

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

אתגרים קצרים

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

טיפ מקצועי: השלמה אוטומטית באמצעות tab

כשמשנים ספריות באמצעות הפקודה cd, טעות הקלדה אחת תמנע את ההפעלה התקינה של הפקודה. עם זאת, שימוש במקש tab יבצע השלמה אוטומטית עם השם של כל הספריות הזמינות שנמצאות בספרייה הנוכחית. לכן, במקום להקליד cd Documents, מקלידים רק cd Do ואז מקישים על המקש tab, והטרמינל ישלים אוטומטית את הפקודה cd Documents/ (התו / בסוף הוא אופציונלי, אבל הוא מציין שהיעד הוא ספרייה).

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

  1. אי אפשר לגשת לספרייה שאליה רוצים לנווט מהספרייה הפעילה הנוכחית.
  2. יש שתי ספריות עם שמות התחלתיים דומים (לדוגמה, Documents ו-Downloads) ולא סיפקתם מספיק מידע כדי שההשלמה האוטומטית תדע איזו מהן אתם רוצים. לוחצים שוב על tab כדי לראות רשימה של ספריות שיכולות להתאים למה שהקלדתם. אחר כך מקלידים עוד קצת (מספיק כדי שתהיה רק התאמה אחת) ולוחצים שוב על tab.
  3. כבר כללת שגיאת כתיב במחצית הראשונה של המילה.

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

ספריות הורה וצאצא

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

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

directory_a/
  directory_b/
    my_file

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

אחים ואחיות

אם יש כמה קבצים או תיקיות באותה רמה, הם נקראים פריטים באותה רמה. לדוגמה: אם file_b ו-file_c נמצאים בתוך directory_a, הם אחים.

תרשים הטקסט ייראה כך:

directory_a/
  file_b
  file_c

שימו לב: מכיוון ש-file_b ו-file_c הם אחים, הם מוזחים באותה מידה.

נתיבי קבצים

הנה תרשים טקסט מורכב יותר שכולל גם קשרי הורה-ילד וגם קשרי אחים.

north_america/
  united_states/
    new_york/
      new_york_city/
        manhattan
        queens
        staten_island
        bronx
        brooklyn
    california/
      mountain_view
      los_angeles
    illinois/
      chicago
  mexico/
    mexico_city

בדוגמה הזו, new_york_city/ הוא שם של ספרייה, אבל יש לו גם נתיב שמפרט איך להגיע אליו: ~/north_america/united_states/new_york/new_york_city/.

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

# Option 1: in four steps, using directory names.
cd ~ # navigate home, where these folders are located
cd north_america/
cd united_states/
cd new_york/
cd new_york_city/

# Option 2: in one step, using the path.
cd ~/north_america/united_states/new_york/new_york_city/

סיכום של פקודות הניווט

# See your current location - abbreviation for 'print working directory'
pwd

# Change to a new location - abbreviation for 'change directory'
cd ~/Downloads

# Navigates into a child directory called `some_directory`
# Only works if `some_directory` is a child of the current directory
cd some_directory

# Navigates into the parent of the current directory
# `..` is shorthand for parent.
cd ..

# Will take you back home
cd

אתגרים קצרים

  • אפשר להשתמש ב-pwd כדי לגלות באיזו תיקייה אתם נמצאים כרגע.
  • עוברים לספרייה אחרת ומאשרים את המיקום החדש.
  • אפשר לנסות שוב ולעבור לתיקייה אחרת. משתמשים בפקודות החדשות כדי לראות את המיקום שלכם ואת הקבצים שבספרייה הזו.

יצירת קבצים וספריות

המסגרת והמטרה של הקטע

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

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

# See your current location.
pwd

כדי ליצור קובץ, משתמשים בפקודה touch ואחריה שם הקובץ.

# `touch` creates a new file.
touch style.css

כשיוצרים קבצים, מוסיפים סיומת קובץ כדי לציין את הסוג. סוגי קבצים לדוגמה:

  • .js make as a JavaScript file
  • .html ליצור קובץ HTML
  • .css יוצר קובץ CSS
  • .md יוצר קובץ Markdown

שמות הקבצים לא יכולים לכלול רווחים.

# make a file - this will create a file in the current folder
touch my_text_file.txt

# make a file - this will create a file on the desktop
touch ~/Desktop/my_new_style_sheet.css

יצירת מספר קבצים

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

# make multiple files - this will create multiple files in the current folder
touch my_new_js_file.js my_new_html_file.html my_second_html_file.html

יצירת ספריות

כדי ליצור תיקייה, משתמשים בפקודה mkdir – קיצור של 'יצירת תיקייה' – ואחריה שם התיקייה.

# make a folder - this will create a directory in the current folder
mkdir my_new_folder

# make a folder - this will create a directory on your desktop
mkdir ~/Desktop/my_new_desktop_folder

יצירה של כמה ספריות

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

# make multiple folders - this will create multiple folders in the current
# directory
mkdir folder_one folder_two folder_three

אתגרים קצרים

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

העברה והעתקה

העברת קבצים ותיקיות

המסגרת והמטרה של הקטע

אפשר להעביר קובץ או תיקייה בשורת הפקודה, אבל תמיד צריך לציין שלושה דברים:

  1. משתמשים בפקודה mv – קיצור של move (העברה).
  2. אחרי פקודת ההעברה, מזינים את השם של הקובץ או התיקייה שרוצים להעביר.
  3. אחרי שם הקובץ, מציינים את היעד שאליו רוצים להעביר אותו.

לדוגמה, אם יש לכם מבנה קבצים כזה:

my_child_folder/
my_parent_folder/

אפשר לראות שהם לא מאורגנים כמו שהם צריכים להיות – הם אחים כשהם צריכים להיות הורה וילד. משתמשים בפקודה הזו:

# move a directory - this will move the folder `my_child_folder` into the
# folder named `my_parent_folder` that is in the current folder
mv my_child_folder/ my_parent_folder/

המבנה שיתקבל ייראה כך.

my_parent_folder/
  my_child_folder/

הנה כמה וריאציות נוספות של הפקודה mv:

# move a directory - this will move the folder `my_folder` into the file named
# `my_desktop_folder` that is located on the Desktop
mv my_folder ~/Desktop/my_desktop_folder

# move a file - this will move the file `my_file.txt` into the file named
# `my_folder` that is in the current folder
mv my_file.txt my_folder

# move a file - this will move the file `my_file.txt` into the file named
# `my_desktop_folder` that is located on the Desktop
mv my_file.txt ~/Desktop/my_desktop_folder

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

אתגרים קצרים

  1. יוצרים 5 קובצי טקסט (‎.txt).
  2. יוצרים ספרייה חדשה.
  3. מעבירים את 5 הקבצים שיצרתם לתיקייה.
  4. יוצרים תיקייה ומעבירים אותה לתוך תיקייה אחרת.

העתקה של קבצים ותיקיות

המסגרת והמטרה של הקטע

במהלך הפיתוח של אפליקציות האינטרנט, יכול להיות שנרצה לשכפל קובץ (אם אנחנו יוצרים שני דפי אינטרנט דומים, יכול להיות שלא נרצה להתחיל מאפס). התחביר של הפקודה cp (העתקה) דומה מאוד לתחביר של mv.

העתקת קובץ

פקודת ההעתקה מורכבת משלושה חלקים:

  1. הפקודה cp – קיצור של העתקה
  2. שם הקובץ שרוצים להעתיק
  3. השם של העותק (אם הוא נשאר באותה תיקייה) או המיקום והשם (אם הוא מועבר לתיקייה אחרת).
# Copy a file named `my_file.txt` to a file called `my_file_copy.txt`
# The copy will be located in your Documents folder.
cp my_file.txt ~/Documents/my_file_copy.txt

# Copy a file named `my_file.txt` to a file called `my_file_copy.txt`.
# Since no directory was specified, this will occur within the same folder.
cp my_file.txt my_file_copy.txt

אם רוצים שהעותק ישמור על אותו שם כמו המקור, אפשר לציין את מיקום העותק בלי שם קובץ.

# Copy a file named `my_file.txt` to your Documents folder.
# The destination ends with a directory, so the copy will have the same name.
cp my_file.txt ~/Documents/

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

העתקת מדריך

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

  1. הפקודה cp -R – קיצור של copy recursive – משמשת להעתקת תיקיות ריקות ולא ריקות
  2. שם המקור (התיקייה או הקובץ שרוצים להעביר)
  3. השם של העותק (אם הוא נשאר באותה תיקייה) או המיקום והשם (אם הוא מועבר לתיקייה אחרת).

אזהרה: כשמציינים את השם של העותק, אם הקובץ או התיקייה לא נוצרו קודם, הם ייווצרו כשתיצרו את העותק. אם הקובץ נוצר לפני שמריצים את פקודת ההעתקה, הפקודה תשכתב את כל מה שהיה בקובץ קודם, אז צריך להיזהר!

# copy a directory named `my_folder` from your Desktop folder to a folder
# called `my_folder_copy` in your Documents folder
cp -R ~/Desktop/my_folder ~/Documents/my_folder_copy

# copy a file named `my_file.txt` from your Desktop folder to your Documents
# folder
cp -R my_folder my_folder_copy

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

אתגרים קצרים

  1. יוצרים קובץ בשם my_original.txt
  2. יוצרים עותק של my_original.txt עם שם חדש באותה תיקייה.
  3. יוצרים ספרייה חדשה.
  4. יוצרים עותק של הספרייה הזו, אבל נותנים לו שם אחר.
  5. יוצרים עותק של הקובץ שהעתקתם (משלב 2) וממקמים אותו בתיקייה שהעתקתם (משלב 4).

הסרת קבצים ותיקיות

המסגרת והמטרה של הקטע

אפשר למחוק קבצים ותיקיות בשורת הפקודה, אבל הפעולה הזו היא סופית.

הסרת קובץ

כדי להסיר קובץ, אפשר להשתמש בפקודה rm (קיצור של remove) ואחריה שם הקובץ.

# delete a file in the working directory
rm unwanted_file.txt

# delete a file not in the working directory
rm ~/Desktop/unwanted_file.txt

הסרת ספרייה ריקה

כדי להסיר ספרייה ריקה , אפשר להשתמש בפקודה rmdir – קיצור של remove directory – ואחריה שם התיקייה.

# delete an empty folder
rmdir empty_directory

# delete an empty folder
rmdir ~/Documents/my_files/empty_directory

הסרת ספרייה שלא ריקה

כדי להסיר תיקייה שלא ריקה, צריך להוסיף את האפשרות -R – קיצור של recursive – אחרי הפקודה rm, כדי שהמחשב ימחק את התוכן בתוך התיקייה. כקיצור דרך, חלק מהמפתחים משתמשים בדגל -Rf שמסיר בכוח את כל מה שצריך (אחרת, יכול להיות שתקבלו הנחיות לגבי מחיקת חלק מקובצי הצאצא או מתיקיות הצאצא).

# delete a folder which contains other files or folders
rm -R directory_which_isnt_empty

# delete a folder which contains other files or folders
rm -R ~/Downloads/directory_which_isnt_empty

אזהרה: שימוש בפקודה rm לא דומה לשימוש בפח האשפה או בקטע 'פריטים שנמחקו' באימייל – אי אפשר לשחזר את הקבצים האלה בקלות. חשוב לנקוט משנה זהירות כשמוחקים קבצים בדרך הזו.

אתגרים קצרים

  1. יוצרים 4 קבצים.
  2. למחוק 2 מהקבצים.
  3. יוצרים תיקייה.
  4. יוצרים תיקייה נוספת ויוצרים קובץ בתוך התיקייה הזו.
  5. מוחקים את שתי הספריות.

הקוד של המעבדה הזו נמצא בתיקייה הבאה במאגר התלמידים שהורדתם מ-GitHub: ‏ command-line/labs/around-the-world

רקע

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

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

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

אל דאגה, בעזרת הקסם של שורת הפקודה תוכלו לתקן אותם במהירות!

משימה

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

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

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

מעולה! למדתם איך לדבר עם המחשב. רוצים להתקדם עוד צעד? בואו נדבר על תוספים…

תוספים

  1. מערבבים שוב את כל הקבצים, ואז מגיעים לעיר שבחרתם. לסדר מחדש את הקבצים, בזמן השהייה באותה עיר.
  2. כדאי לנסות אחד מהמשחקים המהנים בשורת הפקודה שמקושרים למטה
    Terminus Game
    Advanced Game (כדאי להתכונן לחיפוש ב-Google)
  3. חובבים מושבעים של מלחמת הכוכבים? מנסים להריץ את הפקודה telnet towel.blinkenlights.nl בשורת הפקודה ומקישים על Enter… (שימו לב שבגרסאות האחרונות של MacOS הפקודה telnet כבר לא מותקנת כברירת מחדל. במקרה כזה אפשר להשתמש בפקודה nc towel.blinkenlights.nl 23 במקום).

הקוד של המעבדה הזו נמצא בתיקייה הבאה במאגר התלמידים שהורדתם מ-GitHub: ‏ command-line/labs/bashing-away-repetition

רוצים להפסיק להקליד את אותן פקודות שוב ושוב בשורת הפקודה? יופי, גם אני!

רקע

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

קודם כול, מה זה סקריפט bash?

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

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

אין חזרה? זה מה שאני מדבר עליו.

מדריך

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

chmod 755 myScript.sh

עכשיו הגיע הזמן לכתוב את התוכנית הראשונה. עוברים אל myScript.sh (בודקים אם אפשר לפתוח את הקובץ משורת הפקודה). בסוף הקובץ, מוסיפים:

echo "Hello World"

מריצים עכשיו:

./myScript.sh

בטרמינל. ** טה דה ** אמור להופיע בטרמינל הכיתוב Hello World.

חגיגה

כל מה שתכתבו בסקריפט bash יפעל כאילו הקלדתם אותו במסוף. לפני שנעבור לתוספים, נסביר בעזרת דוגמה נוספת. קודם יוצרים קובץ לסקריפט. אפשר לתת לו כל שם שרוצים, אבל הוא צריך להסתיים בסיומת .sh. בשלב הבא, כדי לתת לסקריפט הרשאה לפעול, מקלידים chmod 755 ואז את שם הסקריפט במסוף ולוחצים על Enter. בכל פעם שמתחילים סקריפט bash חדש, חשוב לבצע את שני השלבים האלה.

אתגר ראשוני

עכשיו ננסה לכתוב סקריפט שיוצר תיקייה חדשה. איזו פקודה יוצרת תיקייה חדשה? אם חשבת על מילה שמתחילה ב-m ומסתיימת ב-kdir, אז צדקת. כותבים את הפקודה ליצירת התיקייה החדשה ונותנים לה שם מגניב בקובץ .sh החדש, ואז מריצים אותה בטרמינל.

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

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

משימות עיקריות

  1. מוסיפים לקובץ שיצרתם למעלה פקודה שמאפשרת לנווט לתיקייה שאתם יוצרים. (באיזו פקודה משתמשים כדי לשנות ספריות?)
  • נותנים שם לתיקייה החדשה ומוסיפים חותמת תאריך. לדוגמה, התוכנית צריכה ליצור תיקייה בשם 2017-12-07my_super_cool_folder
  1. מדפיס את המחרוזת 'My current directory is: ' (התיקייה הנוכחית שלי היא:) ואחריה את תיקיית העבודה, ואת המחרוזת 'Here is a list of everything in this directory!' (זו רשימה של כל מה שיש בתיקייה הזו!). ‫" ואחריו התוכן של הספרייה הנוכחית.
  2. להבין איך להזין קלט לסקריפט bash וליצור קובץ על סמך מחרוזת הקלט. במדריך שקישרנו אליו קודם במעבדה יש כמה דוגמאות מצוינות בקטע המשתנים שכדאי לעיין בהן.
  3. תשאל את המשתמש מה השם שלו, ואז תדפיס את ההודעה 'היי, נעים להכיר כאן צריך להוסיף את השם של המשתמש'
  • אפשר לבקש מהמשתמש מידע נוסף וליצור בשבילו הודעה בהתאמה אישית.

CONTEXT

שורת הפקודה (או הטרמינל) מאפשרת אינטראקציה ישירה עם מערכת ההפעלה של המחשב – כל מה שממשק המשתמש הגרפי (GUI) עושה, אבל באמצעות פקודות טקסט – מניווט, דרך יצירת קבצים חדשים ועד להפעלת סקריפטים. שורת הפקודה תשמש לפתיחת קבצים ולהפעלת סביבת הפיתוח כשמשתמשים ב-Google App Engine.

שורת הפקודה בפעולה

גישה לטרמינל

מקש קיצור ב-Mac:

  • פותחים את Spotlight באמצעות Command + מקש הרווח.
  • מקלידים Terminal בחיפוש Spotlight.
# See your current location - abbreviation for 'print working directory'.
pwd

# Change to a new location - abbreviation for 'change directory'.
cd /Users/jsmith/Downloads

# Navigate into a child directory called `some_directory`. This only works if
# `some_directory` is a child of the current directory.
cd some_directory

# Navigate into the parent of the current directory. `..` is shorthand for parent.
cd ..

# Return home.
cd

# Change directories to a folder called `my_folder` that is within the current
# directory.
cd my_folder ```

#### File Path Shorthand `~`

The `~` is generally short for "home". Home can be configured to mean different
things for different users and across different operating systems, but in the
example above, for a Mac user named "jsmith", the `~` is short for that user's
home directory: `/Users/jsmith`.

This means that `~/Downloads` and `/Users/jsmith/Downloads` are the same for
this user. But starting with a `~` allows us to specify absolute file paths
(agnostic of your current working directory, and starting at the root `/`)
without having to write out a full path each time.

### <a id="view"></a>Viewing the Contents of Folders

```bash
# See files and folders in current location - this is an abbreviation for 'list'.
ls

יצירת קבצים ותיקיות

יצירת קבצים

# Make a file - this will create a file in the current folder.
touch my_text_file.txt

# Make a file - this will create a file on the Desktop.
touch ~/Desktop/my_new_style_sheet.css

# Make multiple files - this will create multiple files in the current folder.
touch my_new_js_file.js my_new_html_file.html my_second_html_file.html

יצירת תיקיות

# Make a folder - this will create a directory in the current folder.
mkdir my_new_folder

# Make a folder - this will create a directory on your Desktop.
mkdir ~/Desktop/my_new_desktop_folder

# Make multiple folders - this will create multiple folders in the current
# directory.
mkdir folder_one folder_two folder_three

העברת קבצים ותיקיות

העברת קבצים

# Move a file - this will move the file `my_file.txt` into the folder named
# `my_folder` that is in the current folder.
mv my_file.txt my_folder
# Note that this will rename the file instead of moving it if the destination
# folder does not yet exist.  Read below for more details on renaming.

# Move a file - this will move the file `my_file.txt` into the folder named
# `my_desktop_folder` that is located on the Desktop.
mv my_file.txt ~/Desktop/my_desktop_folder

העברת תיקיות

# Move a directory - this will move the folder `my_child_folder` into the
# folder named `my_parent_folder` that is in the current folder.
mv my_child_folder my_parent_folder

# Move a directory - this will move the folder `my_folder` into the folder
# named `my_desktop_folder` that is located on the Desktop.
mv my_folder ~/Desktop/my_desktop_folder

העברה היא שינוי שם

חשוב לזכור שmv היא גם הפקודה שמשמשת לשינוי השם של קבצים או תיקיות.

# Rename a file from `old_name.txt` to `new_name.txt`.
mv old_name.txt new_name.txt

העתקת קבצים ותיקיות

העתקת קבצים

# Copy a file named `my_file.txt` from your Desktop folder to your Documents
# folder.
cp ~/Desktop/my_file.txt ~/Documents

# Copy a file named `my_file.txt` to a file called `my_file_copy.txt` within
# the same folder.
cp my_file.txt my_file_copy.txt

העתקת תיקיות

# Copy a directory named `my_folder` (and its contents) from your Desktop
# folder to a folder called `my_folder_copy` in your Documents folder.
cp -r ~/Desktop/my_folder ~/Documents/my_folder_copy

# Copy a directory named `my_folder` (and its contents) from the current
# working directory to a folder called `my_folder_copy` in the current working
# directory.
cp -r my_folder my_folder_copy

מחיקת קבצים ותיקיות

מחיקת קבצים

# Delete a file in the current working directory.
rm unwanted_file.txt

# Delete a file using its exact location and name.
rm ~/Desktop/unwanted_file.txt

מחיקת תיקיות

# Delete an empty folder.
rmdir empty_directory

# Delete a folder which contains other files or folders.
rm -r directory_which_isnt_empty

טיפים וטריקים

  • כדאי להתאמן בשימוש בשורת הפקודה, גם אם אתם לא חושבים שאתם צריכים אותה. עם הזמן תשתפרו בזה.
  • מקש tab ישלים אוטומטית את שם הקובץ או התיקייה (יכול להיות שיהיה הבדל בין אותיות רישיות לאותיות קטנות).
  • אם נשאר רק קובץ או תיקייה אחת שתואמים לחיפוש, השם שלהם יושלם אוטומטית.
  • אם יש כמה קבצים או תיקיות שתואמים לחיפוש, מקישים פעמיים על Tab כדי לראות רשימה של שאר ההתאמות.
  • החצים למעלה ולמטה יגלגלו את היסטוריית הפקודות כך שלא תצטרכו להקליד מחדש פקודות.
  • משתמשים בפקודה clear כדי לנקות את חלון הטרמינל. כל העבודה הקודמת שלכם נשמרת – אפשר לגלול למעלה כדי לראות אותה.
  • משתמשים ב-reset כדי להפעיל מחדש את הטרמינל. הפעולה הזו לא תשמור את העבודה הקודמת שלכם במסך, אבל היא יכולה לפתור כמה בעיות אם הטרמינל מתחיל להתנהג בצורה בלתי צפויה.
  • לוחצים על option + arrow כדי להזיז את הסמן במילה

סיכום שיטות מומלצות

  • מנווטים בטרמינל באמצעות cd, cd .. או cd <folder name>.
  • אפשר לראות את התוכן של התיקיות באמצעות ls.
  • יצירת קבצים באמצעות touch; יצירת תיקיות באמצעות mkdir.
  • העברת קבצים ותיקיות באמצעות mv <item to move> <destination>.
  • העתקת קבצים ותיקיות באמצעות cp <item to copy> <destination>.
  • מחיקת קבצים ותיקיות באמצעות rm <item to remove>.

שאלה 1

באמצעות איזו פקודה אפשר לזהות את ספריית העבודה הנוכחית?

  1. pwd
  2. ls
  3. cd
  4. mkdir
  5. touch

שאלה 2

איך אפשר לעלות שתי רמות מהספרייה הנוכחית שבה אתם עובדים?

  1. mv ~
  2. cd ../..
  3. mv up/up
  4. cd ^(2)

שאלה 3

באיזו פקודה משתמשים כדי לשנות את השם של קובץ?

  1. mv
  2. cd
  3. ls
  4. python
  5. rename

שאלה 4

למה הפקודה mv script.py מחזירה שגיאה?

  1. כי 'script.py' הוא שם קובץ לא תקין.
  2. כי אי אפשר להוסיף מידע אחרי הפקודה mv.
  3. זוהי שאלת טריק; לא תוחזר שגיאה.
  4. כי כדי להעביר קובץ צריך לפחות שני ארגומנטים – יעד ומיקום יעד

שאלה 5

מה תעשה הפקודה cd ~?

  1. משנים את ספריית העבודה לספריית הבית.
  2. חוזרים על הפקודה הקודמת.
  3. להשתמש באלגוריתם כדי לקבוע מהי הפקודה הכי שימושית כרגע.
  4. הפעלת שגיאה.

שאלה 6

מה מהבאים הוא לא סיבה להשתמש במקש Tab כדי להשלים אוטומטית שמות של קבצים?

  1. כי זה חוסך זמן.
  2. כי הוא עוזר למנוע שגיאות כתיב.
  3. כי הוא דורש פחות כוח עיבוד.

שאלה 7

אם מפתח חדש מנסה ליצור קובץ בשם my script.py, למה הפקודה touch my script.py לא תפעל?

  1. כי touch לא יכול ליצור קבצים חדשים.
  2. כי .py היא לא סיומת קובץ תקינה.
  3. כי הוא ייצור שני קבצים, אחד בשם my ואחד בשם script.py, במקום קובץ אחד.
  4. כי אי אפשר ליצור קבצים חדשים משורת הפקודה.

שאלה 1

באמצעות איזו פקודה אפשר לזהות את ספריית העבודה הנוכחית?

pwd

שאלה 2

איך אפשר לעלות שתי רמות מהספרייה הנוכחית שבה אתם עובדים?

עם cd ../.. עולים שתי רמות (כל .. מייצג רמה אחת למעלה).

שאלה 3

באיזו פקודה משתמשים כדי לשנות את השם של קובץ?

mv משמש להעברת קובץ ממיקום אחד למיקום אחר, ואפשר להשתמש בו גם כדי לשנות את שם הקובץ.

שאלה 4

למה הפקודה mv script.py מחזירה שגיאה?

הפקודה mv דורשת שני ארגומנטים: קובץ מקור וקובץ יעד.

שאלה 5

מה תעשה הפקודה cd ~?

ספריית העבודה תשתנה לספריית הבית. התו המיוחד ~ משמש לזיהוי ספריית הבית של המשתמש הנוכחי. אפשר להשתמש בו גם בשילוב עם שם משתמש אחר: ‎~user2 כדי להפנות לתיקיית הבית שלו.

שאלה 6

מה מהבאים הוא לא סיבה להשתמש במקש Tab כדי להשלים אוטומטית שמות של קבצים?

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

שאלה 7

אם מפתח חדש מנסה ליצור קובץ בשם my script.py, למה הפקודה touch my script.py לא תפעל?

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

touch "my script.py"

שאלה 1

פקודת הטרמינל לשינוי ספריות היא:

  1. move
  2. mkdir
  3. pwd
  4. cd

שאלה 2

איזו פקודה מריצים כדי לעבור לתיקיית האב של ספריית העבודה הנוכחית?

  1. cd up
  2. cd .
  3. cd ..
  4. cd ~

שאלה 3

באיזו פקודה משתמשים כדי ליצור קבצים?

  1. touch
  2. mkdir
  3. create
  4. pwd

שאלה 4

איזו מהפקודות הבאות תיצור שני קבצים בשם index.html ו-style.css?

  1. touch index.html, touch style.css
  2. touch index.html, style.css
  3. touch index.html style.css
  4. touch index.html + style.css

שאלה 5

באיזו פקודה משתמשים כדי לשנות את השם של קובץ או תיקייה?

  1. rename
  2. move
  3. mv
  4. rm

שאלה 6

איזה דגל צריך להוסיף לפקודות rm ו-cp כדי שהן יפעלו על תיקיות?

  1. -f
  2. -r
  3. -x
  4. -d

שאלה 7

כדי להעביר את projects אל ~/Documents ולשנות את השם שלו ל-Projects, איזו פקודה צריך להזין במקום הריק?

cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects
  1. pwd
  2. cd projects
  3. mv ~ projects
  4. cd ~/Documents
  5. ls

שאלה 8

מה תעשה הפקודה הבאה?

rm -r projects

  1. מחיקת קובץ בשם projects
  2. מחיקת תיקייה בשם projects
  3. שינוי שם של קובץ שנקרא projects
  4. חיפוש בתוכן של הספרייה הנוכחית של projects

שאלה 1

פקודת הטרמינל לשינוי ספריות היא:

פקודת הטרמינל לשינוי ספריות היא cd. הפקודה עצמה היא קיצור של "change directory" (שינוי ספרייה).

שאלה 2

איזו פקודה מריצים כדי לעבור לתיקיית האב של ספריית העבודה הנוכחית?

הפקודה לניווט לתיקיית ההורה היא cd ..

שאלה 3

באיזו פקודה משתמשים כדי ליצור קבצים?

הפקודה ליצירת קבצים היא touch

שאלה 4

איזו מהפקודות הבאות תיצור שני קבצים בשם index.html ו-style.css?

הפקודה touch index.html style.css תיצור את שני הקבצים. אין צורך בפסיק, ואפשר ליצור כך כל מספר של קבצים, בהפרדה של רווחים.

שאלה 5

באיזו פקודה משתמשים כדי לשנות את השם של קובץ או תיקייה?

למרות שהקיצור mv מייצג את הפעולה 'העברה' ואפשר להשתמש בו כדי להעביר קבצים או תיקיות, אפשר להשתמש בו גם כדי לשנות את השם של קבצים ותיקיות.

שאלה 6

איזה דגל צריך להוסיף לפקודות rm ו-cp כדי שהן יפעלו על תיקיות?

הפקודות rm ו-cp דורשות את הדגל -r כדי לפעול על תיקיות, כי הדגל -r מייצג 'רקורסיבי' ומריץ מחדש את הפקודה לכל הקבצים והתיקיות שכלולים בה.

שאלה 7

כדי להעביר את projects אל ~/Documents ולשנות את השם שלו ל-Projects, איזו פקודה צריך להזין במקום הריק?

cd ~
mv projects ~/Documents
# fill in the blank here
mv projects Projects

מכיוון שאנחנו מתחילים בספריית הבית, נצטרך להריץ את הפקודה cd ~/Documents כדי שהפקודה הסופית תופעל בספרייה הנכונה.

שאלה 8

מה תעשה הפקודה הבאה?

rm -r projects

הפקודה תמחק קובץ או תיקייה בשם projects כי היא מופעלת עם האפשרות -r או עם הדגל הרקורסיבי. בלי הדגל הזה, הפקודה הזו תפעל רק כדי למחוק קובץ עם השם הזה.