UNIX course
מתוך OdedWiki
תוכן עניינים |
[עריכה] שיעור I
[עריכה] שורשי UNIX
- BELL
- BSD (חינמי של אוניברסיטת ברקלי)
- IBM
- SUN
- SOLARIS
- DEC-DSF
- XENIX (מסחרי)
- SCO
- SYS III
- SYS IV
- HPUX
- לינוקס: לינוס טרובלדס פיתח KERNEL דומה ל-UNIX ו-GNU GNU IS NOT UNIX
- HPUX
- SYS IV
- BSD (חינמי של אוניברסיטת ברקלי)
[עריכה] היררכיה
- חומרה -> (דרייברים DRIVERS מקשרים)
- kernel
- אחראי לקלט/פלט
- כתוב ב-assembler ו-C
- כולל ניהול משימות -scheduling
- ניהול file system
-
- ניהול משתמשים
- ניהול משאבים
- קריאות מערכת (SYS CALLS) קוראות ל:
- אפליקציות שכוללות:
- כלים utilities
- shell
- משתמש/תוכנות user/programs
- אפליקציות שכוללות:
- קריאות מערכת (SYS CALLS) קוראות ל:
- kernel
[עריכה] file system
- מערכת היררכית:
- ה-ROOT הוא ה- "/" (בניגוד ל-"\") ותחתיו:
- ETC
- HOME
- BIN
- DEV
- ה-ROOT הוא ה- "/" (בניגוד ל-"\") ותחתיו:
- קובץ הוא זרם בתים, אין הבדל בין קובץ לספריה
- הכל זה קובץ, מקלדת, תקשורת, טרמינל, מדפסת
- אין צורך בניהול מיוחד של התקני input/output
טבלאות:
- טבלת inode: האינדקס שמחזיק את כל הנתונים על ה"קבצים" (לכל קובץ יש inode משלו) במערכת:
- file type
- number of hard links
- size ועוד...
- data blocks: מכילים את המידע עצמו של הקבצים (הביטים של התמונות והקבצים).
- PROCESS: כל PROCESS הוא ריצה של אפליקציה, לכל PROCESS יש PID (שזה PROCESS IDENTIFIER) דרכו פונים אליו.
- כל פקודה ב-UNIX יולדת/יוצרת process
- לכל process יש process אב חוץ מה-process הראשון, process יוצרים process בנים.
- ה-KERNEL כולל מנגנונים לניהול ותיזמון PROCESS
- daemon הוא process שרץ כל הזמן ומספק שירותים (services)
[עריכה] LOGIN
- init(): הוא ה-process הראשון, הוא בודק טרמינלים זמינים ומחכה לניסיונות login
- fork(): הוא יוצר process של התחברות
- process ה-logger בודק שם משתמש וסיסמה עפ"י קובץ הסיסמות.
- קובץ הסיסמות נמצא ב: /etc/passwd הוא כולל את הנתונים על המשתמש, כולל ספריית התחלה (HOME) וshell להרצה בהתחברות
- בכל מערכת יש שם משתמש root שהוא משתמש העל, ה-USER ID שלו הוא 0
- הסיסמה לא מוצגת בקובץ passwd אלא מוצגת כ-"X"
- משתמש שמוגדר כ-ADMIN יכול לראות את הסיסמות של כל היוזרים בקובץ shadow
[עריכה] shell
ממשק משתמש שהוא סוג של command line interpenter
- מריץ פקודות פנימיות ואפליקציות, לדוג':
- cc: compiliation
- ls: listing of files
- mail: electronic mail
- vi: file editing
- history: list of commands executed
- מבנה פקודות ב-shell:
- COMMAND OPTION EXPRESSION FILENAME
- פקודה command: הפקודה עצמה, אם אין פקודה כזו הוא מחפש אפליקציות בפרמטר path (לכל משתמש יש parameter כזה).
- רווח
- אופציות option: אות אחת או יותר שמשנה את הפעולה של התוכנה.
- רווח
- ביטוי expression: תוכן שאפשר להשתמש בו לפקודה, לדוג': מילת חיפוש
- רווח
- קובץ filename: הקובץ עליו להריץ את הפקודה
דוגמות:
- ls -l אופציה אחת
- ls -lr או ls -l -r מס' אופציות
- sort -t: file1 file2 מס' אופציות (מציג מיון של התוכן של שני הקבצים ביחד)
- grep "hello world" file : חיפוש hello world בקובץ בשם file
- grep -v -n hello file : מציג את כל השורות בקובץ בשם file שלא (-v) מכילות את הסטרינג hello יחד עם מספור (-n).
- cp /etc/passwd passwd מעתיק את קובץ הסיסמות של המערכת לקובץ בשם passwd בספרייה הנוכחית
- cp passwd /etc/passwd מעתיק את קובץ passwd שנמצא בנתיב הנוכחי לקובץ סיסמות המערכת
- pwd - הדפס את ספריית העבודה : print working directory
- man tail: הצג את המדריך של פקודה tail
- tail -f: מציג את הקובץ בשידור חי
- שירשור (חיבור) קבצים: cat file1 file2 > newfile
.
- man המדריך של המערכת
- man ls : מציג את המדריך של פקודה ls
- man -k keyword: מחפש את המילה keyword במדריך
- man 2 keyword: מחפש את המילה keyword בחלק 2 של המדריך, להלן החלקים:
- פקודות משתמש user commands
- system calls
- library functions
- special files
- file firmats
- games
- misc section
- admin n' privilged commands
- מקשים שימושיים:
- "רווח": הדף הבא
- d או ctrl+d: חצי הדף הבא
- enter: השורה הבאה
- q: יציאה
- b או ctrl+b: דף אחורה
- pattern/: מחפש את הסטרינג pattern
- h או ?: הצג את העזרה של המדריך
[עריכה] vi
מסך המחשב הוא בעצם סרבר שנותן שירותי תצוגה.
- ל-vi יש שלושה מצבים:
- esc: מצב פקודה, מבצעים פקודות ולא רושמים טקסט, נכנסים אליו ע"י מקש Esc
- ed: ניהול קובץ הטקסט, עוברים אליו ממצב esc ע"י ":"
- insert מצב כתיבה, נכנסים אליו ע"י לחיצה על a
- פקודות שימושיות ב-esc:
- a: הכנס טקסט אחרי הסמן
- i: הכנס טקסט לפני הסמן
- A: הכנס טקסט בסוף השורה
- I: הכנס טקסט בתחילת השורה
- o: הכנס שורה חדשה אחרי הסמן
- O: הכנס שורה לפני השורה הנוכחית
- u: בטל פעולה אחרונה
- U: בטל בטל
- D: מחק את שארית השורה
- yy: העתק את השורה הנוכחית
- 6yy: העתק את השורה הנוכחית וחמש שורות קדימה
- p: הדבק את מה שהעתקת ל-buffer
- <<: אינדנטציה ימינה
- 5<<: אינדנטציה ימינה ל5 שורות
- תנועה במסך: f מסך אחד קדימה, b מסך אחד למעלה, j שורה 1 למטה, k שורה אחת למעלה
- פקודות ב- ed:
- w: שמירה
- חיפוש למטה: /:
- חיפוש למעלה: ?:
- הגדרת קיצור: ab short_string very long string:
- w file name: שמירה לקובץ חדש
[עריכה] שיעור II
[עריכה] File system
- סוגי קבצים
- כאשר עושים ls -l מקבלים תיאור של הקובץ, האות הראשונה משמאל מציגה את סוג הקובץ
- - קובץ רגיל
- d ספרייה
- b התקנים שיש עליהם קבצים (כוננים)
- c התקני אותיות (מקלדת, מסך)
- l לינק סימבולי
- p הפנייה, צינור
- pipe הוא צינור, "|" יצירת צינור בין תהליכים, דוג': ls | wc עושה ספירת מילים (wc) של הפלט של ls.
- ישנו סוג נוסף של Pipe הנקרא namepipe והוא pipe קבוע שמוגדר לו מיקום מסוים והוא מקשיב במיקום הזה.
- s: סוקט, מכניזם לתקשורת בין תהליכים, דומה ל-namepipe.
- כאשר עושים ls -l מקבלים תיאור של הקובץ, האות הראשונה משמאל מציגה את סוג הקובץ
מבנה הקבצים
- /
- bin
- dev
- etc
- usr
- bin
- dict
- games
- include
- lib
- pub
- tmp
- home
---להוסיף פה ת'תרשים
- mount: ניתן לשלב עצי קבצים בתוך עצי קבצים אחרים באמצעות פקודת mount, דוג' mount /dev/abc /usr , נתיב dev/abc מקושר ל-usr. ניתן לבטל ע"י umount
- df פקודה שמציגה את ה-mountים במערכת.
- df -i מציגה את השימוש ב- inode
- df -H מציגה את המידע במגה-בייטים
- df פקודה שמציגה את ה-mountים במערכת.
[עריכה] פקודות
[עריכה] פקודות קובץ
- ls מציגה רשימות קבצים
- ls -l מציגה רשימה מפורטת (long)
- ls /usr מציגה את רשימת הקבצים בספריה usr
- ls file.jpg מציגה את הנתונים על הקובץ file.jpg בלבד
- אופציות חשובות:
- a הצג את כל הקבצים
- d הצג נתונים על ספרייה ספציפית
- F הצג סוגי קבצים מסוימים
- i הצג מס' inode
- r הצג בסדר הפוך
- R הצג רקורסיבית, לדוג', גם את כל תת הספריות
- s הצג גודל קבצים
- t סדר עפ"י זמן שינוי
- du מציג רקורסיבית את הגודל ב KB של כל הספריות מתחת לספרייה הנוכחית
- אופציות
- s מציג סיכום של הספרייה הנוכחית בלבד
- a מציג גם גדלים של הקבצים הרגילים
- פקודות ספריות
- pwd הצג את ספריית העבודה
- mkdir צור ספרייה
- rmdir הסר ספרייה
- cd לך לספריית הבית
- cd ~ לך לספריית הבית
- cd ~/dirname לך לספרייה dirname מתחת לספריית הבית
- cd dirname לך לספרייה dirname שמתחת לספרייה הנוכחית
- cd .. עלה ספרייה אחת
- cd ~username לך לספרייה של משתמש username, לדוג': cd ~wrk403
- echo מדפיסה את מה שאחריה, לדוג' echo ~username
- אופציות
- עבודה עם קבצים
- cp העתק
- cp f1 f2 העתק קובץ f1 לקובץ f2 או העתק קובץ f1 לספרייה f2 אם קיימת ספרייה בשם כזה
- cp f1 f2 f3 d1 העתק את קבצים f1,f2,f3 לספרייה d1
- cp -r d1 d2 מעתיק ספרייה ותוכנה לספרייה אחרת (הדרך היחידה להעתיק ספרייה)
- mv f* d2 מעתיק את כל הקבצים שמתחילים בf ל-d2
- mv שינוי שם או מקום
- mv f1 f2 משנה את שם הקובץ f1 ל f2
- mv d1/f1 d2/f1 מעביר את הקובץ
- mv d1 d2 שינוי שם ספרייה
- mv f1 f2 f3 d1 מעביר את הקבצים f1,f2,f3 לספרייה d1
- mv f* d2 מעביר את כל הקבצים שמתחילים בf ל-d2
- rm מחיקת קבצים
- rm f1 f2 f3 מוחק את שלושת הקבצים
- rm -r d1 מוחק רקורסיבית את כל מה שמתחת לספרייה d1 (לפרט)
- rm * מוחק הכל בספריה הנוכחית (לבדוק)
- cp העתק
- ln
- hard links הם שמות לאותו קובץ שיוצרים קישור קבוע למידע ב-datablocks ובטבלת ה-inode
- ההרשאות לקריאה נמצאות ב-inode
- הקובץ נמחק כאשר מוחקים את הלינק האחרון
- לא ניתן לעשות HARDLINK לקובץ ב-FILE SYSTEM אחר
- רק root יכול ליצור hardlinks לספרייה מכיוון שזה יכול ליצור loop אינסופי
- ln f1 f2 צור הרדלינק f2 מ-f1
- הוא לא קובץ מסוג l
- symbolic link קישור קלאסי לקובץ אחר
- קובץ מסוג l
- ln -s f1 f2 צור סימבוליק לינק בשם f2 שייקשר ל-f1
- יכול ליצור קישור לספרייה
- hard links הם שמות לאותו קובץ שיוצרים קישור קבוע למידע ב-datablocks ובטבלת ה-inode
- chmod (ראה הרשאות)
- chgrp
- chown
- which מציגה את מיקום הפקודה, לדוג' which less תתן את מיקום הפקודה less
- touch נוגעת בקובץ, אם הקובץ לא קיים הוא נוצר ריק, אם הוא קיים אז הוא משנה את זמן הכניסה והגישה האחרונים לעכשיו.
- הרץ תוכנית: ./start מריץ תוכנית בשם start, נקודה סלאש ואז שם הקובץ
[עריכה] פקודות תוכן
- cat
- more מציג תוכן קובץ
- less מציג תוכן קובץ בצורה מתוחכמת עם יוכלת שיטוט
- pr
- tail מציג את סוף הקובץ
- tail -f מציג את הסוף של הקובץ בצורה חיה
- head מציג את ההתחלה של הקובץ
- compress: מכווצת את הקובץ ויוצרת אותו עם סיומת z ומוחקת את הישן compress file1
- uncompress: מבטלת כיווץ
- zcat: כמו cat לקבצים מכווצים
- wc: ספירת מילים
- wc -c סופר אותיות בלבד
- wc -w סופר מילים בלבד
- wc -l סופר שורות
[עריכה] הרשאות
- סוגי הרשאות:
- read
- לקובץ: מאפשר קריאה
- לספרייה: ניתן לחפש בספרייה ולבצע ls על הספרייה.
- write
- לקובץ: ניתן לכתוב לקובץ
- לספרייה: ניתן ליצור ולמחוק קבצים בספרייה
- execute
- לקובץ: ניתן להפעיל אותו
- לספרייה: ניתן לגשת לספריות ותת ספריות
- read
- שינוי הרשאות
- chmod a-r,u+x file
- כאשר:
- u - user
- g - group
- o - other
- a - all
- + הוסף הרשאה
- - הסר הרשאה
- = הרשאה מוחלטת
- r - read
- w - write
- e - execute
- קידוד הרשאות
- 4=r
- w=2
- x=1
- ואז לדוג' 5= r וx, ו 7= xוwוr
- וניתן להגדיר הרשאות כך: chmod 657 file (הספרות הן לפי הסדר: user,group,all)
- unmask: קובע הרשאות מחדל, לדוג' unmask 077 גורמת לכל הקבצים שאני היוזר יוצר להיווצר עם הרשאה מלאה שלי וללא הרשאה לאחרים
- שינוי סיסמה: passwd
[עריכה] שיעור III
[עריכה] csh
[עריכה] regular expressions
- לcshell אותיות מיוחדות שהוא מתרגם למשמעויות אחרות, לדוג' c.* מתייחס לכל הקבצים שמסתיימים ב-c. בשביל להתחמק מהפירוש של * לכל הקבצים, שמים גרשיים מסביב לביטוי, לדוג' "c.*"
- להלן התוים:
- הסימן * מתייחס לתו נעלם אחד או יותר (או אפס תוים), לדוג': k*u מתייחס גם ל-kukuriku וגם ל-kru
- הסימן ? מתייחס לתו נעלם אחד בלבד, לדוג': k?u מתייחס רק ל-kru
- הסימן [] מתייחס למס' תוים מוגדרים, לדוג' ls test.[cos] ישלוף test.c test.o ו-test.s, ניתן להשתמש בו פעמיים לשני תוים: ls test.[cos][cos] וגם בטווח a-z.
- הסימן {} מתייחס לסטרינג מסוים, לדוג': ls {test1,x,y}.c יציג את קבצים test1.c x.c ו-y.c.
- ניתן להשתמש ב-/ בשביל להכנס לספריות לדוג': lst/*.cp
- דוגמאות נוספות:
- כל הקבצים שמתחילים במספר [0-9]*
- כל הקבצים שמכילים לפחות אחת אות קטנה ואות גדולה {[a-z]*[A-Z],[A-Z]*[a-z]}
- כל הקבצים שבתת ספריות /*/
[עריכה] I/O Management
- הפניית input ו-output או redirection
- cat < file1 > file2 מעתיקה(ודורסת) את התוכן מ-file1 ל-file2
- cat < file1 >> file2 מוסיפה את התוכן של-file1 ל-file2
- cat < file1 >& file2 מעתיקה(ודורסת) את התוכן ואת הודעות השגיאה של-file1 ל-file2
- ctrl+d סוף קובץ
- למניעת דריסת קובץ בטעות משתמשים בפקודה : set noclobber ולביטול: unset noclobber
- ניתן לעקוף את noclobber ע"י: command >! file
[עריכה] pipe
- pipe מקשר בין standart output של פקודה אחת ל-standart input של פקודה אחרת, והוא גם בעצם redirection, לדוג': ls -t project | grep cc | sort
- הבדל בין rdirection ל-pipe:
- ls > lpr יותר קובץ lpr ושם בו את תוכן של ls
- ls | lpr מדפיס את תוצאת ls
- ב-pipe, תמיד מקשרים בין שתי פקודות, בהפנייה מעבירים את התוכן לקובץ
- ניתן להעביר גם את הstderr ל-pipe ע"י &: cat file1 |& wc
- ניתן להעביר את תוכן ה-pipe לקובץ: ls | sort | tee file1
[עריכה] jobs
- הרצת jobים ברקע: באמצעות הסימן & בסוף הפקודה, לדוג': & cat -n long | lpr
- ps: מציגה את רשימת ה-processes שרצים במערכת.
- jobs: מציגה את רשימת ה-processes שרצים ב-shell הנוכחי.
- jobs -l: מציג גם את ה-pid של כל job.
- ps -lf מציגה את הפרוססים שרצים עם pid והאבות שלהם
- kill: שולחת אותות ל-processים: kill [-signal] [pid] [%job],מס' סיגנלים (אותות):
- kill -9: הורג לא משנה מה.
- kill -15: מפסיק את הפרוסס בצורה פחות אלימה.
[עריכה] filter and process text
[עריכה] ביטויים רגולרים
- A^ שורה שמתחילה ב-A
- $A שורה שמסתיימת ב-A
- . תו כלשהו, פעם אחת
- "*" אפס או יותר פעמים האות שלפני הכוכבית, לדוגמה, a* אפס או יותר פעמים a
- "*." תו כלשהו, מס' פעמים
- \ מבטל את הביטוי המיוחד
- [abg] ש"ע ל-a b או c
- [abc^] כל מה שהוא לא a b או c
- {2,4}A שתיים עד ארבע חזרות של A, כלומר: AA או AAA או AAAA
- () מחבר מילים כך שאפשר יהיה להפעיל עליהן * או ? לדוג': *(abc) ש"ע ל- abc או abcabc או כלום.
- + פעם אחת או יותר של האות שבאה לפניו
- ? פעם אחת או אפס חזרות של האות שבאה לפניו
- | ש"ע ל-OR, מאפשר הגדרת "או" בין שני ביטויים רגולרים
[עריכה] תוכניות חשובות
- grep
- סוגי grep:
- grep: מקבל ביטוי רגולרי יחיד
- egrep או grep -E: יותר מתקדם, משתמש בהרבה זכרון
- fgrep: פשוט אך מהיר
- אופציות של grep:
- v- כל השורות שלא כוללות את המחרוזת
- c- סופר את השורות המתאימות
- n- מציג את השורות עם מספרן
- l- הצג רק את שמות הקבצים שכוללים מחרוזות מתאימות
- i- התעלם מכתב גדול/קטן
- סוגי grep:
- cut: חותכת עמודות, cut -dC file1 האות C היא המפריד
- tr: מחליפה אותיות מסוימות
- sort: מסדרת את תוכן הקובץ בסדר לקסוגרפי, לדוג': sort file, בכדי לסדר נומרית מוסיפים n-
- סידור לפי שדות (עמודות בטבלאות): sort +3 -4 +0 -1 מסדר קודם לפי השדה הרביעי (+3 -4) ואח"כ השדה הראשון (+0 -1)
- uniq: מציגה רק שורות ייחודיות
- find:
- find / -atime +30 -print חפש את כל הקבצים שלא ניגשו אליהם ב-30 הימים האחרונים
- find . -name "*.O" -exec rm "{}" \; מחק את כל הקבצים שמסתיימים ב-"o."
- find /u \( -type f -o -user caro \) -ls מצא קבצים ב-u/ שהם קבצים רגילים או קבצים של caro גם אם הם לא קבצים רגילים והפעל עליהם ls.
- tar: יוצר ארכיונים, ביחד עם compress או gzip או מחקה פונקציונליות של winzip.
- alias - קיצורים
- alias h history
- \ מתעלם מ-alias לדוג': h/
- הקיצורים נשמרים ב- cshrc.
- הבאת קיצורים מהיוזר האישי ליוזר הנוכחי: source ~user/.cshrc או "." במקום "source ב-shellים מסוימים.
- אם רוצים לכלול בקיצור תוים מיוחדים יש להשתמש ב=""
- unalias h מבטל קיצור
- history - היסטוריה
- set hitory=100 מגדיר לזכור 100 פעולות אחרונות
- מפעילים באמצעות !, לדוג':
- הפעולה החמישית האחרונה: 5!
- הפעולה האחרונה שמתחילה ב-u תשוחזר כך: u!
- top: מציג את הפרוססים שרצים במערכת ותופסים הכי הרבה משאבי מעבד, ניתן ללחוץ על k בזמן הריצה ולהפיל פרוססים (kill).
- ps:
- ps מציג פרוססים בSHELL הנוכחי
- ps g מציג פרוססים של היוזר
- ps a מציג ת כל הפרוססים
[עריכה] רשת
- samba: מאפשרת לשרתי unix להתחזות לשרתי win
- roomba: מאפשרת לשרתי win להתחזות לשרתי unixד
אימייל של המדריך
