שיעור 08: Terminal, launchd & Background Processes - Facilitator Guide (Asset B)¶
1. מבוא לטרמינל (Terminal)¶
- Objective:
המשתתפים יבינו מדוע ה-Terminal הוא כלי העבודה החשוב ביותר של איש ה-IT, וישרו קו על פקודות וקיצורי מקלדת בסיסיים לפני הצלילה לעומק המערכת.
-
Discussion (Script):
-
"ברוכים הבאים לשיעור שבו הכל מתחיל להיות אמיתי."
- "עד עכשיו התעסקנו בעיקר בממשק הגרפי:"
- הממשק של המק יפה וחלק.
- נועד להחביא מורכבות מהמשתמש.
- אבל כאנשי IT, אסור לנו להסתתר מאחורי תפריטים נוצצים.
- "מתי הממשק הגרפי לא יעזור לנו?"
- כשיש תקלה.
- כשהמחשב קופא.
- כשהמשתמש לא מצליח לעשות כלום.
- "ומה לגבי ניהול ארגוני?"
- במערכות כמו Jamf או Intune, שולחים פקודות למאות מחשבים במקביל.
- עושים זאת עם סקריפט בטרמינל, לא על ידי לחיצה על עכבר.
- "עובדת בונוס היסטורית:"
- הטרמינל והסקריפטים שאנחנו מריצים הגיעו בירושה ממערכת NeXTSTEP עם השקת Mac OS X Cheetah ב-2001.
- "מעבר ל-Zsh:"
- החל מ-macOS Catalina, זוהי שפת ברירת המחדל בטרמינל.
- מודרנית יותר מ-Bash.
- מתאימה יותר לאוטומציות של היום.
-
"לפני שנצלול פנימה, נעשה יישור קו:"
- נלמד איך לנווט.
- נראה איך לבטל פקודה שנתקעה.
- נלמד לקרוא את המסך בלי סחרחורת.
-
Demonstration:
-
פתחו את Terminal:
- השתמשו ב-Spotlight (
Cmd+Spaceוהקלידו Terminal).
- השתמשו ב-Spotlight (
- הגדילו את הטקסט:
- לחצו
Cmd +כדי שכל הכיתה תראה.
- לחצו
- הריצו
pwd:- הראו היכן מתחילים (תיקיית הבית של המשתמש).
- הריצו
ls -la:- הדגימו הבדל בין קבצים רגילים לנסתרים (מתחילים בנקודה).
- הקלידו פקודה ארוכה והדגימו קיצורים:
Ctrl + Aלקפיצה להתחלה.Ctrl + Eלקפיצה לסוף.
- הריצו פקודה ש"נתקעת":
- הריצו
ping 1.1.1.1להדגמת ריצה אינסופית.
- הריצו
- עצרו את הפקודה:
- לחצו
Ctrl + C. - הסבירו שזהו לחצן ה"ביטול/הצלה" לתהליכים עקשניים בטרמינל.
- לחצו
-
נקו את המסך:
- הריצו
clear(או לחצוCtrl + L).
- הריצו
-
Instructor Deep-Dive:
הרחבה טכנית למדריך (TCC וחסימות טרמינל)
**מה קורה אם הטרמינל כותב "Operation not permitted"?** * זה לא באג של הרשאות (קריאה/כתיבה). * זוהי התערבות של מנגנון ה-TCC (Transparency, Consent, and Control). * **מגבלות הגישה:** * מ-Mojave (ובעיקר מ-Catalina), אין לטרמינל גישה לתיקיות רגישות (Desktop, Documents, Downloads). * זה קורה גם אם מריצים כ-`sudo` או כמשתמש מנהל. * **איך פותרים את זה?** 1. **פתרון מקומי:** * היכנסו אל `System Settings > Privacy & Security`. * תנו **Full Disk Access** לאפליקציית Terminal. 2. **פתרון ארגוני מנוהל (MDM):** * דוחפים פרופיל PPPC (Privacy Preferences Policy Control). * הפרופיל מאשר מראש (Pre-approved) גישה לסקריפטים, לטרמינל ולכלי ה-MDM. * מונע הופעת חלונות קופצים מטרידים למשתמש הקצה המבקשים גישה.2. הלב של המערכת¶
- Objective:
המשתתפים יכירו את תהליך ה-launchd, ה"אבא" של כל התהליכים במק, ויבינו את ההבדל הקריטי בין LaunchAgents ל-LaunchDaemons.
-
Discussion (Script):
-
"כשמדליקים את המק:"
- לאחר טעינת הליבה (Kernel), השליטה עוברת לתוכנה המנצחת על התזמורת:
launchd. - ל-
launchdתמיד יש PID מספר 1 ב-Activity Monitor. - התוכנה הראשונה לקום, והאחרונה לרדת בכיבוי.
- לאחר טעינת הליבה (Kernel), השליטה עוברת לתוכנה המנצחת על התזמורת:
- "על מה
launchdאחראי?"- טעינה וניהול תהליכים.
- התנעה מחדש אם משהו קרס.
- סגירה מסודרת של אפליקציות.
- "פרט טריוויה מעניין על launchd:"
- פותח על ידי Dave Zarzycki בשנת 2005 כדי להחליף מנגנונים ישנים כמו cron במנהל תהליכים אחד מרכזי. מאוחר יותר אפל הוסיפה מערכות כמו DAS לתזמון משימות גמיש לפי עומס המחשב.
-
"עבור אנשי תמיכה - שני סוגי סוכנים חשובים:"
- LaunchDaemon (שד מערכתי):
- רץ ברקע כמשתמש
root. - עובד גם אם לא בוצע Login למחשב.
- דוגמאות: אנטיווירוס ארגוני, סוכן MDM, או VPN מנוהל.
- רץ ברקע כמשתמש
- LaunchAgent (סוכן אישי):
- נטען רק אחרי שמשתמש עושה Login.
- רץ עם הרשאות המשתמש הנוכחי.
- דוגמאות: Dropbox, אלמנטים בתפריט העליון, או גיבויים קטנים.
- LaunchDaemon (שד מערכתי):
-
Demonstration:
-
פתחו פיינדר והדגימו ניווט:
- השתמשו בתפריט
Go -> Go to Folder(קיצורCmd+Shift+G).
- השתמשו בתפריט
- נווטו אל
/System/Library/LaunchDaemons:- הסבירו: "אלו שירותי הליבה של אפל".
- ציינו שהם נעולים תחת ה-SSV ואי אפשר למחוק אותם.
- נווטו אל
/Library/LaunchDaemons(בלי System):- הסבירו: "כאן יושבות חברות צד שלישי (CrowdStrike, Jamf, SentinelOne)".
- ה-Daemons כאן רצים תמיד ברקע ברמת המערכת.
- נווטו אל
~/Library/LaunchAgents(עם טילדה):- הסבירו: "כאן נשמרים סוכנים אישיים של המשתמש".
- הם עולים רק כשהמשתמש הספציפי מתחבר.
-
הראו את מבנה השמות:
- הדגימו שימוש ב-Reverse Domain Name.
- למשל:
com.apple.mDNSResponder.plist.
-
Instructor Deep-Dive:
הרחבה טכנית למדריך (BTM ו-launchctl)
**איך מנהלים שירותים שנתקעו?** * לפעמים Daemon קורס ולא מתאושש, או שדורש איפוס. * במקום לעשות ריסטרט למחשב, משתמשים בפקודת `launchctl`: * **לפרוק (Unload) שירות:** `sudo launchctl bootout system /Library/LaunchDaemons/com.example.plist` * **לטעון מחדש (Load):** `sudo launchctl bootstrap system /Library/LaunchDaemons/com.example.plist` **הערת Login Items (מנגנון Background Task Management):** * מ-macOS Ventura קיים מסך חדש תחת `System Settings > General > Login Items & Extensions`. * **הסכנה:** * משתמש יכול לכבות Daemons של צד שלישי (מנגנון BTM). * אם כיבו סוכן MDM או Antivirus, ה-`launchd` יסרב להפעיל אותם. * פקודת `bootstrap` תיכשל עם השגיאה: `Service cannot load in requested session`. * **הפתרון הארגוני:** * חובה לדחוף פרופיל תצורה מה-MDM בשם `ServiceManagement Profile`. * הפרופיל נועל את ההגדרות הללו. * מונע מהמשתמש לכבות שירותי רקע ארגוניים חיוניים.3. אבחון עמוק¶
- Objective:
המשתתפים ילמדו כיצד לאבחן תקלות בזמן אמת דרך עומסי זיכרון (Memory Pressure) ב-Activity Monitor, ויכירו את מבנה ודרכי האבחון של קבצי תצורה מסוג Plist.
-
Discussion (Script):
-
"שאלה נפוצה בתמיכה: למה המק שלי איטי?"
- משתמשים וטכנאים רגילים לבדוק "כמה RAM פנוי נשאר".
- ב-macOS מודרנית זו שאלה שגויה מיסודה.
- "למה זיכרון פנוי הוא זיכרון מבוזבז?"
- המערכת שואפת למלא את ה-RAM במידע (Cache) כדי לרוץ מהר יותר.
- "המדד האמיתי: Memory Pressure (עומס זיכרון):"
- הגרף ב-Activity Monitor אומר לנו איך המק מרגיש.
- ירוק: הכל מעולה.
- צהוב: המק מתאמץ, דוחס זיכרון במקום (Memory Compression).
- אדום: סכנה. המק כותב המון מידע מה-RAM לכונן הקשיח (Swap). פה מתחילות האיטיות והקריסות.
- "קצת היסטוריה מאחורי הקלעים:"
- ה-Activity Monitor המוכר נוצר ב-2003 מאיחוד תוכנות קטנות (Process Viewer ו-CPU Monitor). בנוסף, השימוש בקבצי Plist הגיע מ-NeXTSTEP, והמעבר לפורמט בינארי ב-2002 נועד לשפר ביצועים ולמנוע שגיאות עריכה ידנית.
-
"חקירת הגדרות וקריסות (Plists):"
- כל הגדרה של כל אפליקציה במק נשמרת בקובץ Plist (Property List).
- אם אפליקציה קורסת, התקנה מחדש לרוב לא תעזור (תוריד שוב את אותו קובץ תקין).
- הפתרון האמיתי לרוב: לאפס את קובץ ה-Plist המושחת שלה.
-
Demonstration:
-
פתחו את Activity Monitor:
- עברו ללשונית Memory.
- הראו בתחתית המסך את גרף ה-Memory Pressure (סביר שיהיה ירוק).
- הראו את עמודת
Swap Used:- הסבירו: נתון גבוה + גרף אדום = סכנה ובעיה.
- במצב כזה, יש לסדר את העמודה לפי צריכת זיכרון כדי לאתר אפליקציה שואבת זיכרון (Memory Leak).
- הדגימו קבצי Plist:
- פתחו Finder ונווטו אל
~/Library/Preferences. - פתחו קובץ Plist אקראי (למשל
com.apple.finder.plist) עם TextEdit. - הראו את תגיות ה-XML במבנה (למשל
<key>,<string>,<integer>).
- פתחו Finder ונווטו אל
-
הדגימו בדיקת תקינות עם
plutil:- פתחו Terminal והקלידו:
plutil -lint /Users/youruser/Library/Preferences/com.apple.finder.plist - הסבירו שהפקודה מבצעת "Linting" (בדיקת תקינות).
- היא מוודאת שאין פגמים או שגיאות בקוד לפני הטעינה למערכת.
- פתחו Terminal והקלידו:
-
Instructor Deep-Dive:
הרחבה טכנית למדריך (קריאת Plists ו-Cache)
**המרת קבצי Plist בינאריים:** * קבצים רבים שמורים בפורמט בינארי לחסכון במקום (ולא כטקסט XML קריא). * פתיחה ב-TextEdit תציג "ג'יבריש". * **פקודות המרה וקריאה מועילות:** * לקריאה מהירה למסך (כמו חלון הצצה): `plutil -p /path/to/file.plist` * להמרת הקובץ ל-XML עריך: `sudo plutil -convert xml1 /path/to/file.plist` * להמרה חזרה לבינארי (לאחר עריכה): `sudo plutil -convert binary1 /path/to/file.plist` **סכנת ה-cfprefsd:** * מגרסאות ישנות (Mavericks והלאה), המערכת מטמינה (Caches) קבצי Plist בזיכרון כדי לחסוך כתיבות ל-SSD. * התהליך המנהל זאת נקרא `cfprefsd`. * **מה קורה בעריכה ידנית?** * אם תשנו מפתח ב-Plist בעורך טקסט ותשמרו, השינוי עלול להימחק. * ברגע הפעלת האפליקציה, `cfprefsd` עשוי לדרוס את הקובץ עם מה ששמור לו בזיכרון. * **הפתרון לאנשי IT:** * שימוש בפקודת `defaults write`. * הפקודה משוחחת ישירות עם מערכת המטמון ומבטיחה שהשינוי יישמר.4. תיבול ארגוני¶
- Objective:
המשתתפים ילמדו כיצד סוכן ה-MDM משתלב כתהליך שקוף בתוך מערכת ההפעלה, ויבינו מה לחפש ב-Activity Monitor וב-Console כאשר פקודות MDM נכשלות.
-
Discussion (Script):
-
"איך מתנהל המחשב מול שרת MDM?"
- נדרש סוכן מאחורי הקלעים שיקבל פקודות:
mdmclient. - הוא מובנה במערכת כ-Daemon ונמצא בכל מק.
- ממתין להגדרות מול שרת MDM ארגוני (לדוגמה, בזמן Automated Device Enrollment).
- נדרש סוכן מאחורי הקלעים שיקבל פקודות:
- "איך התהליך עובד בפועל?"
- ה-
mdmclientמאזין לשירותי ה-Push של אפל (APNs). - מקבל "דקירה" (Wake up call) מהרשת.
- מתעורר, יוצר קשר החוצה (ב-HTTPS) עם שרת ה-MDM.
- מושך את פקודת העבודה ומעביר ל-LaunchDaemons אחרים (כמו מנוע
profiledלהתקנת פרופילים).
- ה-
-
"למה מחשב לא מגיב לפקודות MDM?"
- לרוב זו בעיה אצל הלקוח, לא "באג באתר".
- ה-
mdmclientאולי קרס. - חומת אש (Firewall או Proxy) מיירטת תקשורת SSL.
- חסימה של חיבור ה-Push של אפל (פורט 5223).
- את האבחון האמיתי נעשה דרך קריאת הלוגים.
-
Demonstration:
-
פתחו את אפליקציית Console:
- נמצאת תחת
Applications/Utilities.
- נמצאת תחת
- חפשו את ה-
mdmclient:- בשורת החיפוש בפינה הימנית העליונה, הקלידו
mdmclientולחצו Enter. - הראו כיצד מדווחת כל הפעילות הקשורה לסנכרון הפרופילים.
- בשורת החיפוש בפינה הימנית העליונה, הקלידו
- פתחו Terminal להדגמת לוגים חיים (Streaming):
- הריצו את הפקודה לשאיבת לוגים חיים. זה מאפשר לאיש תמיכה לראות כניסת פקודות בזמן אמת.
- הפקודה (ללא sudo רק לשם הדגמה):
log stream --predicate 'process == "mdmclient"' --info
- ייצרו תנועה במערכת:
- בקשו מהתלמידים לפתוח את תפריט הפרופילים (
System Settings > Privacy & Security > Profiles). - הסבירו שכניסה למסך זה או כפיית ריענון תיצור שורות לוג חדשות בזמן אמת.
- בקשו מהתלמידים לפתוח את תפריט הפרופילים (
-
סיימו את ההדגמה:
- עצרו את ריצת הפקודה בטרמינל בעזרת
Ctrl+C.
- עצרו את ריצת הפקודה בטרמינל בעזרת
-
Instructor Deep-Dive: