59
ססססס סס'1 ההההה ההההההUNIX הההההה ההההההההה הUNIX ההההה הההההה הההההההPipeline - ההההה הbash

תרגול מס' 1

  • Upload
    shada

  • View
    70

  • Download
    0

Embed Size (px)

DESCRIPTION

תרגול מס' 1. מערכת ההפעלה UNIX תכניות סטנדרטיות ב UNIX שרשור פקודות באמצעות Pipeline עבודה ב- bash. עבודה בסביבת UNIX. מהי מערכת הפעלה? מערכת הקבצים ב- UNIX עבודה בחלון Shell. מהי מערכת הפעלה?. מערכת הפעלה מהווה שכבת ביניים בין החומרה לבין התוכנה - PowerPoint PPT Presentation

Citation preview

Page 1: תרגול מס'  1

1תרגול מס' מערכת ההפעלהUNIX תכניות סטנדרטיות בUNIX שרשור פקודות באמצעותPipeline -עבודה בbash

Page 2: תרגול מס'  1

UNIXעבודה בסביבת ?מהי מערכת הפעלה-מערכת הקבצים בUNIX עבודה בחלוןShell

2341222מבוא לתכנות מערכות -

Page 3: תרגול מס'  1

מהי מערכת הפעלה? שכבת ביניים בין החומרה לבין התוכנהמערכת הפעלה מהווהלמחשב עבור משתמשים ומתכנתים גישה נוחה מאפשרת

עבור המשתמש: מספקת מנשק נוח–למחשב ושירותים בסיסיים

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

:דוגמאות למערכות הפעלה–Windows–Ubuntu–OSX–Android–iOS

2341223מבוא לתכנות מערכות -

Page 4: תרגול מס'  1

?UNIXמהי UNIXהינה משפחה של מערכות הפעלה

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

רוב מערכות ההפעלה המוכרות לכם עומדות בסטנדרט שלUNIXLinuxהמפורסמת ביותר כיום היא –Windowsיוצאת הדופן היא כמובן –

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

2341224מבוא לתכנות מערכות -

Page 5: תרגול מס'  1

UNIXמערכת הקבצים ב- ארגון הקבצים במחשבמערכת ההפעלה אחראית בין השאר על-מערכת הקבצים בUNIX-מורכבת מקבצים ותיקיות – בדומה ל Windows

הוא אוסף סדור של תווים קובץ–( מאפשרת שמירת מספר קבצים ותיקיות נוספות בצורה Directory) תיקיה–

מסודרתלכל קובץ או תיקיה יש שם

