ארזים

סלוגן חזק ומגניב



מערכות הפעלה - דרישות לידע מוקדם


"יש דברים שכדאי לדעת." (עממי, 1783)



פקודות בסיסיות בלינוקס


איפה, איך ולמה מריצים את הפקודות?


איפה


שאלה מצויינת! בגדול, ב- shell.
איך מגיעים ל- shell? לפנינו מספר אפשרויות:
  • לפתוח אחד כזה בממשק הגרפי. לדוגמא בגנום: הפעילו את gnome-terminal, או על ידי מציאתו בתפריט או על ידי לחיצה על Alt+F2 ואז הריצו gnome-terminal. לחיצה על ctrl+alt+t.
כמובן שיש עוד כאלה גם בגנום וגם בממשקים אחרים (למעשה כולם אותו shell - זה של לינוקס, בעיצובים שונים ואפשרויות מגוונות)
  • בלינוקס קיימים לנו מספר הפעלות (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פונקצית ספריה

וכעת אם נרצה לראות הסברים לגבי הפוקנציה printf נכתוב:

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;
}


הקוד ידפיס 15.

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

















אינך מחובר כעת.
התחבר עכשיו!


ארזים 2007-2016 © כל הזכויות שמורות. מלבד זכות השתיקה, היא שמורה למרקו. הבהרה משפטית.
WWW.BOLTWIRE.COM