בקרת ג'ובים בלינוקס

בקרת ג'ובים פירושה היכולת לעצור (stop), להקפיא (suspend) ולחדש ריצה של תהליכים.

טבלת ג'ובים:
ה- shell של לינוקס מחזיק טבלה של ג'ובים שרצים במערכת. כדי ליצור ג'וב חדש נריץ את הפקודה הבאה:

$ sleep 10 &
[1] 17029
$

הסבר: המספר 1 (מוקף בסוגריים מרובעים) זה מס' ה- Job (נקרא JID או Job ID) ו- 17029 זה מספר התהליך (PID או Process ID).

הצגת טבלת הג'ובים שרשומה במערכת:

$ jobs
[1]+ Running sleep 10 &

 

להמשיך לקרוא בקרת ג'ובים בלינוקס

VIM: טיפ

כל מי שעובד עם vim בטח ניתקל בתופעה הבאה:
פותחים קובץ לעריכה, אך שוכחים שאין לנו הרשאות כתיבה (ולכן נאלצים לצאת מהעורך ולהיכנס אליו שוב עם הרשאות מתאימות).

מה הפתרון?
לבצע את השמירה בדרך הבאה:

:w !sudo tee % > dev/null

  • sudo! – קוראת לפקודה sudo
  • tee – מפנה את פלט הקובץ ל- % – שזה הקובץ הנוכחי

בסיום הפקודה מקבלים הודעה שהקובץ יטען מחדש (לאחר הקשת L).

הערה:
ניתן לבצע קיצור דרך לפעולה הנ"ל ע"י עריכת הקובץ vimrc. והוספת השורה הבאה:

command W w !sudo tee % > dev/null

עתה הקשה על W: תבצע את השמירה לקובץ

הכוח של perl

שורת קוד אחת מוחקת את כל התיקיות הריקות, בצורה רקורסיבית, החל מהמיקום הנוכחי ומטה… לא צריך להדביק את השורה בקובץ מסויים אלא רק להדביק ב- shell המועדף וללחוץ Enter

perl -MFile::Find -e"finddepth(sub{rmdir},'.')"

שימושי למי למעוניין לנקות קצת זבל במחשב (אם כי הייתי מאוד נזהר ומריץ את הפקודה רק מתיקיית הבית ולא מ- root)

fsck מאולץ

דבר מוזר קרה לי השבוע… נגמר המקום באחת המחיצות בדיסק והחלטתי לפנות מקום ע"י העברת קובץ גדול (כ- 5 גיגה) למחיצה אחרת.

באמצע ההעתקה המחשב נתקע (אובונטו… 🙂 ), וניתן היה לאושש את המחשב רק ע"י אתחול פיזי. זה מה שביצעתי בפועל, אך לאחר האתחול הקובץ "נעלם" מבלי שהתפנה שטח מתאים במחיצה המקורית.

איך יוצאים מהתקלה המוזרה? מריצים fsck. ניתן להריץ את הפקודה מדיסק הצלה (אסור להריץ את הפקודה במערכת "חיה") וניתן להנחות את מערכת ההפעלה להריץ fsck בתהליך האתחול הבא (כך: sudo touch /forcefsck).

fsck פתר את הבעיה וכולי תקווה שאירוע כזה (במערכת ext4) לא יקרה יותר.

הערה: קראתי מאמר שניתן לכפות הרצת fsck (לאחר אתחול) ע"י הפקודה shutdown -rF now, אך הדגל F לא קיים, משום מה, באובונטו.

iotop

בחלונות לעיתים קרובות הדיסק הקשיח עובד קשה גם מבלי שמשתמש מסויים עובד על המחשב (או מריץ תוכנה כלשהי). יכולות להיות לכך הרבה סיבות: ריצה של האנטי וירוס, אנטי ספייוור, תוכנת אינדוקס (אם קיימת), תוכנת איחוי, תולעת, סוס טרויאני, וירוס ועוד…

בלינוקס הדיסק הקשיח בדר"כ שקט כשלא עובדים על המחשב. אם בכל זאת אתם מרגישים בפעילות כדאי להריץ את הפקודה iotop שתספק לכם מידע איזה תוכנה מעסיקה את הדיסק. בדר"כ תמצאו ש- updatedb רץ, אך בכל מקרה כדאי, מידי פעם, לבדוק מי מעסיק את הדיסק (למרות שזה נדיר בלינוקס עדיין צריך לבדוק שאין פעילות עויינת במחשב).

iotop_big

הערה: התוכנה לא מותקנת בברירת המחדל, אך ניתן להתקין אותה בעזרת מנהל החבילות.

שרשור פקודות ב- Bash

מספר דרכים לשרשור פקודות ב- Bash:

  1. הרצת סקריפט שמכיל את הפקודות אחת אחר השניה (כל פקודה בשורה נפרדת).
    – כל הפקודות ירוצו באותו ה- shell (גם אם הן מצליחות וגם אם לא)
  2. הרצת הפקודה: cmd1;cmd2;cmd3
    – הפקודות מופרדות ע"י ';' ורצות אחת אחר השניה
    – כל פקודה ממתינה לסיום הפקודה הקודמת כשכל פקודה רצה ב- shell אחר (קראו את התגובות)
  3. הרצת הפקודה: (cmd1;cmd2;cmd3)
    – כמו 2 רק שכל הפקודות רצות באותו ה- shell ברקע (קראו את התגובות)
  4. הרצת הפקודה: cmd1 && cmd2 && cmd3
    -בהתחלה תרוץ הפקודה cmd1, אם תצליח תרוץ הפקודה cmd2 ואם לא תצליח לא תורץ אף פקודה נוספת.
    – '&&' שונה מ- ';' בכך שבשימוש ב- ';' הפקודות תמיד רצות אחת אחר השנייה (ללא תלות בתוצאות ההרצה הקודמת)
  5. ניתן להשתמש בסקריפט ולבדוק אם כל פקודה הצליחה או לא
    – ניתן לדעת אם פקודה הצליחה או לא ע"י בדיקת הערך של '?$'. אם '?$' מחזיר 0 הפקודה הצליחה ואם מחזיר כל ערך אחר הפקודה נכשלה.
    – ניתן לבצע בדיקות נוספות ומתוחכמות יותר ע"י שימוש ב- || (שמשמעותו 'או') או ב-  && ('וגם')
  6. שימוש ב- & (הרצה ברקע): cmd1 & cmd2 & cmd3
    כל הפקודות ירוצו במקביל אך זאת שתסיים ראשונה תציג את הפלט ראשונה (אם יש פלט)

כמעט בטוח שיש דרכים נוספות ואשמח להתעדכן (גם בטעויות שרשמתי…).