אין מגבלות על מבנה השם )לא חייבת להיות סיומת(–<name>.<extensionמקובל ששם קובץ הוא מהצורה >–

C עבור קובץ מקור בשפת test.cלמשל •(Windows ב-exe סיומת מיוחדת לקובץ הרצה )כמו UNIXאין ב-–

כל קובץ או תיקיה נמצאים בתוך תיקיה כלשהימלבד התיקיה הראשית–

2341225מבוא לתכנות מערכות -

Page 6: תרגול מס'  1

התייחסות לקבציםכדי להתייחס לקובץ יש להשתמש בשמו

נקראת "/"התיקיה הראשית

שמו המוחלטניתן להתייחס לקובץ ע"י:–/usr/mtm/exercise1/main.cהתו "/" משמש כסימן מפריד להגדרת מסלול במערכת הקבצים–

תיקיה הנוכחיתבכל חיבור ובכל זמן קיימת תיקיה המוגדרת כ

מהתיקיה הנוכחית:שם יחסי ניתן להתייחס לקובץ על ידי–main.c אם התיקיה הנוכחית היא/usr/mtm/exercise1–exercise1/main.c אם התיקיה הנוכחית היא /usr/mtm

2341226מבוא לתכנות מערכות -

Page 7: תרגול מס'  1

ריבוי משתמשיםUNIX מרובת משתמשים היא מערכת הפעלה

תיקית ביתלכל משתמש במערכת קיימת

בהתחברות למערכת התיקיה הנוכחית היא תיקית הבית של המשתמש

2341227מבוא לתכנות מערכות -

Page 8: תרגול מס'  1

קיצורים:בנוסף מוגדרים הקיצורים הבאים עבור שמות קבצים

התיקיה הנוכחית- נקודה אחת מייצגת את .–תיקיית האב- שתי נקודות מייצגות את ..–

התיקיה בה נמצאת התיקיה הנוכחית•של המשתמשתיקיית הבית - מייצגת קיצור ל~ ––~user מייצגת קיצור לתיקיית הבית של המשתמש -user

t2 היא תיקית הבית של הקורס בשרת mtmלמשל ~•

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

מתייחס לכל הקבצים *––.*txt ."-יותאם לכל הקבצים ששמם מסתיים בtxt"

2341228מבוא לתכנות מערכות -

Page 9: תרגול מס'  1

דוגמה-נתון מבנה של מערכת קבצים לדוגמה בUNIX:?למה מתייחסות המחרוזות הבאות/usr/uri/progs/Hello.c/usr/uri/progs/Matam

progs/~progs/.hw1/..hw2~ari/progs~mtm/public/1011a/ex1/~progs*/

2341229מבוא לתכנות מערכות -

/ (root)

Matam

usrtmp

ari uri

progs progs

Hello.c

bin

hw1 hw2

Page 10: תרגול מס'  1

10מבוא לתכנות מערכות - 234122

Pipelineהרכבת פקודותPipeline

Page 11: תרגול מס'  1

11מבוא לתכנות מערכות - 234122

הרכבת פקודות נניח שברצוננו להדפיס

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

לא נוכל במצב זה לראות את כל הקבצים

נוכל להשתמש בהפנית לקובץ זמניls פלט הפקודה

:more ולאחר מכן שימוש ב-> ls -l > tmp> more < tmp> rm tmp

Page 12: תרגול מס'  1

12מבוא לתכנות מערכות - 234122

Pipeline-כדי לחסוך את הבלגן שבטיפול בקבצים זמניים ניתן להשתמש בpipeline

המחבר את הפלט של פקודה אחת לקלט של פקודה שניה ישירות כדי לחבר שתי פקודות כך נרשום אותן אחת אחרי השניה כאשר ביניהן

מפריד התו ‘|’:על מנת לראות בשלבים את התוכן של תיקיה גדולה נוכל לרשום כעת

> ls -l | more:ניתן לשלב מספר תכניות בבת אחת

> command1| command2| command3

command1 stdout command2stdin stdout command3stdin

Page 13: תרגול מס'  1

13מבוא לתכנות מערכות - 234122

Pipelineסיכום - כדי לחבר את הפלט של תכנית א' עם הקלט של ניתן להשתמש בתו ’|‘

תכנית ב' בעזרתpipeline נוכל להרכיב פקודות מורכבות בעבודה בטרמינל

מתכניות פשוטות

Page 14: תרגול מס'  1

14מבוא לתכנות מערכות - 234122

UNIXתכניות סטנדרטיות ב-headtailsortuniqgrep

mkdir rmdircatmoreless

cutwctee echoprintf

lscpmvrmpwdcd

Page 15: תרגול מס'  1

15מבוא לתכנות מערכות - 234122

UNIXתכניות סטנדרטיות ב- אופי העבודה בטרמינל וקיום כלים נוחים להרכבת פקודות מעודדים יצירת

תכניות בסיסיות הניתנות להרכבה

קיים מגוון בסיסי של תכניות הזמינות בכל מערכת הפעלה ממשפחתUNIX

:צורת ההפעלה של התכניות היא בד"כ מהצורה הבאה> <command> [options] [input file]

לרוב הפקודות, אם לא יצוין קובץ קלט, הקלט ילקח מהקלט הסטנדרטי )למה?(–בד"כ ניתן להחליף את הסדר בין שם קובץ הקלט לדגלים–

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

Page 16: תרגול מס'  1

UNIXפקודות בסיסיות ב- כדי להדפיס תוכן של תיקיה נשתמש בפקודהls:

> ls [flags] [files] עבור הדפסת תוכן התיקיה הנוכחיתlsניתן לרשום פשוט –ניתן להוסיף את שם התיקיות שאת תוכנן נרצה להדפיס–

דגליםלרוב הפקודות שנלמד אפשר להוסיף פרמטרים נוספים הנקראים: יגרום להדפסת הפלט כך שכל קובץ מופיע בשורת ls עבור הפקודה lלמשל הדגל -–

פלט נפרדת עם מידע נוסף יגרום לפקודה להדפיס גם פריטים נסתריםaהדגל -–

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

כאשר הדגלים מיוצגים ע"י אות יחידה•ls -alזהה לפקודה ls -a -lלמשל הפקודה •

23412216מבוא לתכנות מערכות -

Page 17: תרגול מס'  1

lsדוגמאות - >lshello.c private/ story.txt>ls privateexample.txt>ls -ltotal 12-rw-r--r-- 1 mtm users 3047 Jun 20 10:35 hello.cdrwx------ 2 mtm users 4096 Sep 1 14:28 private/-rw------- 1 mtm users 1081 Sep 1 14:28 story.txt>ls -altotal 28drwx------ 3 mtm users 4096 Sep 1 14:29 ./drwx--x--x 50 mtm users 12288 Sep 1 10:52 ../-rw-r--r-- 1 mtm users 3047 Jun 20 10:35 hello.cdrwx------ 2 mtm users 4096 Sep 1 14:28 private/-rw------- 1 mtm users 1081 Sep 1 14:28 story.txt

23412217מבוא לתכנות מערכות -

Page 18: תרגול מס'  1

ניהול תיקיות הדפסת שם התיקיה הנוכחית ע"י הפקודהpwd:

> pwd ניתן להחליף את התיקיה הנוכחית ע"י הפקודהcd:

> cd <directory> ניתן ליצור תיקיה חדשה ע"י הפקודהmkdir:

> mkdir <name> ע"י הפקודה ריקהניתן למחוק תיקיה rmdir:

> rmdir <directory>

23412218מבוא לתכנות מערכות -

Page 19: תרגול מס'  1

ניהול תיקיות - דוגמאות>cd ~>pwd/usr/030/moshe>cd matammatam: No such file or directory.>mkdir matam>cd matam>pwd/usr/030/moshe/matam>cd ..>rmdir matam

23412219מבוא לתכנות מערכות -

מעבר לתיקית הבית בעזרת הקיצור ~

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

מתאימה והפקודה תופסק

מעבר לתיקית האב בעזרת הסימון ..

Page 20: תרגול מס'  1

פקודות לניהול קבצים הפקודהcp משמשת להעתקת קבצים או תיקיות:ניתן להשתמש בפקודה בשתי דרכים

> cp [options] <file1> <file2>file2 בשם file1יוצרת העתק חדש של –

> cp [options] <file1> ... <file> <directory>יוצרת העתקים חדשים של כל הקבצים בתיקיה קיימת–

( אם קיים כבר קובץ בעל השם המבוקש הוא נמחק ומוחלףoverwritten)

:דגלים שימושיים–-rמבצע העתקה רקורסיבית של תיקיות ותוכנן :

ללא דגל זה תיקיות אינן מועתקות•–-iמבקש אישור לפני מחיקת קובץ קיים :

23412220מבוא לתכנות מערכות -

Page 21: תרגול מס'  1

פקודות לניהול קבצים הפקודהmv קבצים או תיקיות או שינוי שמם להעברתמשמשת:ניתן להשתמש בפקודה בשתי דרכים

> mv [options] <file1> <file2>file2 ל-file1משנה את שמו של –עובדת גם עבור תיקיות–

> mv [options] <file1> ... <file> <directory>אם הפרמטר האחרון הוא שם של תיקיה קיימת הפקודה מעבירה את הקבצים לתוכה–

( אם קיים כבר קובץ בעל השם המבוקש הוא נמחק ומוחלףoverwritten)

:דגלים שימושיים–-iמבקש אישור לפני מחיקת קובץ קיים :

23412221מבוא לתכנות מערכות -

Page 22: תרגול מס'  1

פקודות לניהול קבצים הפקודהrm :מאפשרת מחיקת קבצים או תיקיות

> rm [ options ] <files>:דגלים שימושיים

–-rמבצע מחיקה רקורסיבית של תיקיות :ללא דגל זה ספריות אינן נמחקות•

–-iמבקש אישור לפני מחיקת קובץ :–-fלא מבקש אישור בשום מקרה :

שימו לב: לא ניתן לשחזר קבצים שנמחקו

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

> rm -rf *

23412222מבוא לתכנות מערכות -

Page 23: תרגול מס'  1

פקודות לניהול קבצים - דוגמאות

>lshello.c private/ story.txt>cp hello.c prog.c>lshello.c private/ prog.c story.txt>mv prog.c private/program.c>lshello.c private/ story.txt>ls privateexample.txt program.c>mv hello.c story.txt private>lsprivate/

23412223מבוא לתכנות מערכות -

Page 24: תרגול מס'  1

פקודות לניהול קבצים - דוגמאות

>ls privateexample.txt hello.c program.c story.txt>rm -i private/story.txt rm: remove regular file `private/story.txt'? y>rm privaterm: cannot remove directory `private': Is a directory>rm -ri privaterm: descend into directory `private'? n>rm -rf private>ls>

23412224מבוא לתכנות מערכות -

Page 25: תרגול מס'  1

הדפסת תוכן של קבצים הפקודהcat מדפיסה למסך את תוכן הקובץ

> cat <file>אם הקובץ גדול המסך יגלול ולא נוכל לראות בנוחות את התחלתו–אם לא מופיע שם קובץ הפקודה מדפיסה את הקלט הסטנדרטי )בד"כ קלט מהמקלדת(–

