Linux מגפיים

כפי שמתברר, אין הרבה בתהליך האתחול:

1. טוען אתחול מוצא את תמונת הליבה ב- disk, טוען אותו לזיכרון ומתחיל אותו.
2. הקרנל לאתחל את ההתקנים ומנהלי ההתקנים STI.
3. הקרנל מעלה את קובץ השורשsystem.
4. הקרנל מתחיל init קרא ללוח זמנים.
5. init מגדיר את שאר התהליכים בתנועה.
6. התהליכים האחרונים שמתחיל init כחלק מרצף האתחול מאפשר לך להיכנס למערכת.

זיהוי כל שלב בתהליך האתחול לא יסולא בפז בתיקון בעיות האתחול והבנת ה system כשלם. כדי להתחיל, אפס את מטען האתחול, שהוא המסך הראשוני או ההנחיה שאתה מקבל לאחר שהמחשב מבצע את ההפעלה העצמית שלו, ושואל איזו פעולה system לרוץ. לאחר שתבחר, טוען האתחול מריץ את Linux קרנל, מתן שליטה על system לליבה.

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

VFS: Mounted root (קבצי ext2system) לקריאה בלבד.

זמן קצר לאחר מכן תראה הודעה על התחלת init, ואחריה system הודעות הפעלת שירות, ולבסוף אתה מקבל הודעת כניסה כלשהי.

הערה : ביום רד האט Linux, הערת ה-init ברורה במיוחד, כי היא "מברכת אותך בברכה" ל-Red Hat Linux." כל ההודעות לאחר מכן מציגות הצלחה או כישלון בסוגריים בצד ימין של המסך.

רובו של הפרק זה עוסק בinit, בגלל זה הוא איפה חלק מרצף האתחול יש לך את השליטה ביותר.
init

אין שום דבר מיוחד ב-init. זו תוכנית כמו כל תוכנית אחרת ב- Linux systemותמצא אותו ב- / sbin יחד עם אחרים system בינאריות. המטרה העיקרית של init היא להתחיל ולעצור תוכניות אחרות ברצף מסוים. כל שעליכם לדעת הוא כיצד עובד הרצף הזה.

יש כמה וריאציות שונות, אבל רובן Linux הפצות משתמשות ב- System סגנון V שנדון כאן. הפצות מסוימות משתמשות בגרסה פשוטה יותר הדומה ל- BSD, אך לא סביר שתיתקל בכך.

Runlevels

בכל זמן נתון על א Linux system, מערכת בסיס מסוימת של תהליכים פועלת. המצב הזה של machine נקרא מפלס המסלול שלו, והוא מסומן במספר מ- 0 עד 6. ה- system מבלה את רוב זמנו ברמה אחת. עם זאת, כשאתה סוגר את macלחדד למטה, init עובר לרמה אחרת כדי לסיים את system שירותים בצורה מסודרת ולהורות לגרעין להפסיק. רמת ריצה נוספת היא למשתמש יחיד mode, נדון מאוחר יותר.

הדרך הקלה ביותר לקבל טיפול ברמות ריצה היא לבחון את קובץ התצורה של init, /etc/inittab. חפש שורה כמו הבאה:

מזהה: 5: initdefault:

משמעות השורה הזו היא ש default דרגת מדרגה על system הוא 5. כל השורות בקובץ inittab לובשות צורה זו, כאשר ארבעה שדות מופרדים על ידי נקודתיים מתרחשים בסדר הבא:
# מזהה ייחודית (מחרוזת קצרה, כגון מספר זיהוי בדוגמא הקודמת)
# מספר רמת הריצה הישים (ים)
# הפעולה ש- init צריכה לבצע (בדוגמה הקודמת, הפעולה היא להגדיר את ה- default דרגה עד 5)
# הפקודה לביצוע (אופציונלי)

אין פקודה לבצע בביצוע הקודםdefault דוגמא מכיוון שפקודה אינה הגיונית בהקשר של הגדרת ה- default דרגת דרגה. הסתכל קצת יותר למטה ב- inittab, עד שתראה שורה כזו:

l5: 5: לחכות וכו ':/ / rc.d / RC 5

