יהיו 6 תרגילי בית:
0. שימוש ביסי ב- ובכלי פיתוח
- תכנות בסיסי בשפת
- מחלקות בשפת
- תכנות גנרי בשפת
- תכנון מערכת, תכנות מתקדם בשפת
- תכנות בסיסי בשפת .
מהי מערכת הפעלה?
מערכת הפעלה מהווה שכבת ביניים בין החומרה לבין התוכנה. היא מאפשרת גישה נוחה למחשב עבור משתמשים ומתכנתים.
- עבור המשתמש: מספקת ממשק נוח למחשב ושירותים בסיסיים.
- עבור המתכנת: מספקת ממשקים לניהול זיכרון, קבצים והתקני חומרה נוספים.
מהי ?
זוהי משפחה של מערכות הפעלה שלהן יש סטנדרט נוח ואחיד עבור השירותים אותן מערכת ההפעלה מספקת(לסטנדרט הזה קוראים ).
רוב מערכות ההפעלה המורכרות לכם עומדות בסטנדרט של :
- המפורסמת ביותר כיום היא , לה יש גרסאות רבות.
- שגם היא מבוססת על
היא לא מערכת הפעלה מבוססת .
מהי ה-?
הקליפה() הוא כינוי לתוכנה המקשרת בין המשתמש לבין מערכת ההפעלה. כאשר בדרך כלל נוצר לשימוש דרך הטרמינל.
עבודת ה- מתבצעת ע"י קבלת פקודה מהמשתמש, ביצוע החלפות טקסט בפקודה בהתאם לתכונות ה- ולבסוף שליחת הפקודה המעובדת למערכת ההפעלה.
בקורס זה נלמד שזה סוג של קליפה.
רצף העבודה עם הקליפה:
- הקליפה תבקש או תאפשר לנו להכניס פקודה
- נכניס פקודה ונלחץ על אנטר
- הקליפה תעביר למערכת ההפעלה את הפקודה ותבצע אותה
- יודפס הפלט של הפקודה
- ובחזרה להתחלה.
מערכת הקבצים ב-
מערכת ההפעלה אחראית בין השאר על ארגון הקבצים במחשב. מערכת הקבצים ב- מורכבת מקבצים ותיקיות כאשר:
- קובץ הוא אוסף סדור של תווים.
- תיקיה מאפשרת שמירת מספר קבצים ותיקיות נוספות בצורה מסודרת.
לכל קובץ או תיקיה יש שם. אין מגבלות על מבנה השם אך מקובל ששם קובץ יכיל סיומת() למשל מסמל קובץ קוד מקור בשפת .
אין ב- סיומת מיוחדת לקובץ הרצה וכל קובץ יכול להיות קובץ הרצה.
כל קובץ או תקייה נמצאים בתוך תקייה כלשהי למעט התקייה הראשית()
שורש מערכת הקבצים נקרא "/" ונקרא לו .
כדי להתייחס לקובץ יש להשתמש בשמו:
- ניתן להתייחס לקובץ ע"י שמו המוחלט:
- ניתן להתייחס לקובץ ע"י שם יחסי מהתקייה הנוכחית: אם התקייה נוכחית היא אזי נוכל להשתמש בשם .
מערכת ההפעלה היא מערכת הפעלה מרובת משתמשים. לכל משתמש קיימת תקיית בית ייחודית לו שנמצאת תחת התקייה . בהתחברות למערכת התקייה הנוכחית היא תקיית הבית של המשתמש.
קיצורים חשובים:
- נקודה - - מייצגת את התקייה הנוכחית.
- שתי נקודות - - מייצגות את תקיית האב(התקייה בה נמצאת התקייה נוכחית)
- תילדה - - מייצג את תקיית הבית של המשתמש כאשר ניתן לעשות
user~מייצגת קיצור לתקיית הבית של המשתמש .
ניתן להשתמש בכוכבית - - כדי להתייחס למספר קבצים בבת אחת על ידי שימוש בתבניות:
- מתייחס לכל הקבצים
- יותאם לכל הקבצים ששמם מסתיים ב-""
הרשאות של קבצים
לכל קובץ יש הרשאות גישה הקובעות למי מותרת הגישה לקובץ ולצורך אילו פעולות.
ישנם סוגי משתמשים:
- - בעל הקובץ. הוא המשתמש שיצר את הקובץ במערכת.
- - משתמש אשר שייך לקבוצה של בעל הקובץ. הגדרת קבוצות משתמשים הינה מחוץ לחומר הקורס.
- - שאר המשתמשים במערכת.
לכל סוג משתמש יש 3 הרשאות שונות:
- - מאפשרת קריאת תוכן הקובץ (כולל העתקתו)
- - מאפשרת שינוי או מחיקת הקובץ הקיים.
- - מאפשרת להריץ את הקובץ.
הרצת קובץ
הרצת קובץ מתבצעת ע"י הוספת "" לפני שם הקובץ. על מנת להריץ הקובץ צריך להיות קובץ הרצה(לא קוד ב-!) בעל הרשאות הרצה. אחרת תודפס שגיאה.
> ./main.c
-bash: ./main.c: Permission denied
> gcc main.c -o hello_world
> ./hello_world
Hello World!
שינוי הרשאות קובץ אפשרי בעזרת הפקודה chmod לדוגמה הפקודה:
> chmod u+x <file>
הפקודה הזו משנה את הקובץ הנתון עם הרשאות ל- ל-.
אוסף פקודות ב-
קיים מגוון בסיסי של תכניות הזמינות בכל מערכת הפעלה ממשפחת . צורת ההפעלה של התוכניות היא בד"כ מהצורה הבאה:
> <command> [options] [input file]
- לרוב הפקודות, אם לא יצוין קובץ קלט, הקלט ילקח מהקלט הסטנדרטי על מנת לאפשר הרכבת פקודות.
- בד"כ ניתן להחליף את הסדר בין שם קובץ הקלט לדגלים.
- ניתן להשתמש בפקודה כדי למצוא רשימה מפורטת של כל הפקודות.
הפקודה
כדי להדפיס תוכן תקייה נשתמש בפקודה כך:
> ls [flags] [files]
- ניתן לרשום פשוט עבור הדפסת תוכן התיקיה הנוכחית
- ניתן להוסיף את שם התיקיות שאת תוכנן נרצה להדפיס
ניתן להוסיף דגלים כגון:
- הדגל יגרום להדפסת הפלט כך שכל קובץ מופיע בשורה נפרדת עם מידע נוסף
- הדגל יגרום לפקודה להדפיס גם פריטים נסתרים (כאשר פריט נסתר ב- הוא כל קובץ או תקייה ששמם מתחיל בנקודה - )
ניתן לשלב את הדגלים כך:
> ls -a -l [files]
כאשר משלבים דגלים ניתן גם לכתוב כך:
> ls -al [files]
זוהי אותה פקודה בשני דרכים שונות.
ניהול תיקיות
- הפקודה מדפיסה את שם התקייה הנוכחית
- הפקודה מאפשרת להחליף את התקייה הנוכחית
- הפקודה מאפשרת ליצור תקייה חדשה.
- הפקודה מאפשרת למחוק תקיה ריקה.
> cd ~
> pwd
/usr/030/moshe
> cd matam
matam: no such fle or directory.
> mkdir matam
> cd matam
> pwd
/usr/030/moshe/matam
> cd ..
> rmdir matam
ניהול קבצים
- הפקודה משמשת להעתקת קבצים או תיקיות. ניתן להשתמש בה בשני דרכים:
- ליצור העתק חדש של בשם כך:
> cp [options] <file1> <file2> - ליצור העתקים חדשים של כל הקבצים בתיקיה קיימת:
> cp [options] <file1> ... <filen> <directory>
הדגלים:- הדגל מבצע העתקה רקורסיבית של תיקיות ותוכנן (ללא הדגל זה תיקיות אינן מועתקות)
- הדגל מבקש אישור לפני מחיקת קובץ קיים.
- ליצור העתק חדש של בשם כך:
- פקודה משמשת להעברת קבצים או תיקיות או שינוי שמם. ניתן להשתמש בה בשני דרכים:
- שינוי שמו של ל-:
> mv [options] <file1> <file2> - עובדת גם עבור תיקיות:
אם הפרמטר האחרון הוא שם של תקייה קיימת הפקודה מעבירה את הקבצים לתוכה. > mv [options] <file1> ... <filen> <directory>
אם קיים כבר קובץ בעל השם המבוקש הוא נמחק ומוחלף.
הדגלים:
- הדגל מבקש אישור לפני מחיקת קובץ קיים.
- שינוי שמו של ל-:
- הפקודה מאפשרת מחיקת קבצים או תיקיות:
הדגלים: > rm [options] <files>- הדגל מבצע מחיקה רקורסיבית של תיקיות (ללא דגל זה ספריות אינן נמחקות)
- הדגל מבקש אישור לפני מחיקת קובץ
- הדגל לא מבקש אישור בשום מקרה
שימו לא ניתן לשחזר קבצים שנמחקו.
הפקודה הבאה מוחקת את כל הקבצים והספריות במיקום הנוכחי ועלולה להיות הרסנית למדי:
> rm -rf *
נסתכל על דוגמה לעבודה עם קבצים:
> ls
hello.c private/ story.txt
> cp hello.c prog.c
> ls
hello.c private/ prog.c story.txt
> ls private
example.txt program.c
> rm -i private/example.txt
rm: remove regular file 'private/example.txt'? y
> rm private
rm: cannot remove directory 'private': Is a directory
> rm -rf private
> ls
hello.c story.txt
הדפסת תוכן של קבצים
- הפקודה מדפיסה למסך את תוכן הקובץ.
אם הקובץ גדול המסך יגלול ולא נוכל לראות בנוחות את התחלתו. אם לא מופיע שם קובץ הפקודה מדפיסה את הקלט הסטנדרטי(בדרך כלל מהמקלדת). (אנחנו נראה למה זה טוב בהמשך) > cat <file> - הפקודה היא כמו רק שהיא גם מאפשרת גלילה בשני הכיוונים ועוד אפשרויות
> less <file>- הפקודה מאפשרת לשוות בין תוכן של 2 קבצים נפרדים.
הפקודה משווה בין תוכן הקבצים שורה אחר שורה. אם הקבצים זהים לא מודפס דבר. אם הקבצים אינם זהים מודפסות השורות השונות ומספרי השורות הרלוונטים. > diff [options] <file1> <file2>
- הפקודה מאפשרת לשוות בין תוכן של 2 קבצים נפרדים.
- הפקודה מדפיסה את הפרמטרים שקיבלה
הדגל מדפיס ללא ירידת שורה. > echo [-n] [words]
סיכום פקודות
| הפקודה | הפעולה שלה |
|---|---|
| מדפיס רשימה של שמות קבצים | |
| משנה את המיקום הנוכחי | |
| מדפיס את מיקום התיקייה הנוכחית | |
| יוצר תיקייה חדשה | |
| מוחק תיקייה ריקה | |
הפניית קלט/פלט
ערוצי קלט-פלט
לכל תוכנית יש ערוצי קלט וערוצי קלט. אלו הן הדרכים בהן היא מקבלת קלט ומציגה את הפלט שלה.
לכל תכנית קיימים ב- שלושה ערוצי ברירת מחדל:
- ערוץ הקלט הסטנדרטי: ממנו מקבלת התכנית את הקלט כאשר ברירת המחדל היא המקלדת.
- ערוץ הפלט הסטנדרטי: אליו מודפס הפלט כאשר ברירת המחדל היא הדפסה לטרמינל.
- ערוץ השגיאות הסטנדרטי: ערוץ פלט נוסף המשמש להדפסת הודעות שגיאה כאשר ברירת המחדל היא הטרמינל.
הפניית קלט/פלט
בעת קריאה לפקודה בטרמינל ניתן להפנות את ערוצי הקלט והפלט הסטנדרטיים לקבצים.
הפניית ערוץ הפלט הסטנדרטי נעשית באממצעות האופרטור "":
> command [arguments] > <output_file>
הפניית ערוץ הקלט הסטנדרטי נעשית באמצעות האופרטור "":
> command [arguments] < <input_file>
הפניית ערוץ השגיאות הסטנדרטי נעשית באמצעות האופרטור "":
> command [arguments] 2> <errors_file>
אם ננסה לכתוב לתוך קובץ קיים, נדרוס את תוכן הקובץ הקיים.
אם ברצונינו להוסיף את הפלט להמשכו של קובץ קיים ניתן להשתמש ב-"" או "" בהתאמה.
בנוסף, ניתן להפנות מספר ערוצים בבת אחת. הפניית הקלט ופלט יחדיו נעשית כך:
> command [arguments] < input > output
כדי להפנות את ערוץ השגיאות והפלט נרשום כך:
> command [arguments] > output 2> errors
כדי להפנות את ערוץ השגיאות לערוץ הפלט נכתוב:
> command [arguments] 2>&1
כדי להדפיס את ערוץ הפלט וערוץ השגיאות לאותו הקובץ יש לכתוב:
> command [arguments] > output 2>&1
הרכבת פקודות
לפעמים אנו רוצים לקחת פלט של פקודה אחת ולתת אותו כקלט של פקודה אחרת.
בשביל לבצע זאת אנו יכולים להשתמש בהרכבת פקודות או .
נניח שברצונינו להדפיס את התוכן של תיקיה המכילה הרבה קבצים.
נוכל להשתמש בהפניית הפלט לפקודה על מנת שנוכל לראות את כל הקבצים:
ls -l > tmp
less < temp
rm temp
במקום לעשות את זה נוכל להרכיב את הפקודות כך:
ls -l | less
נשתמש ב- כדי לחבר בין פקודות כך:
ls | grep test