בהמשך נראה למה זה מועיל•

הפקודהmore מדפיסה למסך את התוכן, אך עוצרת כאשר נגמר המקום> more <file>

תגרום להדפסת שורה נוספתenterלחיצה על – תפסיק את ההדפסהqלחיצה על –

הפקודהless היא שיפור שלmoreומאפשרת גלילה בשני הכיוונים ועוד אפשרויות > less <file>

23412225מבוא לתכנות מערכות -

Page 26: תרגול מס'  1

26מבוא לתכנות מערכות - 234122

headהפקודה הפקודהhead:מדפיסה רק את תחילת הקלט

> head [-n#] [files] השורות הראשונות בקלט#מדפיסה את

שורות10אם לא מוגדר מספר יודפסו –יודפסו כל שליליאם המספר שהוגדר –

השורות מלבד # השורות האחרונות-#עבור מספר חיובי ניתן לרשום גם –

a line 1a line 2a line 3a line 4a line 5

a_fileb line 1b line 2b line 3

b_file

> head –n+2 a_filea line 1a line 2> head –n+1 < b_fileb line 1> head –n-2 a_file b_file==> a_file <==a line 1a line 2a line 3

==> b_file <==b line 1

Page 27: תרגול מס'  1

27מבוא לתכנות מערכות - 234122

tailהפקודה הפקודהtail:מדפיסה רק את סוף הקלט

> tail [-/+#] [files] מדפיסה את # השורות האחרונות בקלט-#עבור – מדפיסה החל מהשורה ה-#+#עבור – השורות האחרונות10ברירת המחדל היא הדפסת –

כיצד נדפיס את שורות– מקובץ מסוים?2-3

a line 1a line 2a line 3a line 4a line 5

a_fileb line 1b line 2b line 3

b_file

> tail -2 a_filea line 4a line 5> tail +2 a_filea line 2a line 3a line 4a line 5> tail -1 a_file b_file==> a_file <==a line 5

==> b_file <==b line 3

> head –n+3 a_file | tail -2a line 2a line 3

Page 28: תרגול מס'  1

28מבוא לתכנות מערכות - 234122

sortהפקודה הפקודהsort)מדפיסה את הקלט ממוין )לפי שורות