קו זה מפעיל את רוב ה - system תצורה ושירותים דרך ספריות rc * .d ו- init.d. אתה יכול לראות ש- init מוגדר לבצע פקודה בשם /etc/rc.d/rc 5 כאשר ברמת רמה 5. פעולת ההמתנה מספרת מתי ואיך init מריץ את הפקודה: הפעל rc 5 פעם אחת מתי entering runlevel 5, ואז המתן לפקודה זו להסתיים לפני שתעשה משהו אחר.

ישנן מספר פעולות שונות ב addאיטיון ליזוםdefault והמתן, במיוחד בכל הנוגע לניהול צריכת חשמל, והדף הידני של inittab (5) מספר הכל אודותיהם. אלה שסביר להניח שתיתקל בהם מוסברים בסעיפים הבאים.

respawn

פעולת ה-respawn גורמת ל-init להפעיל את הפקודה שאחריה, ואם הפקודה מסיימת להפעיל אותה, להפעיל אותה שוב. סביר להניח שתראה משהו דומה לשורה הזו בקובץ inittab שלך:

1: 2345: tty1 sbin / mingetty :/ respawn

תוכניות גטי לספק התחברות הנחיות. השורה הקודמת היא לקונסולה הווירטואלית הראשונה (/ dev / tty1), אחד שאתה רואה כשאתה לוחץ ALT או שליטה-Alt-F1 F1. פעולת respawn מביאה בחזרה הפקודה הכניסה לאחר שתצא.

ctrlאלטדל

אל האני ctrlפעולת altdel שולטת על מה system עושה כאשר אתה לוחץ על CONTROL-ALT-DELETE במסוף וירטואלי. על רוב systems, זה סוג של פקודת אתחול מחדש באמצעות פקודת הכיבוי.

sysinit

פעולת sysinit היא הדבר הראשון שעליו להפעיל אותה כאשר היא מופעלת לפני כן enterבכל רמות.

כיצד תהליכים בrunlevels להתחיל

כעת אתה מוכן ללמוד כיצד ליזום את system שירותים, רגע לפני שהוא מאפשר לך להתחבר. נזכר בשורת ה- inittab הזו מקודם:

l5: 5: לחכות וכו ':/ / rc.d / RC 5

קו קטן זה מעורר תוכניות רבות אחרות. RC הוא הקיצור של פקודות הפעלה, ותוכל לשמוע אנשים מתייחסים לפקודות כמו תסריטים, תוכניות או שירותים. אז, איפה פקודות אלה, בכל מקרה?

עבור runlevel 5, בדוגמה זו, הפקודות ככל הנראה הן /etc/rc.d/rc5.d או /etc/rc5.d. Runlevel 1 משתמש ב- rc1.d, runlevel 2 משתמש ב- rc2.d וכן הלאה. ייתכן שתמצא את הדברים הבאים items בספרייה rc5.d:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

פקודת 5 RC מתחילה תוכניות בספריית רמת ריצה זו על ידי הרצת פקודות GMT:

S10sysklogd הבית
S12kerneld הבית
S15netstd_init הבית
S18netbase הבית
...
S99sshd הבית

שימו לב לארגומנט ההתחלה בכל פקודה. ה-S בשם פקודה אומר שהפקודה צריכה לפעול בהתחלה mode, והמספר (00 עד 99) קובע היכן ברצף rc מתחיל את הפקודה.

RC *. פקודות D הם סקריפטים הפגז שמתחילים בדרך כלל בתוכניות / sbin או / usr / sbin. בדרך כלל, אתה יכול להבין מה אחת מהפקודות למעשה אין מלהסתכל על התסריט עם פחות או זימונית תכנית אחרת.

באפשרותך להתחיל באחד משירותים אלה ביד. לדוגמא, אם ברצונך להפעיל את תוכנית שרת האינטרנט httpd באופן ידני, הפעל את S99httpd start. באופן דומה, אם אי פעם תצטרך להרוג את אחד השירותים כאשר ה- machine פועל, אתה יכול להפעיל את הפקודה בספריית rc * .d עם ארגומנט העצירה (S99httpd stop, למשל).

מספר ספריות rc*.d מכילות פקודות שמתחילות ב-K (עבור "להרוג" או להפסיק mode). במקרה זה, rc מריץ את הפקודה עם הארגומנט stop במקום start. סביר להניח שתתקל בפקודות K ברמות ריצה שסוגרות את system למטה.

Addשירותי הסרה והסרה

אם אתה רוצה add, למחוק או לשנות שירותים בספריות rc*.d, עליך להסתכל מקרוב על הקבצים שבפנים. רשימה ארוכה מגלה מבנה כזה:

