מערכות הפעלה - דרישות לידע מוקדם
"יש דברים שכדאי לדעת." (עממי, 1783)
פקודות בסיסיות בלינוקס
איפה, איך ולמה מריצים את הפקודות?
איפה
שאלה מצויינת! בגדול, ב- shell.
איך מגיעים ל- shell? לפנינו מספר אפשרויות:
- לפתוח אחד כזה בממשק הגרפי. לדוגמא בגנום: הפעילו את gnome-terminal, או על ידי מציאתו בתפריט או על ידי
לחיצה על Alt+F2 ואז הריצו gnome-terminal.לחיצה על ctrl+alt+t.
- בלינוקס קיימים לנו מספר הפעלות (sessions) במקביל, שרובן טקסטואליות ואחת גרפית. כדי לעבור ביניהם לחצו על Ctrl+Alt+Fx כאשר x הינו מספר שלם חיובי בין 1 ל- 7 (1 עד 6 אלה ממשקים טקסטואלים, 7 הוא הגרפי)
איך
במחשבים חדישים קיים התקן סריאלי, הקרוי בשם מקלדת. השתמשו בה.
למה
- לא לכל הכלים קיימים ממשקים גרפיים.
- יש הרבה שליטה בהרצת הפקודות בעצמנו.
- נלמד יותר על המערכת.
פקודות בסיסיות
אז אחרי שהגענו למקום בו נוכל לכתוב פקודות, מה נכתוב בו? להלן מספר פקודות בסיסיות שיתכן שנרצה להריץ:
הפקודה | מה היא עושה |
---|---|
man [num] <subject> | נותנת פירוט על פקודות, פונקציות ועוד (פירוט בהמשך) |
ls | מדפיסה את תוכן התיקיה הנוכחית (כמו dir של דוס) |
ls -l | כמו ls עם יותר פירוט |
cd <dir> | עוברת לתיקיה אחרת |
cat <file> | מדפיסה תוכן של קובץ |
tail | מדפיסה את סופו של הקובץ (בדרך כלל כדי לראות קבצי לוגים, שהם ארוכים ורוצים לראות רק את סופם) |
less | מציג את תוכן הקובץ בממשק נוח שמאפשר לגלול |
touch | "נוגע בקובת" - אם לא קיים יוצר אותו, אם קיים פעולתו דומה לפתיחת הקובץ ושמירתו בלי שינויים (משפיע לדוגמא על זמן השינוי האחרון) |
פקודות נוספות
אוהבים פקודות? רוצים עוד? אוהבים גם במקרה פוסטרים? תלו את זה על הקיר!
man pages
מה?!
man היא פקודה בלינוקס. היא קיצור למילה manual, שמשמעותה ידועה ברבים.היא מאפשר לנו לקבל מידע על פקודות בלינוקס. לדוגמא הסתכלנו בטבלה למעלה וראינו את הפקודה ls. מכיוון שמי שכתב את הדף הזה חיפף, לא הבנו כלום. למזלנו, את הפיסקה הזו הוא כתב טוב באמצעותה נוכל להבין מה הוא כתב בפסקאות האחרות.
איך משתמשים?
הכי פשוט? ככה:
man <commnad>
כמו למשל:
man ls
נסו בעצמכם!
למעשה man לא רק נותן מידע על פקודות לינוקס אלא גם על פונקציות מערכת ופונקציות ספריה! (ההבדל ביניהם נלמד בשיעור - פה אנחנו לומדים רק מה שצריך לדעת לפני השיעור).איך זה עובד? פשוט! לדוגמא נרצה לדעת איך להשתמש ב- scanf:
man scanf
מכיוון שיש התנגשויות לפעמים (כמו למשל printf שהיא גם פונקצית ספריה וגם פקודת לינוקס), ומכיוון ש- man היא פונקציה חד ערכית (מקבוצת צירופי האותיות הלטיניות לקבוצת צירופי אותיות לטיניות אחרות שמסבירות אותן) - ניתן להגיד מ- man מה אנחנו רוצים ממנו בדיוק. להלן טבלה:
מספר | משמשעות |
---|---|
1 | פקודת לינוקס |
2 | פונקצית מערכת |
3 | פונקצית ספריה |
man 3 printf
למעשה הכי בטוח כשמחפשים פונקציה זה להגיד ל- man מה אנחנו מחפשים (הוא נותן עדיפות לפי המספר, כך ש- 1 בעדיפות הגבוהה).ניתן לראות את ה"מספר" של מה שאנחנו בודקים למעלה בצדדים (בממשק של man).מה?!?! לא הבנתי כלום.
man man
הקומפיילר - gcc
מה?!
טוב יש גבול לכמה המאמר הזה יכול להיות בסיסי! אם אתה לא יודע מה זה תעשה סקים שוב!
אבל בסקים אין קומפיילר, יש אינטרפרטר, או מה שאנחנו כתבנו, משערך מטא-סירקולרי.
אז מה!! אבל לומדים בשיעור הראשון מה זה קומפיילר אפילו שלא משתמשים בו!
איך מקמפלים?
ככה:
gcc myfile.c -o myoutput.o
ואז נריץ ככה:
./myoutput.o
דגלים מעניינים
דגל | משמעות |
---|---|
-c | רק קמפל, מבלי לבצע קישור (מיועד לקמפול קבצים רבים התלויים זה בזה, שרק לאחר שכולם מקומפלים נרצה לקשר אותם) |
-o | קובץ הפלט של הקומפיילר (קובת הפלט הוא בינארי) |
-D | מגדיר define עבור ה-preprocessor שעליו נלמד בסעיף הבא |
-lXXX | אומרת למהדר לקמפל עם ספריה חיצונית. לדוגמא בקוד רצינו להשתמש בפונקציה pow (העלאה בחזקה), אז בתחילת הקוד עשינו include ל- math.h. קובץ ה- header הזה (math.h) מכיל רק את חתימות הפונקציות ולא את המימושים שלהן. המימושים שלהן לא נכנסים כחלק מהקוד שלנו אלא קומפלו כבר לפני הרבה זמן ורק צריך לבקש מהמהדר ל"דחוף" לנו אותם לתוך הקובץ הבינארי שלו. עבור הספריה math נשתמש ב (קיצור מיוחד עבור math כי משתמשים בה הרבה): $ gcc input.c -lm -o output.o עבור הספריה pthread נשתמש: $ gcc input.c -lpthread -o output.o אם בקוד השתמשנו גם בתרדים וגם במתמטיקה, נקפמל כך: $ gcc input.c -lm -pthread -o output.o |
Preprocessor
כאשר אנחנו כותבים תוכניות ב- C ומקמפלים, למעשה לפני שלב הקימפול רץ על הקוד שלנו כלי בשם ה- preprocessor (על שם רוברטו פרה-פרוססורו). הוא למעשה תכניות לא מתוחכמת יותר מדי שעושה דברים בסגנון של "העתק הדבק". לדוגמא:
#define MEOW 5
#include <stdio.h>int main(){
int a = MEOW + 5;
printf("number is %d", a + MEOW);
return 0;
}
#include <stdio.h>int main(){
int a = MEOW + 5;
printf("number is %d", a + MEOW);
return 0;
}
הקוד ידפיס 15.זה דומה ל- const, רק שזה לא נשמר בזכרון אלא ממש מוחלף במספר עצמו לפני הקימפול.