> sort [options] [files]–-nממיינת מספרים לפי ערכם :–-r)מדפיסה את התוצאות בסדר יורד )ברירת המחדל היא סדר עולה :–-k##-מתייחס לכל שורה החל מהמילה ה :

1המילים ממסופרות החל מ-•–-f מתעלם מהבדלי :uppercase/lowercase

ההתעלמות היא ברירת המחדלsortבחלק מהמימושים של •–-bמתעלם מרווחים בתחילת השורה :–-sמבצע מיון יציב - שומר על הסדר המקורי בין שורות שערכן שווה :

Page 29: תרגול מס'  1

29מבוא לתכנות מערכות - 234122

sortדוגמאות - > sort dataFatherWorldforwho> sort -f dataFatherforwhoWorld> sort -r datawhoforWorldFathersort -rf dataWorldwhoforFather

> ls -ltotal 4-rw------- 1 romano root 520 Nov 8 23:09 data-rw------- 1 romano 368 43 Nov 8 23:12 ex1-rw------- 1 romano 368 428 Nov 8 23:22 ex2-rw------- 1 romano 368 322 Nov 10 13:30 ex3> ls -l | sort -rnk5-rw------- 1 romano root 520 Nov 8 23:09 data-rw------- 1 romano 368 428 Nov 8 23:22 ex2-rw------- 1 romano 368 322 Nov 10 13:30 ex3-rw------- 1 romano 368 43 Nov 8 23:12 ex1total 4

WorldwhoforFather

data211

numbers> sort numbers112> sort -n numbers211

Page 30: תרגול מס'  1

30מבוא לתכנות מערכות - 234122

uniqהפקודה הפקודהuniqמדפיסה עותק יחיד של שורות זהות סמוכות

> uniq [options] [input [output]]עבור קובץ ממוין שורות זהות לא יודפסו יותר מפעם אחת–- היא מקבלת את הקלט מקובץ יחיד אינה במבנה הסטנדרטי הפקודה –

והארגומנט הנוסף ישמש לקובץ הפלט–-cמדפיס כל שורה פעם אחת ואת מספר העותקים שלה :–-dמדפיס רק שורות המופיעות יותר מפעם אחת :–-uמדפיס רק שורות המופיעות פעם אחת בלבד :

בבת אחתc/-d/-uהאפשרויות מבין -רק באחת ניתן להשתמש •: התעלם מ-# המילים הראשונות )בקבלת ההחלטה האם שורות זהות(-#–

Page 31: תרגול מס'  1

31מבוא לתכנות מערכות - 234122

uniqדוגמאות - > uniq file3onetwothreeone> uniq file3 list> cat listonetwothreeone> uniq sentencesThis is sparta!It is sparta!Bye bye sparta!> uniq -1 sentencesThis is sparta!Bye bye sparta!> uniq -2 sentencesThis is sparta!

UriDanUriElenaAlexOfraUriOfra

namesonetwotwothreethreethreeoneone

file3> sort names | uniqAlexDanElenaOfraUri> sort names | uniq -uAlexDanElena> sort names | uniq -dOfraUri> sort names | uniq -c 1 Alex 1 Dan 1 Elena 2 Ofra 3 Uri

This is sparta!It is sparta!Bye bye sparta!

sentences

Page 32: תרגול מס'  1

32מבוא לתכנות מערכות - 234122

grepהפקודה הפקודהgrepמחפשת ביטויים בתוך קבצים

> grep [options] <expression> [files]ניתן לחפש מילים מסוימות או ביטויים מורכבים–מדפיסה את כל השורות בקובץ המכילות את הביטוי שהוגדר––-vמדפיסה את השורות בהן לא מופיע הביטוי :–-i מתעלם מהבדלי :uppercase/lowercase–:-w< מדפיסה את כל השורות בהן expression)מופיע בדיוק )לא כתת מחרוזת >

לשאר המחרוזת בעזרת כל תו שאינו אותיות או מספרים.expression מפריד בין wהשימוש ב-•–-nהדפס את השורות ואת מספרן בקבצים :–-lהדפס רק את שמות הקבצים בהן נמצאו שורות מתאימות :–-cהדפס רק את כמות השורות שנמצאו בכל קובץ ללא הדפסת השורות עצמן :הביטוי לחיפוש יכול להיות מורכב יותר ממילה פשוטה:–