lrwxrwxrwx. . . S10sysklogd -> .. / init.d / sysklogd
lrwxrwxrwx. . . S12kerneld -> .. / init.d / kerneld
lrwxrwxrwx. . . S15netstd_init -> .. / init.d / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d / NetBase
...

הפקודות בספריית rc*.d הן למעשה קישורים סמליים לקבצים בספריית init.d, בדרך כלל ב- /etc או /etc/rc.d. Linux הפצות מכילות קישורים אלה כדי שיוכלו להשתמש באותם סקריפטים להפעלה עבור כל רמות הריצה. מוסכמה זו אינה דרישה בשום פנים ואופן, אך לעתים קרובות היא מקלה מעט על הארגון.

כדי למנוע מאחת הפקודות בספריית init.d לפעול ברמה מסוימת, אתה עשוי לחשוב על הסרת הקישור הסמלי בספריית rc * .d המתאימה. זה אכן עובד, אך אם תטעו ותצטרך להחזיר את הקישור למקומו, ייתכן שתתקשה לזכור את שמו המדויק של הקישור. לכן, אתה לא צריך להסיר קישורים בספריות rc * .d, אלא add קו תחתון (_) לתחילת שם הקישור כך:

_S99httpd S99httpd MV

בזמן האתחול, rc מתעלם מ- _S99httpd מכיוון שהוא לא מתחיל ב- S או K. יתר על כן, השם המקורי עדיין ברור, ויש לך גישה מהירה לפקודה אם אתה בקמצוץ וצריך להפעיל אותו ביד.

ל add שירות, עליך ליצור סקריפט כמו האחרים בספריית init.d ואז ליצור קישור סמלי בספריית rc * .d הנכונה. הדרך הקלה ביותר לכתוב סקריפט היא לבדוק את הסקריפטים שכבר נמצאים ב- init.d, ליצור עותק של אחד שאתה מבין ולשנות את העותק.

מתי addלאחר שירות, וודא שאתה בוחר מקום מתאים ברצף האתחול להתחלת השירות. אם השירות מתחיל מוקדם מדי, ייתכן שהוא לא יעבוד בגלל תלות בשירות אחר. עבור שירותים שאינם חיוניים, רובם systems administratorאני מעדיפה מספרים בשנות ה-90, אחרי רוב השירותים שהגיעו עם system.

Linux הפצות מגיעות בדרך כלל עם פקודה להפעיל ולנטרל שירותים בספריות rc * .d. לדוגמה, בדביאן, הפקודה היא update-rc.d, וברד האט Linux, הפקודה היא chkconfig. ממשקי משתמש גרפיים זמינים גם כן. שימוש בתוכנות אלה עוזר לשמור על עקביות של ספריות האתחול ועוזר בשדרוגים.

רמז: אחד הנפוצים ביותר Linux installבעיות שגיאה הוא שרת XFree86 שהוגדר כהלכה ומתנדנד ומופעל, מה שהופך את system לא שמיש בקונסולות. כדי לעצור התנהגות זו, אתחל לתוך משתמש יחיד mode ולשנות את שירותי הריצה או הריצה שלך. חפש משהו שמכיל xdm, gdm או kdm בספריות rc*.d שלך, או /etc/inittab שלך.

השליטה init

מדי פעם, אתה צריך לתת ל-init בעיטה קטנה כדי לומר לו להחליף רמות ריצה, לקרוא שוב את קובץ inittab, או פשוט כדי shut down מה היא system. מכיוון ש- init הוא תמיד התהליך הראשון ב- system, מזהה התהליך שלה הוא תמיד 1.

אתה יכול לשלוט בעם init telinit. לדוגמה, אם ברצונך לעבור לרמת הריצה 3, להשתמש בפקודה זו:

telinit 3

בעת החלפת רמות ריצה, init מנסה להפסיק את כל התהליכים שאינם נמצאים בקובץ inittab עבור רמת הריצה החדשה. לכן, עליך להיזהר משינוי רמות הריצה.

כשאתה צריך add או להסיר עבודות הפעלה מחדש או לבצע כל שינוי אחר בקובץ inittab, עליך לספר ל-init על השינוי ולגרום לו לקרוא מחדש את הקובץ. יש אנשים שמשתמשים ב-kill -HUP 1 כדי לומר ל-init לעשות זאת. שיטה מסורתית זו פועלת על רוב הגרסאות של Unix, כל עוד אתה מקליד אותה נכון. עם זאת, אתה יכול גם להפעיל את פקודת telinit זו:

