היסטוריית גירסאות | ||
---|---|---|
גירסה 0.2 | 21/11/2005 | xx |
גירסא רשמית שניה - המדריך הועבר לוויקי | ||
הורחב הפרק על רשתות | ||
הסבר קצר על הפקודה bc | ||
גירסה 0.1 | 08/06/2005 | xx |
גירסא רישמית ראשונה |
הכותב אינו נושא באחריות עבור שימוש ברעיונות, דוגמאות ומידע שבמדריך. השימוש הוא באחריות הקורא בלבד.
המדריך עשוי להכיל טעויות ופרטים לא נכונים, שהשימוש בהם עשוי להיות מזיק למחשבך.
למרות הסבירות הנמוכה, הכותב אינו לוקח כל אחריות.
לינוקס מתקדמת במהירות, נקודה. דברים שלא יכולתי לעשות בעזרת הממשק הגרפי לפני שנה, היום נראים טריוויאליים.
לדעתי, משתמש ביתי יכול היום לתפעל את מכונת הדסקטופ שלו מבלי להתעסק כמעט עם שורת הפקודה.
כך זה לפחות בגרסאת המנדריבה שעליה אני עובד (גרסא 2005LE עם מספר שדרוגים קטנים; גרסא 2006 יצאה לפני שבועות נכון לכתיבת שורות אלו).
לדעתי אחד היתרונות הגלומים בלינוקס הוא ממשק שורת הפקודה המפותח שלה. ויתור על שימוש בו מהווה, ויתור על אחד היתרונות הגדולים ביותר שיש למערכת הזאת להציע למשתמש האינטליגנטי והסקרן.
חישבו על פעולות תחזוקה, כגון:
file1 file10 file11 file2 file3 . . file9
אבל אני רוצה לסדר אותם בסדר עולה, כך:
file01 file02 file03 . . file09 file10 file11
פעולות אלה עלולות לגזול זמן רב בממשק גרפי, אך בשורת פקודה הן יכולות להתבצע בשורה אחת.
אני משתמש בלינוקס כדסקטופ היחיד אצלי בבית ומשלם על כך מחיר מסויים. למשל, אני לא יכול לגלוש לאתרים של בנקים למשל. לינוקס לא מושלמת – בכלל לא.
אבל, אחת הסיבות שאני נשאר איתה היא הכוח שניתן לי עם השימוש בשורת הפקודה.
למי שעושה את צעדיו הראשונים עם שורת הפקודה בלינוקס ורוצה ללמוד איך לבצע פעולות יום יומיות.
סטודנטים שצריכים לתכנת בסביבת לינוקס וניתקלים בה בפעם ראשונה - יתכן כי תמצאו בין הרעיונות מספר דברים נחמדים ושימושיים.
ניסיתי לכתוב את המדריך כך שהוא יכוון את הקורא לדברים השימושיים ביותר, אולם יש בו הפניות למקומות רבים וטובים ברשת ורובם אפילו בעברית.
כך שאם אתם רוצים להתעמק, אני מקווה שהמדריך הזה הוא נקודת פתיחה טובה שתהווה שער לשימוש מושכל בשורת הפקודה.
בניגוד למדריכים אחרים שסביר שקראתם בעבר, אני לא ממליץ לקרוא את המדריך הזה ברצף.
ללא כל מה שכתוב בו רלוונטי אליכם. המדריך מתחיל בנושאים קלים יותר ומסיים בנושאים כבדים יותר אבל הקצב לאו דווקא אחיד.
במקומות רבים אני מפנה למדריכים אחרים ברשת, אין לי כל רצון להמציא את הגלגל מחדש – ניסיתי לוודא שרובם יהיו בעברית.
רובו של המדריך אופורטיבי כלומר ברמה של אני רוצה לעשות * ופתרון. לכן, אם אתם קוראים את המדריך בעזרת firefox, אני מזכיר לכם כי קיימת דרך קצרה ונוחה לחפש טקסט:
הקישו על התו '/' ואחר כך על מחרוזת שאתם מחפשים. המופע הראשון של הטקסט יודגש. כדי לעבור למופע הבא, הקישו F3. אם הגעתם בצורה זו לקישור שאתם רוצים לפתוח בtab חדש הקישו ctrl+enter.
במקומות שראיתי לנכון הרחבתי מעט בנושאים תאורטיים, במיוחד אם לא מצאתי מדריך שמסביר זאת בצורה טובה בעברית.
את המדריך הזה כתבתי מכל מיני טיפים ודברים שלמדתי במשך השימוש שלי בלינוקס, במהלך הזמן תיעדתי את הפתרונות שמצאתי לבעיות שנתקלתי בהן ולא ידעתי לפתור מיד.
שכחתי משהו? סביר להניח….
נתקלתם בפקודה/סקריפט שימושיים במיוחד שאתם מעוניינים “להשוויץ” בהם?
מצאתם שגיאה או הסבר לא ברור במדריך?
אנא שילחו אליי: sagivba _*at*_nanamail.co.il
כמה הנחות יסוד לגבי הקורא הממוצע:
אתם מכירים באופן בסיסי מאוד, או יותר מכך, את שורת הפקודה בלינוקס. רמה זו מספיקה בכדי להפיק תועלת ממדריך זה.
סקרנות בסיסית היא תכונה חשובה שתעזור לכם להפיק מהמדריך הזה תועלת רבה יותר.
נתקלתם בפקודה שאתם לא מכירים ומצאתם אותה שימושית - חיקרו אותה. בסוף המדריך קיים נספח שמרחיב בנושא.
ברצוני להודות ל:
אילי פישמן ושלומי פיש על ההגהה של מדריך זה.
כתריאל על העידוד לכתוב את המדריך.
מטרת סעיף זה היא להציג לכם במהירות שימושים כלליים בפקודות שסביר שאת חלקן אתם כבר מכירים.
אנסה לתת כאן הצגה מהירה של הדגלים השימושיים ביותר עבור פקודות אלו. יתכן מאוד שסעיף זה מיותר עבורכם.
אם כך, אל תהססו ודלגו לסעיפים הבאים – ככל שנתקדם נעבור לנושאים יותר מתקדמים.
אני רוצה לדעת איזה קבצים יש לי בתיקייה (= directory) הנוכחית
[sagivba@sagivba tmp]$ ls dir1a/ dir2a/ dir2b/ dir2c/ dir2d/ file1 file2אני רוצה לדעת יותר פרטים על הקבצים
[sagivba@sagivba tmp]$ ls -l dir1a/ total 16 drwxr-xr-x 3 sagivba sagivba 4096 ינו 4 21:16 dir2a/ drwxr-xr-x 3 sagivba sagivba 4096 ינו 4 21:18 dir2b/ drwxr-xr-x 2 sagivba sagivba 4096 ינו 4 21:16 dir2c/ drwxr-xr-x 2 sagivba sagivba 4096 ינו 4 21:17 dir2d/ -rw-r--r-- 1 sagivba sagivba 0 ינו 4 21:19 file1 -rw-r--r-- 1 sagivba sagivba 0 ינו 4 21:19 file2
כדי לקבל מידע רב יותר על מערכת ההרשאות של לינוקס, ראו את המדריך של אביב רוזנטל:
http://www.penguin.org.il/guides/premissions/
אבל אני רוצה לראות גם קבצים חבויים
[sagivba@sagivba tmp]$ ls -a dir1a/ ./ ../ dir2a/ dir2b/ dir2c/ dir2d/ file1 file2 .hid_file1אני רוצה לראות את תוכן התיקיות שבתוך התיקייה הנוכחית:
[sagivba@sagivba tmp]$ ls -R dir1a/ dir1a/: dir2a/ dir2b/ dir2c/ dir2d/ file1 file2 dir1a/dir2a: dir3a/ dir1a/dir2a/dir3a: dir1a/dir2b: dir3b/ file1 file2 dir1a/dir2b/dir3b: file1 dir1a/dir2c: dir1a/dir2d: file1 file2 file3אבל אני רוצה לראות את זה בצורה של עץ… (פקודה זו אינה מופיעה בד”כ ויתכן כי תצטרכו להתקין אותה בנפרד – אבל היא עושה חיים כל כך קלים, ולכן כללתי אותה)
[sagivba@sagivba tmp]$ tree -a dir1a/ dir1a/ |-- .hid_file1 |-- dir2a | `-- dir3a |-- dir2b | |-- dir3b | | `-- file1 | |-- file1 | `-- file2 |-- dir2c |-- dir2d | |-- file1 | |-- file2 | `-- file3 |-- file1 `-- file2
אני רוצה לדעת מה גודל התיקייה הנוכחית:
[sagivba@sagivba tmp]$ du ~/tmp 8.0K /home/sagivba/tmp/orbit-sagivba 20K /home/sagivba/tmp/svc0o.tmp 4.0K /home/sagivba/tmp/dir1a/dir2a/dir3a 8.0K /home/sagivba/tmp/dir1a/dir2a 4.0K /home/sagivba/tmp/dir1a/dir2b/dir3b 8.0K /home/sagivba/tmp/dir1a/dir2b 4.0K /home/sagivba/tmp/dir1a/dir2c 4.0K /home/sagivba/tmp/dir1a/dir2d 28K /home/sagivba/tmp/dir1a 80K /home/sagivba/tmpלא! התכוונתי רק של התיקייה הנוכחית, אבל עד עץ בעומק 1:
[sagivba@sagivba tmp]$ du --max-depth=1 ~/tmp 8.0K /home/sagivba/tmp/orbit-sagivba 20K /home/sagivba/tmp/svc0o.tmp 28K /home/sagivba/tmp/dir1a 80K /home/sagivba/tmp
אני רוצה לעבור לתיקיית הבית שלי:
cd ~אני רוצה לעבור למדריך הבית של moshe:
cd ~mossheאני רוצה לחזור לתיקייה האחרונה שבה הייתי:
cd -
אני רוצה להעתיק את dir1 על כל תוכנו לתוך dir2:
cp -r dir1 dir2
אני רוצה לשנות את השם של הקובץ file1 להיות file7:
[sagivba@sagivba dir1a]$ ls file* file1 [sagivba@sagivba dir1a]$ mv file1 file7 [sagivba@sagivba dir1a]$ ls file* file7
יש לי את הקבצים:
file1 file2 file3 . . file9 file10 file11אבל אני רוצה לסדר אותם:
file01 file02 file03 . . file09 file10 file11
rename file file0 file?הערה - לפקודה rename יש יותר מגרסא אחת = ולכן יתכן שהדוגמא האחרונה לא תעבוד אצלכם - אפשר להשתמש גם בלולאת for - אני בטוח שתסתדרו, נכון ?
נו, טוב כאן יש שלושה דגלים שאני חושב שכל אחד מכיר:
אני רוצה למחוק את כל הקבצים שמסתיימים בtxt מבלי שאדרש לאשר בכל פעם.
[sagivba@sagivba dir1a]$ rm -f *.txtאני רוצה למחוק את כל הקבצים שמתחילים בfile ואחריו סיפרה, אבל לאשר לפני כל מחיקה.
[sagivba@sagivba dir1a]$ rm -i file[0-9]אני רוצה למחוק את dir1 עם כל מה שבפנים.
[sagivba@sagivba dir1a]$ rm -rf dir1אזהרה וטיפ קטן בצידה, rm יכולה לגרום לתוצאות הרסניות – מרגע שמחקתם קובץ לא ניתן לשחזרו.
אני רוצה ליצור את תיקייה בתוך תיקייה - פשוט קיראו את הקוד ותבינו:
[sagivba@sagivba tmp]$ mkdir -p dir_root/dir_branch/dir_leave/ [sagivba@sagivba tmp]$ tree dir_root/ dir_root/ `-- dir_branch `-- dir_leave
אני רוצה לכווץ את dir1a ואת כל מה שבפנים:
[sagivba@sagivba tmp]$ zip -r my_dir.zip dir1a/הדגל r גורם לכיווץ רקורסיבי.
אני רוצה לעקוב אחרי קובץ תוך כדי שהוא נכתב.
בדרך כלל משתמשים בפקודה הזו בכדי לעקוב אחר קובץ log בזמן שמערכת כותבת אותו.
תכף נראה דוגמא… חכו רגע.
[sagivba@sagivba dir1a]$ tail -f file1על מנת להבין מה אמרתי כאן, נסו:
[sagivba@sagivba dir1a]$ for I in 1 2 3 4 5 6 7 8 9 10 ;\ >do echo $I >> file1 ; sleep 1;\ > done & [1] 12699 [sagivba@sagivba dir1a]$ tail -f file1הסבר למי שלא הבין: השורה הראשונה מריצה לולאה ברקע, שכותבת במחזוריות (אחת לשניה) משתנה לתוך הקובץ file1. לאחר הכתיבה, הלולאה נעצרת לשנייה אחת וממשיכה בכתיבה. כל התהליך הזה מתקיים ברקע בגלל התו '&'.
נתקלתי בקובץ: anonymous_file_neme ואני לא יודע מאיזה סוג הוא:
file anonymous_file_nemeבלינוקס סוג הקובץ מוגדר לפי ר הנשמר בתחילת הקובץ (magic number ) ולא לפי הסיומת שלו , לא כמו בחלונות.
אני רוצה לקרוא קובץ טקסט מבלי לערוך אותו:
less filenameמילים אחדות על less יהיו במקום. הפקודה man נעזרת ב-less כדי להציג את דפי התיעוד של לינוקס, ולכן שווה להקדיש קצת זמן כדי להכיר את הפקודה הזאת.
לעיתים כשרק רוצים לעיין בסקריפטים, אני מוצא שvim עם הדגל R נוחה יותר
אני רוצה לערוך קובץ טקסט באנגלית.
קצרה היריעה מלתאר את נפלאות העורך המעולה הזה. הוא יודע בין השאר להשלים מילים , לצבוע טקסט של קוד בכל שפות התכנות שאני יכול להעלות על דעתי, להשלים מילים להריץ פקודות מעטפת (למשל לקמפל תוך כדי כתיבת הקוד) ועוד המון.
יש לvim גרסא בשם(gvim) עם ממשק גרפי (GUI) מאוד נוח, שאני מעדיף להשתמש בה. כדי לקבל הצגה בסיסית של העורך קיראו את המדריך לvi של אבירם נוטירקה:
http://www.penguin.org.il/guides/vi-intro/
להכרה מעמיקה יותר יתכן שתהיו מעוניינים לקרוא את המדריך לעבודה בvi-Improved/עידו קנר :
http://www.penguin.org.il/guides/vim-intro/
וכמובן שיש את האתר של vim שמכיל כמות בלתי נדלית של טיפים וה-help המובנה בתוך התוכנה עצמה.
בחלק זה אסקור מספר כלים שעוזרים בחיפוש, הכלי grep עוזר לנו בחיפוש בתוך מסמכי טקסט או בסינון של פלט טקסט ארוך של פקודות. הפקודה find עוזרת לחפש בעיקר על פי מאפיינים של הקובץ כמו שם הקובץ, התאריך האחרון ששונה, גודלו וכו'. הפקודה slocate או locate עוזרת למצוא קבצים על פי שמם ונעזרת לשם כך במאגר מידע שהיא מכינה מראש ולכן גם יותר מהירה מfind בד”כ. והפקודה which עוזרת לנו למצוא את המיקום של כלי שורת פקודה אחרים.
אחת הפקודות השימושיות ביותר משורת הפקודה. הנה כמה דוגמאות בסיסיות לשימוש בה. איזה שורות מכילות את המילה : zeldabelda בקובץ my_file?
grep 'zeldabelda' my_fileאופס ! התכוונתי לכל השורות שלא מכילות zeldabelda
grep -v 'zeldabelda' my_fileאני רוצה לדעת בתיקייה הנוכחית אילו מבין קבצי ב-c במדריך הנוכחי מכילים את מחרוזת string.h :
grep -l 'string.h' ./*.cאם אינכם יודעים מה משמעות הכוכבית, אולי כדאי שתקראו קצת על wildcards. משמעות הדגל l היא להדפיס את שמות הקבצים עם ההתאמה.
grep -r 'string.h' ./ | grep '.c'
טוב – אז אתם יודעים איך עובדים עם wildcards. אז הנה דוגמא לחיפוש … הפקודה הבאה מחפשת שורות שמתחילות בkookoo
$ grep -w '\הפקודה הבאה מחפשת שורות שמסתיימות בrikoo
$ grep -w 'rikoo\>' *תעזבו אותי מwildcards – זה לילדים… גברים אמיתיים מתעסקים עם ביטויים רגולריים, אני רוצה שורות שמכילות מספרי טלפון
grep -P "0(\d|5\d)-\d{7}" std.vcfלא מבינים ביטויים רגולריים? לשלומי לובטון יש יופי של מדריך בנושא.
http://www.guides.co.il/download.php?guide=161
רוצים לדעת עוד? נסו את דפי התיעוד של perl.
רק כמה דוגמאות נפוצות להכוונת פלט עם grep, לגרות לכם את הדמיון מכאן תמשיכו הלאה לבד…
אני רוצה לקרוא רק את השורות שמכילות ההערות בלבד בסקריפט הbash המדהים cool.sh
grep -P '^\s*#' ./cool.sh|lessתן לי רמז אם מותקנות אצלי חבילות המטפלות בקבצי midi
rpm -qa |grep 'midi'אני רוצה לדעת באיזה קובץ ובאיזו שורה השתמשתי בפונקציה fork:
grep -n 'fork()' `ls *.c`
מצא לי את הקובץ ECLIPSE.ogg בתיקייה pink_floyd ובתתי התיקיות שלה.
find pink_floyd -name ECLIPSE.oggרגע, אני לא בטוח אם כתבתי אותו עם אתיות גדולות או קטנות:
find pink_floyd -iname ECLIPSE.oggאבל אני גם לא בטוח באיזה פורמט שמרתי אותו (כקובץ ogg או mp3 או בשד יודע איך):
find pink_floyd -iname ECLIPSE.*(רוצה לומר, find אוכלת wildcards).
find . -regex '.*\(pink\|floyd\|moon\).*'מצא לי בתיקיית הבית קבצים הגדולים מ 1000KB
find ~/ -size +1000kאותו הדבר אבל עבור קבצים הקטנים מ 100KB
find ~/ -size -100k
הנה משהו שימושי למשתמשי vim שרוצים לעשות ניקיון למשל, אני רוצה למחוק בתיקייה הנוכחית באופן רקורסיבי את כל הקבצים שמסתיימים ב ”~”
[sagivba@black find_example]$ tree . |-- a.txt |-- a.txt~ `-- dir1 |-- b.txt `-- b.txt~ 1 directory, 4 files [sagivba@black find_example]$ rm -f `find -name '*~'` [sagivba@black find_example]$ tree . |-- a.txt `-- dir1 `-- b.txt 1 directory, 2 files [sagivba@black find_example]$העירו את תשומת ליבי כי בפקודה זאת עלולה להיות בעייה אם שמות הקבצים מכילים תווי רווח. עדיף להשתמש ב
-find -name '*~' -print0 | xargs -0 rm -f
יש עוד המון אופציות שימושיות, אני אעצור כרגע כאן.
במערכות רבות קיימת הפקודה locate, או הגרסה המאובטחת שלה slocate. הרעיון בכלי הנהדר הזה הוא לאפשר חיפוש מאוד מהיר של קבצים על פי שמם. הסיבה שהכלי הזה מהיר מחיפושים אחרים הוא שהוא מבצע עיבוד מקדים ומאנדקס את הקבצים. בד”כ אחת ליום בעזרת cron.
מצא לי את הקובץ hosts
locate hosts
היכן ממוקם האינטרפטר perl ?
which perlלא, אני מחזיק כמה גרסאות של perl . אני רוצה לדעת לגבי כולן:
which -a perl
אני רוצה להחליף בקובץ הטקסט dark_side.txt את כל המופעים של המילה pink במילה floyd:
perl -pi -e "s/pink/floyd/g;" dark_side.txtהאם כבר ציינתי שPerl מאוד שימושית? בוא נבין מה כתוב כאן, המטרה שלי היא לא ללמד אתכם Perl, אלא רק לתת לכם מושג כללי לגבי העוצמה הטמונה בשפה זו' אפילו ככלי לשורת פקודה ולא כשפת תכנות או סקריפטינג…
while (<>) { s/pink/floyd/g; } continue { print; }האופציה i גורמת לכך שהפלט יכתב לתוך הקובץ dark_side.txt
קורא חביב בשם רומן ביקש שאוסיף פרק על awk - אז הנה זה בא (למרות שאני נוטה להשתשמש יותר בperl) היתרון של awk על perl הוא בעיקר בסקריפטינג אני חושב, מאחר והיא קלה יותר מבחינת ביצועים. כאמור אני עצלן ולא נוטה להשתמש בה לכן יתכן ואני טועה.
אז בואו נתחיל קצת להבין את התחביר של הפקודה ובעיקר שימושים נפוצים בה.
לצורך הדוגמאות נשתמש בקובץ הבא:
$ cat -n tst_awk.txt 1 gold 2 3 golden dolphin 4 golden:dolphin:blue:sea 5 iron:dolphin:blue:sea
ראשית הסבר קצה על מבנה הפקודה:
awk 'awk commnds' input_file
למשל אם אנחנו רוצים להדפיס את כל השורות בקובץ שמכילות את מחרוזת gold:
$ awk '/gold/ { print $0}' tst_awk.txt gold golden dolphin golden:dolphin:blue:seaשימו לב לשני דברים מעניינים, האחד awk יודעת לטפל בביטויים רגולריים. והשני $0 משמעותו כל השורה הנוכחית.
הפקודה awk מאד שימושית לטיפול בשורות המכילות שדות המופרדים על ידי דפוס מסויים למשל שורות 4 ו- 5 המופרדות על ידי ”:” למשל הפקודה הבאה :
X="A:B:C:D:E" ; echo $X | awk -F":" '{print $2 $4 $5}' BDEנראה מסובך ? האמת שזה די פשוט ותכף תראו את זה , תהיו איתי. בחלק הראשון הכנסנו למשתנה X את המחרוזת המופרדת ב”:” , בחלק השני השתמשנו ב echo בכדי לשפוך את תוכן השדה המופרד לתוך awk ואז הגענו לחלק המעניין הדגל F- משמעותו שעכישיו אנו הולכים להצהיר על מפריד (במקרה שלנו “:”) ברגע שמשתמשים בו awk מכניסה את הערך של כל שדה בשורה למשתנה $1 $2 … ואנו ביקשנו להדפיס את הערכים של המשתנים השני הרביעי והחמישי.
באו נראה עוד דוגמא הפעם מהקובץ שלנו:
$ awk -F":" '/gold/ { print $2}' tst_awk.txt dolphin
הפעם הדפסנו בכל שורה בקובץ שיש בה את המחרוזת gold את המשתנה השני ולכן קיבלנו שורות ריקות פרט לאחרונה. בואו נשפר את זה כך שקודם נבדוק אם בשורה הנוכחית יש את הסימן ”:” ורק אח”כ נדפיס:
$ awk -F":" '/gold/ {if (/:/) print $2}' tst_awk.txt dolphin
טוב – זאת התחלה נחמדה לנושא וזה גם שימושי במיוחד לטפל בקבצים כמו etc/passswd או במשתנים סביבתיים כמו PATH$. ולסיום דוגמא שמחזירה כפלט רק את השורות שבהם מופיעה המחרוזת gold ומחליפה בהן את gold בbronze:
$ awk 'sub(/gold/,"bronze") { print $0}' tst_awk.txt bronze bronzeen dolphin bronzeen:dolphin:blue:seaלצערי לא התחלתי אפילו למצות את השימושים שבפקודה הזו, אבל נראה לי שזה מספיק בתור התחלה.
אני מרגיש שהסבר קצר נדרש לפני שנתחיל בדוגמאות, הנושא הזה גם נראה לי מעניין, אבל תרגישו חופשי לדלג עליו.
כאשר אנו מריצים פקודה או מפעילים תוכנית, מערכת ההפעלה מעלה אותה לזיכרון לתוך טבלה שנקראת טבלת התהליכים. בטבלה זו נשמרים נתונים שונים על התהליך, וביניהם מספר תהליך יחודי (PID).
לתהליכים יש יכולת לשכפל את עצמם או לתת את המקום שלהם לטובת תהליכים אחרים. מרגע שתהליך שכפל את עצמו לשכפול אנו קוראים “תהליך בן”.
תהליך אחד מיוחד שאתם רוצים להכיר הוא התהליך init כל התהליכים שאתם יוצרים הם בנים של init. כך ניתן לדמיין עץ תהליכים שבשורשו יש את init וממנו מסתעפים שאר התהליכים.
כדי לקבל מושג על מה שכתבתי לעיל העתיקו את הסקריפט הזה:
#!/bin/bash #this script print on screen it PID and current index for I in $(seq 1 3) do # $$ is an envaromental variable consists # the PID of this script echo “$$ says hey, got to $I” sleep 1 doneלתוך קובץ, שימרו אותו בשם test.sh בתיקיית הבית שלכם, תנו לו הרשאות ריצה. ואז, בטרמינל:
[sagivba@sagivba sagivba]$ cd ~ [sagivba@sagivba sagivba]$ ./test.sh >> out.txt & [1] 13810 [sagivba@sagivba sagivba]$ ./test.sh >> out.txt & [2] 13813 [sagivba@sagivba sagivba]$ ps >>out.txtמה היה לנו כאן? שורה ראשונה “~ cd” עברנו לתיקיית הבית. בשלוש השורות הבאות הרצנו את הסקריפט ברקע (בעזרת הסימן &) ואת הפלט שירשרנו לקובץ out.txt (זו המשמעות של הסימן « . ובשורה האחרונה הצגנו את התהליכים. וככה נראת דוגמה לקובץ הפלט out.txt
[sagivba@sagivba sagivba]$ cat out.txt “13797 says hey, got to 1” “13800 says hey, got to 1” “13797 says hey, got to 2” “13800 says hey, got to 2” “13797 says hey, got to 3” “13800 says hey, got to 3” PID TTY TIME CMD 15648 pts/3 00:00:00 bash 13800 pts/3 00:00:00 test.sh 13806 pts/3 00:00:00 sleep 13807 pts/3 00:00:00 ps “13810 says hey, got to 1” “13813 says hey, got to 1” “13810 says hey, got to 2” “13813 says hey, got to 2” “13810 says hey, got to 3” PID TTY TIME CMD 15648 pts/3 00:00:00 bash 13810 pts/3 00:00:00 test.sh 13813 pts/3 00:00:00 test.sh 13817 pts/3 00:00:00 sleep 13818 pts/3 00:00:00 sleep 13819 pts/3 00:00:00 ps “13813 says hey, got to 3” [1]- Done ./test.sh >>out.txt [2]+ Done ./test.sh >>out.txt
אני רוצה לעקוב אחר התהליכים שרצים לי במערכת באופן דינאמי:
topאני רוצה לעקוב רק אחרי התהליכים שמספריהם (הPID שלהם) : 31002 31003 31004
top -p31002 -p31003 -p31004אני רוצה להרוג תהליך שאני רואה בtop: כשאתם בtop הקישו k ואחריו את מספר התהליך ו - מאוד שימושי כשרוצים להרוג מספר תהליכים בעלי מכנה משותף.
אבל רגע! איך אני יכול לדעת מה מספר התהליך (PID של כל תהליך)?
pstree -pאו לחלופין
psואם אתם באמת רוצים לקבל מידע רב יותר :
ps -auxwטיפ קטן: שימוש מושכל בgrep יכול לעזור לכם כאן מאוד.
תהליך מסויים נתקע /אני רוצה להרוג תהליך:
אפשר, יש אם אתם יודעים את מספר התהליך :
killואם אתם רוצים לשלוח סיגנל ספציפי, פשוט תנו את המספר שלו אחרי מינוס.
kill -9 killallהנה מגיע עוד קטע תיאורטי ( כבר אמרתי שאתם יכולים לדלג אם זה משעמם אתכם?)
טוב אחרי החלק הקודם שהיה די כבד בואונתחיל עם משהו קליל ומאד שימושי
הפקודה wget היא מנהל הורדות רב עוצמה, כפי שמייד אדגים. יש לפקודה זו דגלים רבים, אני אנסה להציג את השימושיים שבהם.
אישית אני מעדיף להשתמש בwget משורת הפקודה כמעט לכל הורדה של קבצים גדולים.
טוב לאחר כל עסקי השיווק – הצגת תכלית קצרה של wget:
אני רוצה להוריד את דף הבית של הפינגווין אלי למחשב .
[sagivba@sagivba tmp]$ wget -q http://penguin.org.il/הדגל q מסמן לwget שלא להפיק מידע על ההורדה.
[sagivba@sagivba tmp]$ wget -i links.txtההורדה נתקעה ולא הסתיימה אני רוצה לנסות להוריד מהנקודה האחרונה.
[sagivba@sagivba tmp]$ wget -c http://penguin.org.il/אני רוצה להוריד את כל הקבצים בסידרה:
img1.gif img2.gif...img999.gif wget \ `for i in $(seq 1 999) ;\ do\ echo "http://server/path/to/img$i.gif”;\ done`כמובן שאם אתם מתעתדים להשתמש בפקודה הזו יותר מפעם אחת עדיך לכם לשמור אותה כפונקציה בbashrc. שלכם.
wget -mirror http://www.the.site.U.want.org
בחלק הבא אני מניח כי יש לכם ידע בסיסי ביותר ברשתות. // אנסה להציג את הדברים שאני מוצא כשימושיים ביותר.
לינוקס מכילה שרותים רבים (בכדי לדעת יותר עליהם אתם יכולים לקרוא במדריך של דורון אופק על תהליך האיתחול ושרותי המערכת
http://www.penguin.org.il/guides/init/ ) בכדי לאתחל את שרות הרשת עליכם להקליד כמשתמש העל:
service networking restart
או ברוב המערכות
/etc/init.d/network restart
פקודה זו עוזרת לנו לבדוק האם יש מענה ממחשב כלשהו המחובר לרשת.
מה שהיא עושה בגדול זה שולחת ECHO_REQUEST וממתינה לתגובה. למשל:
[sagivba@black test]$ ping -b 192.168.2.109 PING 192.168.2.109 (192.168.2.109) 56(84) bytes of data. 64 bytes from 192.168.2.109: icmp_seq=1 ttl=64 time=0.057 ms 64 bytes from 192.168.2.109: icmp_seq=2 ttl=64 time=0.052 ms 64 bytes from 192.168.2.109: icmp_seq=3 ttl=64 time=0.053 ms . . . # HERE I PRESSEDימשיך לשלוח בקשות כל זמן שלא הפסקנו אותו.+c ... --- 192.168.2.109 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2051ms rtt min/avg/max/mdev = 0.052/0.054/0.057/0.002 ms
ping -c 3 192.168.2.1ישלח שלוש פעמים פקטות ל192.168.2.1.
ping -W 3 192.168.2.1ימתין לכל היותר שלוש שניות ואז ייצא.
פקודה זו עוזרת לנו לסרוק כתובת או טווח של כתובות ולגלות דברים “מעניינים” שאולי מהווים חורי אבטחה ברשת שלנו או לחלופין מעידים על בעיות בהגדרתה. למשל אם אני מעוניין לדעת האם השרת שלי שכתובתו 192.168.2.100 מאזין לפורט 22:
# nmap -P0 sagivba |grep 22 22/tcp open sshעוד שימוש שאני מוצא מעניין בפקודה הזו הוא לסרוק את כל הרשת הפנימית שלי:
nmap -O 192.168.2.0-200
פקודה זו מאפשרת לנו לקבל מידע על ממשקי הרשת ולהגדיר אותם באופן זמני (למשל עד הreboot הבא). כאשר מקישים את הפקודה הזו ללא ארגומנטים נקבל מידע על ממשקי הרשת הפעילים. לעיתים נרצה לשנות הגדרה של ip או דברים אחרים. הדרך הפשוטה ביותר לכך היא:
ifconfig eth0 192.168.2.101 netmask 255.255.255.0 broadcast 192.168.2.255
עכשיו הגדרנו את eth0 שיקבל את הIP הזה: 192.168.2.101, ה netmask מוגדר להיות 255.255.255.0 וכו'.
$cat /etc/resolv.conf nameserver 192.168.2.1
קובץ כללי של הגדרות הרשת של המחשב התיעוד מספיק טוב בכדי שתוכלו להבין בעצמכם. יש להבחין בין הגדרה עבור IP סטאטי ועבור דינאמי:
$cat /etc/sysconfig/network # this is what you need using DHCP NETWORKING=yes
$cat /etc/sysconfig/network # this file is for static IP network configuration NETWORKING=yes HOSTNAME=sagivba.ath.cx # Hostname is defined here and by command hostname FORWARD_IPV4=false # True for NAT firewall gateways and linux routers. # False for everyone else(desktops and servers) GATEWAY="192.168.2.1" # Used if your network is connected to another # network or the internet. # Static IP configuration. # Gateway not defined here for DHCP client.הקובץ ifcfg-eth0 מגדיר את הממשק של eth0 אם קיימים במחשב מספר כרטיסי רשת – סביר להניח כי יופיעו גם הקבצים ifcfg-eth1 וכו' הנה דוגמאות שהגדרת DHCP ולהגדרת IP סטאטי:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=dhcp NETMASK=255.255.255.0 ONBOOT=yes METRIC=10
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static BROADCAST=192.168.2.255 IPADDR=192.168.2.100 NETMASK=255.255.255.0 ONBOOT=yes
הקובץ הזה מגדיר שמות מחשבים ברשת לדוגמא:
$ cat /etc/hosts 127.0.0.1 localhost 192.168.2.2 sagivba.ath.cx sagivba 192.168.2.1 edmax
יש מספר יישומי מולטימדיה נוחים לשימוש בלינוקס. אבל אני לא אוהב לשמוע מוזיקה מהמחשב – עוד לא שמעתי מחשב שיכול על מערכת סטריאו טובה, זו דעתי. אבל לעיתים אין ברירה וחייבים להשתמש במחשב – אני משתמש בmplayer משורת פקודה על מנת לצפות ולהאזין לקבצים שמורים – הסיבה לכך פשוטה: אפשר לנגן את כל הקבצים בספרייה אחת פשוט על ידי:
[sagivba@sagivba my_sounds]$ mplayer *
מקשים שימושיים לשליטה בmplayer:
הורדת דיסק מוזיקה שלם למחשב בקבצי wav:
cdparanoia -sB