גרשייםכדי לחפש מחרוזת עם רווחים יש להוסיף •את סוף השורההתו $ מייצג תחילת שורה והתו ^ •grep של manניתן לחפש ביטויים מורכבים יותר, לשם כך הסתכלו בקובץ ה-•

Page 33: תרגול מס'  1

33מבוא לתכנות מערכות - 234122

grepדוגמאות - > grep cow farm1cow Betsyslim cow Dazytwo cows Dartsy & Teo> grep -v cow farm1goat UptonFat Cow Burgerhorse Admiral> grep -i cow farm1cow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teo> grep -w cow farm1cow Betsyslim cow Dazy> grep "slim cow" farm1slim cow Dazy> grep ^cow farm1cow Betsy

goat Uptoncow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teohorse Admiral

farm1> grep cow farm1 farm2farm1:cow Betsyfarm1:slim cow Dazyfarm1:two cows Dartsy & Teofarm2:cow Lenifarm2:cow Oreo> grep -n cow farm1 farm2farm1:2:cow Betsyfarm1:3:slim cow Dazyfarm1:5:two cows Dartsy & Teofarm2:2:cow Lenifarm2:4:cow Oreo> grep -l cow farm1 farm2farm1farm2> grep -c cow farm1 farm2farm1:3farm2:2> grep o$ farm1two cows Dartsy & Teo

sheep Brookcow Lenigoat Astercow Oreo

farm2

Page 34: תרגול מס'  1

34מבוא לתכנות מערכות - 234122

cutהפקודה הפקודהcut משמשת להפרדת עמודות מתוך הקלט

> cut <options> [files]–-c<list> בשורה המתאימים לאינדקסים המבוקשיםהתווים: הדפס רק את –-f<list> בשורה המתאימים לאינדקסים המפורטיםהשדות: הדפס רק את

Tabהשדות בשורה מופרדים כברירת מחדל ע"י •אם התו המפריד אינו קיים בשורה תודפס כל השורה•

–-d"?"עבור שימוש באפשרות -תו המפריד : השתמש בתו שהוגדר כ(f)המבוקשים מורכבת ממספר אינדקסים מופרדים רשימת האינדקסים –

בפסיק, כאשר בנוסף ניתן לבקש טווח אינדקסים ע"י שימוש בתו - )מקף( ומעלה10, ו-6, 5, 2, 1- ידפיס את התווים, c1,2,5-6,10למשל: -•

אם האינדקסים המבוקשים מחוץ לתחום תודפס שורה ריקה–

Page 35: תרגול מס'  1

35מבוא לתכנות מערכות - 234122

cutדוגמאות - > cut -c1-3,5,8-10 file1a11a a1b21b b2c31c c3> cut -d" " -f2,4 file1a12 a14b22 b24c32 c34> cut -d":" –f1 file2a11b21c31 c32 c33> cut -d":" –f2-3 file2a12:a13b22c31 c32 c33> cut -d" " -f-2,4- file1a11 a12 a14 a15b21 b22 b24 b25c31 c32 c34 c35

a11 a12 a13 a14 a15b21 b22 b23 b24 b25c31 c32 c33 c34 c35

file1

a11:a12:a13 b21:b22 c31 c32 c33

file2

Page 36: תרגול מס'  1

36מבוא לתכנות מערכות - 234122

wcהפקודה הפקודהwc משמשת לספירת תווים, מילים או שורת בקלט

> wc [options] [files]–-cמדפיסה את מספר התווים בלבד :–-lמדפיסה את מספר השורות בלבד :–-wמדפיסה את מספר המילים בלבד : מדפיסה אתwcאם לא צוין דגל מסוים –

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

שורת סיכוםמודפסת גם

> wc -w war_and_peace590234 war_and_peace> wc -l war_and_peace55480 war_and_peace> wc -c war_and_peace3348543 war_and_peace> wc mtm_ex2.h 120 641 4161 mtm_ex2.h> wc mtm_ex2.h parsing_example.c 120 641 4161 mtm_ex2.h 136 692 4543 parsing_example.c 256 1333 8704 total

Page 37: תרגול מס'  1

37מבוא לתכנות מערכות - 234122

teeהפקודה הפקודהteeמשמשת לשכפול הפלט

> tee [options] [files]משכפלת את הקלט הסטנדרטי ומדפיסה אותו לפלט הסטנדרטי ולכל אחד –

[filesמהקבצים ברשימה ]–-aמשרשרת לקבצים במקום לכתוב אותם מחדש :מבנה הפקודה אינו סטנדרטי, היא מקבלת–

קלט רק מהקלט הסטנדרטי

> head -3 a_file | tee file1 file2 | tail -2a line 2a line 3> cat file1a line 1a line 2a line 3

Page 38: תרגול מס'  1

38מבוא לתכנות מערכות - 234122

printfהפקודה הפקודהprintf מאפשרת הדפסה מעוצבת של טקסט בדומה לפונקציה

Cב-> printf <format> [arguments]