telinit q

אתה יכול גם להשתמש ב-telinit s כדי לעבור למשתמש יחיד mode.

כיבוי

init שולט גם כיצד system מכבה ומאתחל מחדש. הדרך הנכונה shut down a Linux machine הוא להשתמש בפקודת הכיבוי.

ישנן שתי דרכים בסיסיות להשתמש בכיבוי. אם תעצור את system, זה סוגר את macתשחץ ותשמור עליו. כדי להפוך את macלרפא לעצור מיד, השתמש בפקודה זו:

כיבוי-h עכשיו

על רוב modern machines עם גרסאות עדכניות למדי של Linux, הפסקה מנתקת את החשמל ל- macהיינה. אתה יכול גם לאתחל את ה- macהיינה. לצורך אתחול מחדש, השתמש ב- -r במקום ב- -h.

תהליך הכיבוי לוקח מספר שניות. אתה לעולם לא צריך לאפס או לכבות את macלרפא במהלך שלב זה.

בדוגמה הקודמת, עכשיו זה הזמן shut down. טענה זו היא חובה, אך ישנן דרכים רבות לציין אותה. אם אתה רוצה את macאם יירד מתישהו בעתיד, דרך אחת היא להשתמש ב-+n, כאשר n הוא מספר הדקות שהכיבוי צריך להמתין לפני ביצוע עבודתו. לאחר options, עיין בדף המדריך לכיבוי (8).

לעשות system אתחל מחדש תוך 10 דקות, הפעל פקודה זו:

כיבוי-R + 10

On Linux, כיבוי מודיע לכל מי שחובר על כך שה macהוא יורד, אבל הוא עושה מעט עבודה אמיתית. אם אתה מציין זמן אחר מאשר עכשיו, כיבוי יוצר קובץ בשם /etc/nologin. כאשר קובץ זה קיים, ה- system אוסר על כניסה על ידי מישהו פרט למשתמש העל.

מתי system זמן הכיבוי מגיע סוף סוף, הכיבוי אומר ל- init לעבור לרמת דרגה 0 להפסקה ולרמת הרמה 6 להפעלה מחדש. כאשר init enterרץ 0 או 6, כל הדברים הבאים מתקיימים, שתוכלו לאמת על ידי התבוננות בתסריטים בתוך rc0.d ו- rc6.d:

1. init הורג כל תהליך שהוא יכול (כפי שהיה בעת מעבר לכל רמת ריצה אחרת).

# הפקודות הראשוניות rc0.d / rc6.d פועלות וננעלות system קבצים למקומם וביצוע הכנות אחרות לכיבוי.
# הפקודות הבאות של rc0.d/rc6.d מבטלות את כל הקבציםsystems חוץ מהשורש.
# פקודות rc0.d/rc6.d נוספות מטילות מחדש את קובץ השורשsystem לקריאה בלבד.
# עוד יותר פקודות rc0.d/rc6.d כותבות את כל הנתונים המאוחסנים לקובץsystem עם תוכנית הסנכרון.
# הפקודות rc0.d / rc6.d הסופיות לספר את הקרנל כדי לאתחל מחדש או להפסיק עם האתחול מחדש, עצירה, או תכנית PowerOff.

תוכניות האתחול וההפסקה מתנהגות אחרת בכל מפלס רמה, מה שעלול לגרום לבלבול. על ידי default, תוכניות אלו מתקשרות לכיבוי עם ה-r או -h options, אבל אם system כבר נמצא במסלול ההפסקה או אתחול מחדש, התוכניות אומרות לגרעין לכבות את עצמו באופן מיידי. אם אתה באמת רוצה לסגור את שלך macלהתחפש במהירות (תוך התעלמות מכל נזק אפשרי מכיבוי לא מסודר), השתמש באפשרות -f.

כחובב טכנולוגיה, אני כותב בשמחה ב- StealthSettings.com מאז 2006. יש לי ניסיון עשיר במערכות הפעלה: macOS, Windows, ו- Linux, וגם בשפות תכנות ופלטפורמות בלוגינג (WordPress) ולסוחרת אלקטרונית (WooCommerce, Magento, PrestaShop).

השאירו תגובה