עבודה על השרת אפשרויות התחברות עבודה במחשב אישי 1
תרגילי הבית יבדקו ע"י הידור והרצת הקוד המוגש על שרת ה- t2 כתובת השרת היא t2.technion.ac.il לשם כך עליכם לדעת כיצד ניתן להתחבר אל השרת ולעבוד עליו תכנית שעובדת על המחשב הביתי שלכם אינה בהכרח נכונה עליכם לוודא את נכונותה בעזרת הידורה והרצתה על השרת ב- t2 קיימת מערכת הפעלה מסוג UNIX זו ולכן עליכם לוודא שהתכנית שלכם מתנהגת בצורה נכונה בסביבה 2
הדרכים הבאות הן הדרכים המומלצות לעבוד בקורס סגל הקורס לא יעזור בבעיות הצצות מעבודה בכלים אחרים, או מערכות הפעלה השונות מ- Windows ו- UNIX. למי שלא רגיל לעבוד בסביבת,UNIX לא מומלץ ולא הכרחי להתקין כל סוג של מערכת הפעלה UNIX רק עבור הקורס ולא תינתן תמיכה בהתקנת מכונות וירטואליות. קיימת תמיכה מלאה עבור אלה המשתמשים ב- Window. כדי לכתוב את התוכנה כך שתעבוד נכון על ה- t2 קיימות שתי אפשרויות: עבודה על השרת - כתיבת הקוד ובדיקתו על השרת לאורך כל הדרך עבודה על מחשב אישי וביצוע בדיקות על השרת מדי פעם. מומלץ ע"י סגל הקורס. אלה שבבעלותם מחשב MAC יצטרכו לעבוד על המחשבים בחווה. לא תינתן תמיכה בMAC לרבות שחרור גרסאות שיעורי בית ל- MAC. ע"י סגל הקורס, 3
בשיטה זו נשתמש בתוכנה כלשהי כדי להתחבר אל השרת דרך הרשת לאחר ביצוע ההתחברות נקבל חלון טרמינל אשר מקושר לחשבוננו במחשב המרוחק כל הפקודות שיוכנסו לטרמינל מתבצעות על המחשב המרוחק. עיקר העבודה יהיה בעזרת מנשק טקסטואלי ניתן גם להריץ תכניות עם מנשק גרפי 4
ניתן להתחבר t2 לשרת בשיטות הבאות: התחברות בעזרת SSH )מומלץ(: עבור מחשבים בסביבת windows יש להוריד את התוכנה מהכתובת הבאה: ftp://ftp.cs.technion.ac.il/pub/ssh-client/sshclient.exe עבור מחשבים בסביבת התחברות בעזרת Go-Global לינוקס ניתן פשוט להשתמש בפקודה )עבור :)Windows גלישה לכתובת http://www.technion.ac.il/gg/ipviewer.html עובד רק עם Internet Explorer ssh מחלון טרמינל. 5
עבודה על השרת אינה נוחה בגלל העומס הרב על השרת. ניתן לעבוד על מחשב בבית או בחווה ולהעביר את הקוד אל ה- t2 שימו לב שייתכנו הבדלים בין המחשבים ולכן מומלץ בסוף העבודה( לבדוק את נכונות הקוד על ה- t2 אחת לכמה זמן )ולא רק 6
עבודה ב- CDT.Eclipse סביבת העבודה המומלצת ע"י צוות הקורס משתמשת בקומפיילר דומה לזה שב- t2 ניתנת להרצה על windows או לינוקס מותקנת במחשבי החווה 7
עבודה במחשבי הלינוקס בחווה: השימוש בלינוקס יכול להקל במעט על מלאכת הדיבוג מאחר וכמות ההבדלים בין מחשב המריץ לינוקס ל- t2 קטנה יותר אך לא מומלצת עבור אלה שלא מנוסים בסביבת.UNIX התקנת :Cygwin Windows סביבה המדמה את UNIX עבור מחשבי 8
כדי להקל על השימוש במגוון הכלים הגדול אתר הקורס מכיל מספר מדריכים המסבירים את הפרטים הטכניים עבור שימוש בכלים הללו: מדריך התחברות ל- t2 : מפרט את הדרכים השונות מדריך עבור המדריכים לעבודה )כולל התקנת )Cygwin :Eclipse CDT מסביר את תהליך ההתקנה ויצירת פרויקט ראשון נמצאים באתר תחת בנוסף, ייערכו 3 תרגולי עזר אשר יתמקדו בהפעלה טכנית של כלים הדרושים בקורס.Course Material, Guides זמן התרגולים יוכרז בהמשך שקפי התרגולים זמינים באתר תחת Course Material, Auxiliary Tutorials 9
עבודה בחלון ה- shell הרשאות ערוצי קלט/פלט 10
ולבסוף שליחת Shell )קליפה( הוא כינוי לתוכנה המקשרת בין המשתמש לבין גרעין מערכת ההפעלה בדרך כלל המונח בשימוש עבור shell טקסטואלי עבודת ה- Shell מתבצעת על ידי קבלת פקודה מהמשתמש, ביצוע החלפות טקסט בפקודה בהתאם לתכונות ה- Shell הפקודה המעובדת למערכת ההפעלה דוגמאות ל- shell : Bash C-Shell Powershell )ברירת המחדל ברוב הפצות הלינוקס( )ברירת המחדל עבור מחשב ה t2( )windows מתקדם עבור shell( בקורס זה נלמד את Bash מלבד מנשק בסיסי לביצוע פקודות ה- Shell מקל עלינו את העבודה בעזרת תכונות מתקדמות, לדוגמה ההשלמה האוטומטית המתבצעת ע"י לחיצה על Tab ה- Shell יאפשר לנו להגדיר קיצורים, לחזור על פקודות, להתייחס למספר קבצים בנוחות ולהגדיר משתנים אשר נוכל להשתמש בהם בפקודות 11
לאחר ההתחברות מתקבל חלון טרמינל בחלון זה יכול המשתמש להכניס את הפקודה הבאה למחשב ולקבל את הפלט עבור פקודה זו הכנסת פקודה מתבצעת ע"י רישום שמה והפרמטרים שלה ולחיצה על Enter לכל הפקודות יש את המבנה הבא: > command [arg1] [arg2] [arg3]... ארגומנטים לפקודה שם הפקודה לביצוע prompt )לא מקלידים אותו( מספר הארגומנטים לפקודה משתנה בהתאם לפקודה ויכול להיות כל מספר )כולל 0( בשביל להתנתק בכל שלב ניתן לסגור את חלון הטרמינל או לרשום את הפקודה.exit 12
ניתן להשתמש בפקודה הבאה כדי לקבל את שם ה- Shell הנוכחי ב- Unix > echo $0 tcsh במחשבים בהם Bash אינה Shell ברירת המחדל )כמו בשרת ה- t2 לדוגמה(, ניתןלהשתמש בפקודה shell) chsh (change כדי לשנות את ברירת המחדל: > chsh Changing shell for mtm. old shell: /bin/tcsh New shell: /bin/bash Shell will be changed for mtm in approximately 5 minutes > חשוב להקפיד לכתוב את שם ה- Shell )הייחוס אליו( נכון, אחרת החשבון נהרס מלבד החלפת ה- Shell המשמש כברירת מחדל, ניתן תמיד להריץ Shell אחר כמו כל פקודה אחרת 13
- לכל קובץ יש הרשאות הקובעות למי מותרת הגישה ישנם 3 סוגי משתמשים: User.1 בעל הקובץ. בעל הקובץ הוא המשתמש שיצר את הקובץ במערכת. Group.2 - משתמש אשר שייך לקבוצה של בעל קובץ הגדרת קבוצות משתמשים הינה מחוץ לחומר הקורס Other.3 - שאר המשתמשים במערכת לכל סוג משתמש יש 3 הרשאות שונות: Read Write Execute.1.2.3 - מאפשרת קריאת תוכן הקובץ - מאפשרת שינוי הקובץ הקיים - מאפשרת להריץ את הקובץ )כולל העתקתו( לקובץ ולצורך אילו פעולות. 14
> ls -l,ls -l user group other כדי לראות מהן ההרשאות ניתן להשתמש בפקודה לדוגמה: -rwx--x--x 1 mtm users 6647 Aug 31 17:25 a.out* -rw-r--r-- drwx------ 1 mtm users 3047 Jun 20 10:35 hello.c 2 mtm users 4096 Aug 31 17:23 private/ drwxrwxrwx 2 mtm users 4096 Aug 31 17:23 public/ שורת ההרשאות עבור כל קובץ היא רצף האותיות הבא: מצייני ההרשאות d rwxrwxrwx אם מופיעה אות ההרשאה קיימת אם מופיע מקף ההרשאה אינה קיימת התו d מציין אם מדובר בתיקיה 15
> chmod <mode> <files> בעל הקובץ רשאי לשנות את ההרשאות של הקובץ שינוי ההרשאות ניתן בעזרת הפקודה :chmod ו- permission opcode שרשור תווים המורכב מ- who, - <mode> אם לא מצוין,who ברירת המחדל היא a. Who Opcode Permission u - User + - Add permission r - Read g - Group - - Remove permission w - Write o - Other = - Assign permission x - Execute a - All > chmod u+x file > chmod g-w,o-w file > chmod =r file > chmod u=rwx, g=rx, o=r file --------- rwxrwxrwx --x------ rwxr-xr-x r--r--r-- rwxr-xr-- דוגמאות: 16
עבור תיקיות להרשאות המשמעות שונה: בתיקייה Read הרשאה לראות את רשימת הקבצים Write הרשאה של יצירת/מחיקת תיקייה או שינוי קבצים Execute הרשאת כניסה לתיקייה לדוגמה, מה ההרשאות הנדרשות לביצוע כל אחת מהפעולות הבאות? > cd my_dir > mkdir directory > rmdir directory > ls Execute Write Write Read 17
המידע שהוצג כאן לגבי כל אחד מהפקודות חלקי ניתן בכל שלב להשתמש בפקודה man כדי לראות קובץ עזרה עבור פקודה מסוימת. > man <command name> ה- man של פקודה מכיל את צורת ההפעלה שלה, דגלים אפשריים ועוד. למשל: > man ls > man rm > man man בנוסף, מומלץ מאד לחפש את שם הפקודה בתוספת המילה Bash יענו על כל שאלותיכם. באינטרנט. לרוב התוצאות הראשונות 18
לכל תכנית יש ערוצי קלט וערוצי פלט לכל תכנית קיימים ב- UNIX 3 אלו הם הדרכים בהם היא מקבלת קלט ומציגה את הפלט שלה ערוצי ברירת מחדל: ערוץ הקלט הסטנדרטי: ממנו מקבלת התכנית את הקלט ברירת המחדל היא הפקודות המוכנסות בחלון הטרמינל ערוץ הפלט הסטנדרטי: אליו מודפס הפלט ברירת מחדל היא הדפסה לחלון הטרמינל ערוץ השגיאות הסטנדרטי: ערוץ פלט נוסף המשמש להדפסת הודעות שגיאה ברירת המחדל היא הדפסה לחלון הטרמינל ערוצי קלט/פלט נוספים יכולים להיות למשל קבצים, נתייחס למקרים אלו בהמשך הקורס 19
בעת קריאה לפקודה בטרמינל ניתן להפנות את ערוצי הקלט והפלט הסטנדרטיים לקבצים הפניית ערוץ הפלט הסטנדרטי נעשית באמצעות האופרטור ">": > command [arguments] > <output_file> :">" > command [arguments] < <input_file> הפניית ערוץ הקלט הסטנדרטי נעשית באמצעות האופרטור הפניית ערוץ השגיאות הסטנדרטי נעשית באמצעות האופרטור :"2>" > command [arguments] 2> <errors_file> אם ננסה לכתוב לתוך קובץ קיים, נדרוס את תוכן הקובץ הקיים. אם ברצוננו להוסיף את הפלט להמשכו של קובץ קיים ניתן להשתמש ב-"<<" או "<<2" )בהתאמה( 20
> command [arguments] < input > output ניתן להפנות מספר ערוצים בבת אחת הפניית הקלט והפלט יחדיו נעשית כך: כדי להפנות את ערוץ השגיאות ואת ערוץ הפלט ניתן לרשום: > command [arguments] > output 2> errors > command [arguments] 2>1 כדי להפנות את ערוץ השגיאות לערוץ הפלט יש לכתוב: כדי להדפיס את ערוץ הפלט וערוץ השגיאות לאותו הקובץ יש לכתוב: > command [arguments] > output 2>1 21
>cat > file.txt Hello world! >ls file.txt >cat file.txt Hello world! >cat file.txt > file2.txt >cat file2.txt Hello world! >cat file.txt >> file2.txt >cat file2.txt Hello world! Hello world! בעזרת הפניית קלט/פלט ניתן לעשות שימושים שונים בפקודה cat למשל: הכנסת קלט מהמקלדת 22
>cat < file2.txt > file.txt >cat file.txt Hello world! Hello world! >rmdir foo rmdir: `foo': No such file or directory >rmdir foo > output.txt rmdir: `foo': No such file or directory >rmdir foo 2> error.txt >cat error.txt rmdir: `foo': No such file or directory הודעת השגיאה נשלחת לערוץ השגיאות ולכן אינה מופנית לקובץ 23
הידור תכניות ב- t2 הרצת ודיבוג תכניות 24
נדגים כעת כיצד ניתן לכתוב תכנית על t2 ולהריצה לשם כך עלינו לעבור את השלבים הבאים: התחברות ל- t2 1. ראינו כבר כיצד ניתן לעשות זאת במספר דרכים כתיבת הקוד בעורך כלשהו 2. הידור הקוד בעזרת מהדר )compiler( 3. הרצת הקוד 4. 25
כדי לכתוב קוד נצטרך להשתמש בתכנית כלשהי לעריכת טקסט מספר עורכי טקסט המותקנים תכניות ללא מנשק גרפי: - ב- t2 : -nano פשוטה לשימוש, אבל לא נוחה לעריכת קוד בטווח הארוך vim emacs - - מכילה את כל התכונות שמשתמש צריך, אבל דורשת זמן הסתגלות ארוך יותר כבדה וגם דורשת קצת זמן הסתגלות אבל בעלת אפשרויות רבות למשתמשים מתקדמים תכניות בעלות מנשק גרפי: gvim nedit גרסה גרפית של vim - תכנית פשוטה לשימוש )דומה להתנהגות תוכנות דומות ב- Windows ( אך בעלת אפשרויות מתקדמות יותר emacs - אם מנשק גרפי זמין התוכנה תופעל עם מנשק גרפי.Notepad++ דרך נוספת המומלצת למשתמשי Windows היא לערוך את הקוד בעורך טקסטואלי מוכוון קוד כגון 26
כדי לקמפל את הקוד שכתבנו לשפת מכונה יש להשתמש בקומפיילר. בסביבת UNIX מותקן כקומפיילר ברירת מחדל הקומפיילר gcc GNU Compiler Collection > gcc <flags> <files> [-o <output file>] אופן השימוש: > gcc hello.c -o hello למשל על מנת לקמפל את הקוד בקובץ :hello.c אם אין שגיאות יווצר קובץ הרצה בשם המתאים אם קיימות שגיאות הן יודפסו למסך לערוץ השגיאות 27
אם הדגל o- אינו מוגדר הקומפיילר יבחר בשם קובץ הפלט a.out כברירת מחדל הדגל g- משמש להוספת מידע הנחוץ ל- debugger כשאתם מתכננים לדבג הקפידו להשתמש בדגל זה בעזרת דגל זה ה- debugger יכול להדפיס מידע מדויק על השורות בהן קורות השגיאות > gcc file1.c file2.c files3.c o my_prog > gcc *.c o my_prog ניתן לקמפל מספר קבצים בבת אחת: 28
במהלך הקורס נדרוש לקמפל את הקוד עם הדגלים הבאים: > gcc -std=c99 -Wall -Werror -pedantic-errors משמעות הדגלים: :-std=c99 קובע את הסטנדרט C99 המוסיף כמה תכונות חשובות לשפה :-Wall מציג את כל האזהרות האפשריות. אזהרות הן בעיות בקוד שאמנם ניתן להדר אך בדרך כלל מעידות על באגים :-Werror מתייחס לאזהרה כאל שגיאה אין הצדקה לקוד המתקמפל עם אזהרות ולכן הדרישה בקורס היא לקוד המתקמפל ללא אזהרות :-pedantic-errors מגביל את הקוד לסטנדרט הנבחר כך שדברים אשר המהדר יודע להתמודד איתם אך אינם חלק מהסטנדרט ייחשבו כשגיאות מומלץ להשתמש בדגלים אלו תמיד מאחר והם מקלים על העבודה ומשפרים את איכות הקוד )חובה במהלך הקורס( 29
לאחר הקומפילציה מתקבל קובץ הרצה כאמור, אין לקובץ סיומת מיוחדת gcc דואג בצורה אוטומטית להוסיף הרשאות ריצה לקובץ >./hello Hello World! בשביל להריץ את הקובץ עלינו לרשום את שמו כשם הפקודה להרצה להרצת פקודה בספריה הנוכחית יש להוסיף /. לפי שם הקובץ בהמשך נראה כיצד ניתן לאפשר לקובץ לרוץ ללא הוספת /. 30