–%sמציין במחרוזת הפורמט שיש להכניס כאן את ערך הארגומנט הבא :–]-[%m[.n]s מדפיסה את המחרוזת המתאימה מרשימת המחרוזות כך :

תווים מהמחרוזת. n תווים ותכיל לכל היותר mשהתוצאה תהיה באורך )מקף(.-אלא אם מופיע מיושרת לימין המחרוזת תהיה

> printf "%s %s! \n" Hello worldHello world!

> printf "%-10s %.5s\n" Hello world.Hello world!

Page 39: תרגול מס'  1

39מבוא לתכנות מערכות - 234122

- סיכוםUNIXתכניות סטנדרטיות ב--ניתן להשתמש במגוון תכניות סטנדרטיות בUnix הפועלות משורת

הפקודה ומבצעות פעולות בסיסיות ניתן להדפיס את תחילת או סוף הקלט ע"יhead-ו tail ניתן למיין את הקלט לפי שורות בעזרתsort ניתן להשמיט שורות זהות בעזרתuniq ניתן לחפש שורות מסוימות בקבצים בעזרתgrep ניתן להפריד עמודות ספציפיות מהקלט בעזרתcut ניתן לספור את מספר המילים והשורות בקלט בעזרתwc ניתן לשכפל את ערוץ הפלט בעזרת הפקודהtee ניתן להדפיס מחרוזות בעזרתprintf

Page 40: תרגול מס'  1

40מבוא לתכנות מערכות - 234122

Bashעבודה ב- תכונות מתקדמות שלbash-עבודת הbash

Page 41: תרגול מס'  1

41מבוא לתכנות מערכות - 234122

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

echoבפקודה הפקודהecho מדפיסה את הפרמטרים שקיבלה

> echo [-n] [words]–-nמדפיס ללא ירידת שורה :

> echo Hello world!Hello world!

>

> echo –n Hello world!Hello world!>

Page 42: תרגול מס'  1

42מבוא לתכנות מערכות - 234122

aliasנתינת כינויים לפקודות - הפקודהalias-מאפשרת להגדיר קיצורים ב Shell

> alias <new name>="<command + parameters>"אסור לשים רווחים בסמוך לתו '='–

< לאחר הרצת הפקודה נוכל לרשום את הפקודהnew name כקיצור לפקודה ><command.עם הפרמטרים שהוספנו > ואם כן יבצע החלפה alias יבדוק בשלב עיבוד הפקודה האם המילה הראשונה היא Shellה-–

מתאימה כדי לבטלalias ניתן להשתמש בפקודה unalias <alias>

< alias ll="ls –l"> ll-rw-r--r-- 1 user staff 0 Nov 13 15:14 a.c> alias cdex2="cd ~/mtm/ex2"> cdex2> alias GCC="gcc -std=c99 -Wall -Werror -pednatic-errors"> GCC hello.c -o hello> unalias GCC> GCC hello.c -o hello-bash:GCC: Command not found.

Page 43: תרגול מס'  1

43מבוא לתכנות מערכות - 234122

Filename Expansion ניתן לרשום בפקודה תבנית המתייחסת למספר קבצים. במקרה זהbash

יחליף את מחרוזת התבנית בפקודה ברשימת הקבצים המתאימים לתבנית)הסימן * מתאים למחרוזת כלשהי )כולל ריקההסימן ? מתאים לתו כלשהו יחיד] [-ניתן להתייחס למספר תווים אפשריים על ידי שימוש ב

ניתן לרשום את התווים האפשריים אחד אחרי השני במפורש–a-zניתן לרשום טווח של תווים, למשל –

ניתן להתייחס למספר מחרוזות שונות בעזרת } {

אפשרות זו אינה מתחשבת– בקבצים קיימים

< lsaxb.c a3b.c cab.txt a4b.txt> echo files: *files: axb.c a3b.c cab.txt a4b.txt> echo The source files are *.cThe source files are axb.c a3b.c> echo a[0-9]b.*a3b.c a4b.txt> echo a3b.{c,txt}a3b.c a3b.txt

Page 44: תרגול מס'  1

44מבוא לתכנות מערכות - 234122

משתנים-ניתן להציב ערך למשתנה בbashעל ידי השמה ישירה

> <varname>=<value>, לאחר ביצוע השמה למשתנה הוא bashעל משתנים ב- אין צורך להכריז –

מוגדר אוטומטיתערך של משתנה על ידי השמה נוספת להחליףניתן –אסור לשים רווח בין סימן ההשמה לשם המשתנה והערך–

ינסה להריץ פקודה ששמה כשם המשתנהShellאם יהיה כזה רווח ה-•

למשל:$ניתן לקרוא משתנים על ידי שימוש באופרטור ,> echo $<varname>

השימוש במשתנה הוא פשוט החלפת הקריאה למשתנה בערך השמור בו–

Page 45: תרגול מס'  1

45מבוא לתכנות מערכות - 234122

משתנים ניתן לבטל הגדרה של משתנה על ידי הפקודהunset <varname>

< unset my_variableבדרך כלל אין צורך בכך–אם מנסים לקרוא משתנה שאינו מוגדר אז לא מודפס כלום–

$ ניתן להשתמש ב-} { כדי לסמן מהו שם המשתנה לאופרטורמועיל כאשר השימוש במשתנה צמוד למחרוזת נוספת–

> a=Hell> echo $ao

> echo ${a}oHello

Page 46: תרגול מס'  1

46מבוא לתכנות מערכות - 234122

משתנים - מערכים של מחרוזות על ידי שימוש בסוגרייםמערךניתן לשמור במשתנה יחיד

> arr=(1 2 3) ( מהרשימה0קריאת משתנה שקולה לקריאת האיבר הראשון )אינדקס

> echo $arr1

:קריאת כל המערך ניתנת מתבצעת על ידי שימוש ב-]*[ ובסוגריים מסולסלים> echo ${arr[*]{1 2 3> echo $arr[*]1[*]

ניתן לגשת לאיבר יחיד בעזרת אופרטור] [ניתן להוסיף איברים חדשים למערך בשיטה זו–

> arr[3] = 4> echo ${arr[*]{1 2 3 4

Page 47: תרגול מס'  1

47מבוא לתכנות מערכות - 234122

משתנים - מערכים ניתן לקבל את מספר האיברים במערך בעזרת<#{varname$}]*[>:

> echo ${#arr[*]}4

ניתן לגשת לתחומים של איברים במערך במערך> echo A:${arr[*]:0:2} A:1 2> echo B:${arr[*]:1} B:2 3 4> echo C:${arr[*]:2:1} C:3

המספר הראשון מציין את אינדקס ההתחלה של התחום–המספר השני מציין את מספר האיברים בתחום–

אם הוא אינו מופיע יודפסו כל האיברים החל מהאינדקס המבוקש•

Page 48: תרגול מס'  1

48מבוא לתכנות מערכות - 234122

משתנים - מחרוזות בגרשיים כפוליםניתן לשמור מחרוזות המכילות רווחים בעזרת שימוש

> list=(Matam "Hello world" 17)> echo ${#list[*]} : ${list[*]}3 : Matam Hello world 17> echo ${list[1]}Hello world

קריאת משתנה שערכו מכיל רווחים תגרום לאיבוד הרווחים המדויקים שהיו בין המיליםקודם לכן

> str=" Very crazy spaces "> echo $strVery crazy spaces

Page 49: תרגול מס'  1

49מבוא לתכנות מערכות - 234122

משתנים - מחרוזותניתן להשתמש בגרשיים כפולים כדי לשמור על הרווחים בזמן ההחלפה

> echo "$str" Very crazy spaces

ניתן לקבל את מספר התווים במשתנה ע"י שימוש ב-#, בדומהלקבלת אורכו של מערך

> echo ${#str}29

Page 50: תרגול מס'  1

50מבוא לתכנות מערכות - 234122

משתנים - מערכיםניתן להתייחס למשתנה רגיל כאל רשימה בעלת איבר יחיד

> a=Hello> echo ${a[0]}Hello> str="Hello world"> echo ${str[1]}

> list=(Hello world)> echo ${list[1]}world

בעזרתunsetנוכל לבטל את הרשימה או איבר אחד מתוך הרשימה > unset list[1]> echo ${list[*]}Hello

Page 51: תרגול מס'  1

51מבוא לתכנות מערכות - 234122

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

מחרוזות

ניתן להחליף ביטוי אריתמטי בערכו על ידי<(($expression))>הערך המספרי של המחרוזות ישמש בחישוב הביטוי–משתנים יוחלפו בערכם )גם ללא $(– בחישוב0אם אחד הארגומנטים אינו מספר, ערכו יהיה –echo $((3 + 4)) <0משתנה שאינו מוגדר, או ערכו אינו מספר יחושב כ-–

7> n=$((3 * 7 + 4))> echo $n25> a=5> b=7> sum=$(($a + $b))> echo $sum12

> echo $(( Hello ))0> a=4> echo $(( 2 + a ))6> str="Hello world!"> num=17> echo $(( $str * $num ))0

Page 52: תרגול מס'  1

52מבוא לתכנות מערכות - 234122

משתנים - פעולות חשבוניות ניתן לבצע פעולות חשבוניות שונות בדומה לשפתC:

/ ו-*, -, +פעולות חשבוניות פשוטות: –=השמות: – ++ ו---, =-, =+הגדלות והקטנות: –

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

נוח כאשר רוצים להשתמש ב-++ ואין צורך בערך ההחזרה–

> let n=3+4> let n++> echo $n8> $((n++))-bash: 9: command not found

Bash מנסה לבצע " ונכשל9פקודה בשם "

Page 53: תרגול מס'  1

53מבוא לתכנות מערכות - 234122

היסטוריהBash שומר את הפקודות האחרונות

שהתבצעו ומאפשר ביצוען מחדש הדרך הכי פשוטה לגשת להיסטוריה היא על ידי

↓ ו-↑ שימוש ב- ניתן לראות את הפקודות האחרונות שבוצעו

history על ידי הפקודה ניתן לבצע את האחרונה על ידי!! ניתן לבצע את פקודה מספר על ידי!ניתן לבצע את הפקודה האחרונה שהתחילה

<string!>< על ידי stringב->ניתן לבצע את הפקודה האחרונה שמכילה

<string על ידי ><?!string> אפשר להחליףstr1 במחרוזתstr2בפקודה

.^ str1^str2^ האחרונה ע"י

> history 1 17:20 a=3 2 17:21 let b=4 3 17:22 n=$((b + a)) 4 17:24 echo $n 5 17:28 history> !4echo $n7> !!echo $n7> !letlet b=4> ls /it/is/avery/long/path

> ^ls^cat^cat /it/is/avery/long/path

החלפות המתבצעות בגלל גישה להיסטוריה מודפסות בזמן ביצוען ולפני ביצוע

הפקודה

Page 54: תרגול מס'  1

54מבוא לתכנות מערכות - 234122

Command Substitution

ניתן "לשרשר" פקודות על ידי שימוש בגרשיים הפוכים`backquotes או backticksבאנגלית: –

Bashיבצע תחילה את הפקודה בתוך ` ` ויחליף אותה בפלט שלה

> echo The length of $str is `echo -n $str | wc -c`The length of Hello is 5> grep –c cow `cat farms_list.txt`farm1:3farm2:2> a="there are `ls | wc -l` files in `pwd` "> echo $athere are 662 files in /usr/bin

farm1farm2

farms_list.txt

Page 55: תרגול מס'  1

55מבוא לתכנות מערכות - 234122

סוגי גרשייםמשמשים לשמירה על רווחים" ", גרשיים כפולים ,

משתמשים ב-" " כאשר יש צורך לשמור מחרוזות שלמות במדויק–> sentence="The dingo ate your baby"

בתוך גרשיים אלו לא מתבצעות החלפות של תבניות בשמות הקבצים המתאימים–> echo "*.c" : *.c*.c : main.c app.c hello.c

' ' מונעים את כל ההחלפות בתחומםגרשיים בודדים ,> echo lets make some '$$'lets make some $$

( גרשיים הפוכיםbackticks ) מבצעיםcommand substitution

Page 56: תרגול מס'  1

56מבוא לתכנות מערכות - 234122

shellעבודת ה--עבודת הShell:מתבצעת בלולאה

promptהצגת –המתנה לפקודה–עיבוד הפקודה עד לקבלת פקודה פשוטה–ביצוע הפקודה–

לשם כךBashמשתנים, ההיסטוריה מנהל מבני נתונים פנימיים אשר שומרים את ה שהוגדרו aliasesוה-

הטיפול בפקודה מתבצע בשלושה שלבים עיקריים: הפקודה מופרדת למילים על פי רווחים וטאבים. התווים |,> ו-< ניתוח הפקודה1.

מפרידים בין פקודות: ביצוע החלפות מחרוזות הפקודה עד לקבלת פקודה פשוטהעיבוד הפקודה2.: שליחת הפקודה הפשוטה שהתקבלה לביצוע על ידי מערכת ההפעלהביצוע הפקודה3.

Page 57: תרגול מס'  1

57מבוא לתכנות מערכות - 234122

עיבוד הפקודה בשלב זה מבצעbash החלפות במחרוזת הפקודה עד לקבלת פקודה

פשוטה:

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

מההיסטוריה aliasמתבצעת החלפה לפי ה- aliasאם המילה הראשונה בפקודה הינה 2.

המוגדר המתאימיםמשתניםהחלפת ביטויים המתחילים ב-$ בערכי ה3.ברשימת הקבצים המתאימהתבניות של שמות קבצים החלפת 4.בתוצאת הפקודהגרשיים הפוכים החלפת פקודות המופיעות בתוך 5.

Page 58: תרגול מס'  1

58מבוא לתכנות מערכות - 234122

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

הפקודות מתחלקות שני סוגים:,...cd, let, unset, למשל Shellשל ה-פקודות פנימיות –...ls, gcc, cat, sort- שמות קבצי הרצה, למשל פקודות חיצוניות –

אם שם הפקודה מתאים לפקודה פנימית היא תיבחר-אחרת הShellמשתנה יחפש בכל התיקיות המופיעות בpath קובץ הרצה בשם

המתאים,-אם נרצה לאפשר לShellלהריץ תכניות

מהתיקיה הנוכחית ללא שימוש ב-‘.’.PATHניתן להוסיף את התיקיה הנוכחית ל-

. ":" התיקיות מופרדות ע"י סימן ניתן להשתמש בפקודה which כדי לגלות

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

> PATH=${PATH[*]}:.> helloHello world!> which hello./hello> which gcc/usr/bin/gcc< which cdWhich: no cd in (…content of PATH…)

Page 59: תרגול מס'  1

59מבוא לתכנות מערכות - 234122

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

פעולות מסובכות בקלותניתן להתייחס למספר קבצים בבת אחת על ידי שימוש בתבניות ניתן להגדיר כינויים לפקודות ופרמטרים שכיחים בעזרתaliasניתן לקרוא לפקודות שהתבצעו בעבר הקרוב בעזרת ההיסטוריה-ניתן לשמור ערכים במשתנים ולנצלם לפקודות בBash-כל המשתנים בbashהם מסוג רשימות של מחרוזות ניתן להשתמש ב-` ` כדי לבצע החלפת פקודה בפלט שלה בשורות

bashפקודה ב- כל התכונות שלbash מבוצעות על ידי החלפת מחרוזות פשוטה בשלב

עיבוד הפקודה